【发布时间】:2020-10-01 20:45:37
【问题描述】:
假设我的 :root 中有一个 --primary-color 变量。
假设我有几十个具有颜色属性的组件,我希望它们的颜色与--primary-color 相同。通常我必须在根中定义它们的颜色,例如
:root{
--primary-color: red;
--calendar-border-color: var(--primary-color);
}
这对于少量简单的组件来说很好,但是如果我有几十个组件,所有这些组件都有几个依赖于 :root 变量的属性怎么办?我不希望根有数百行长,并且难以导航到我需要更改的一个组件属性。
对我来说更有意义的是,拥有一个 calendar.css 文件,并定义一个子根/构造函数/无论我在哪里获取根变量,然后可以为该类定义我自己的变量,例如
calendar.css
:sub-root{
--calendar-border-color: var(--primary-color);
--calendar-highlight-color: var(--secondary-color);
--calendar-important-color: var(--third-color);
--calendar-default-color: var(--default-color);
}
.calendar-border{
color: var(--calendar-border-color);
height: 20px;
//etc...
然后我可以从那里更改一个我知道所有内容的文件。
我想存在这样的东西,对吧?
编辑:
似乎大部分都有效,但并非一直有效。最初,我在组件的主 div 上的类名中调用 .calendar:
.calendar {
--calendar-background-color: red;
background-color: var(--calendar-background-color)
}
所以我移动它并将 div 类名重命名为 'calendar-main':
.calendar{
--calendar-background-color: red;
}
.calendar-main{
background-color: var(--calendar-background-color)
}
这似乎适用于某些属性,但不适用于其他属性。知道发生了什么吗?
【问题讨论】:
-
使用 body 选择器作为你的子根,它会完成这项工作
-
没有“子根”之类的东西,只有元素,所以选择一个元素作为您定义的变量的“根”,并在那里定义它们。它们将可用于级联中较低的所有元素。
-
@TemaniAfif main.css 中的正文选择器?那会打败我的努力,不是吗?
-
@HereticMonkey 我知道没有这样的事情,但我认为这看起来是一个相对常见的问题,之前可能已经解决过。我不确定您选择根元素是什么意思。
-
不会,:root 相当于
html元素,所以body是完美的子根元素
标签: css css-variables