是否可以在css中定义常量?

zmo*_*mol 65 css

我在CSS样式表中使用了一些颜色.例如

#testdiv{
  background: #123456;
}
Run Code Online (Sandbox Code Playgroud)

是否可以按名称定义该颜色,以便我可以像这样在css表中引用它

#testdiv{
  background: COLORNAME;
}
Run Code Online (Sandbox Code Playgroud)

pro*_*ero 68

不是简单的CSS,但是你可以使用一些CSS扩展,比如SASSless-css.

这是一个较少css的例子:

@color: #4D926F;

#header {
  color: @color;
}
h2 {
  color: @color;
}
Run Code Online (Sandbox Code Playgroud)

  • 令人难以置信的是,尚未将常量添加到CSS3中.Web开发处于中世纪. (47认同)

Zoe*_*Zoe 35

是的,使用类是一种很好的方法,但现在可以在CSS中声明变量.当你声明相同的颜色(一个你需要十六进制值的颜色,如果你使用一个整合的颜色,它并不重要)时,变量(尤其是颜色变量)非常有用.

这是使用纯CSS(和tbh,不像使用SASS或lessCSS那么优雅),但它适用于纯CSS.首先,在:root块中定义实际变量.您也可以在例如p块中定义它(或者其他任何内容),但它只能在该块中使用.因此,为了确保它可以全局访问,请将其放在根块中:

:root {
  --custom-color: #f0f0f0;
}
Run Code Online (Sandbox Code Playgroud)

并且使用该var方法(没有var方法,它不会被解析为实际引用),您可以在以后引用它:

p{
    color: var(--custom-color);
}
Run Code Online (Sandbox Code Playgroud)

由于该:root块(与所有其他CSS声明一样)是一个引用元素的功能完备的块,因此您无法声明如下内容:

:root{
    color: #00ff00;
}
Run Code Online (Sandbox Code Playgroud)

这将引用每个元素的颜色属性并将其设置为(在此示例中)#00ff00.您声明的每个变量名都必须以--,这意味着您可以:

:root{
    --color: #00ff00;
}
Run Code Online (Sandbox Code Playgroud)

再说一次,如果可以,请使用SASS或lessCSS之类的东西.通过编写@color = #fff*和使用@color*引用来声明它们的能力比处理纯CSS和var每次要访问自定义属性时必须使用关键字要容易得多.

您可以使用JS访问内联CSS以获取和/或更改属性:

//Inline CSS
element.style.getPropertyValue("--custom-color");

// get variable from wherever
getComputedStyle(element).getPropertyValue("--custom-color");

// set variable on inline style
element.style.setProperty("--custom-color", "#f0f0f0");
Run Code Online (Sandbox Code Playgroud)

注意!

这是最近添加的功能,因此浏览器兼容性非常重要.特别是firefox值得特别注意,因为它在引入变量声明本身和var()方法之间存在差距.

*少用CSS @color,用SASS就可以了$color


cod*_*box 16

几个建议,所以它可能会很快发生,但据我所知,还没有标准化.

使用CSS类的问题是,如果要对不同的属性使用相同的值,它们没有帮助,例如,如果要对一个元素的边框使用特定颜色值,并且背景颜色为另一个.


Joh*_*nFx 11

定义CSS类并在要分配颜色的每个元素上重复使用它而不是将其编码为特定元素可能是更好的做法.

像这样:

.darkBackground {
   background: #123456;
}

.smallText {
   font-size:8pt;
}
Run Code Online (Sandbox Code Playgroud)

它还有助于知道元素可以应用多个类,因此您可以将"常量"元素值分解为单独的类,并根据需要应用多个类.

<div id="myDiv1" class="darkBackground smallText"></div>
<div id="myDiv2" class="darkBackground bigText"></div>
Run Code Online (Sandbox Code Playgroud)

  • 我不太喜欢你的榜样.我相信CSS类最适合用于对html文档结构进行分类.一个名为darkBackground的类没有描述文档的结构,并创建了文档与外观某些方面的概念耦合 - 这正是CSS应该让我们远离的.如果未来的开发人员需要切换到浅色背景,他们可能必须编辑html的加载以使用类"lightBackground"或通过编辑"darkBackground"规则来引用浅色来违反其类的含义. (50认同)
  • 说实话,你的例子确实解决了op和其他人遇到的根本问题:css不提供常数(原因是完全不同的辩论).处理它似乎归结为3个选项:1.(你的建议)使用css类来识别样式而不是结构.2.(probabilityzero的答案)使用某种形式的服务器端程序化css生成器.3.放弃,接受滋扰,并按原样接受css范式.鉴于你的答案是无可争议的,我偏爱2或3,我想我加2美分.干杯 (9认同)
  • 虽然我同意"可能更好的做法是定义一个CSS类并在你想要分配颜色的每个元素上重复使用它",这种方法的一个问题是颜色应用于不同的属性 - 例如,我有一个SVG rect元素应该与某些li元素的背景颜色相同,svg rect需要填充:红色而li元素需要背景:红色.使用这种方法,我必须在两个不同的地方定义颜色. (3认同)
  • 这个答案实际上并没有回答这个问题,正如其他人所说,这个建议值得怀疑. (3认同)
  • @算盘.我没有提交单独的答案,因为我自己的方法已经由其他答案代表.相反,我提供评论的目的是直接挑战已被接受为正确的答案. (2认同)

A. *_*fid 5

在CSS中,您可以在:root bloc中声明常量:

:root {
  --main-bg-color: #1596a7;
}
Run Code Online (Sandbox Code Playgroud)

并使用var()方法:

.panel-header {
    background: var(--main-bg-color);
    color: ....
}
Run Code Online (Sandbox Code Playgroud)