避免在CSS中重复使用常量

Mat*_*ard 9 css

是否有任何有用的技术可以减少CSS文件中常量的重复?

(例如,一堆不同的选择器应该都应用相同的颜色,或相同的字体大小)?

Joh*_*ers 9

最近,变量已被添加到官方CSS规范中.

变量允许你这样的事情:

body, html {
    margin: 0;
    height: 100%;
}

.theme-default {
    --page-background-color: #cec;
    --page-color: #333;
    --button-border-width: 1px;
    --button-border-color: #333;
    --button-background-color: #f55;
    --button-color: #fff;
    --gutter-width: 1em;
    float: left;
    height: 100%;
    width: 100%;
    background-color: var(--page-background-color);
    color: var(--page-color);
}

button {
    background-color: var(--button-background-color);
    color: var(--button-color);
    border-color: var(--button-border-color);
    border-width: var(--button-border-width);
}

.pad-box {
    padding: var(--gutter-width);
}
Run Code Online (Sandbox Code Playgroud)
<div class="theme-default">
    <div class="pad-box">
        <p>
            This is a test
        </p>
        <button>
           Themed button
        </button>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

不幸的是,浏览器支持仍然很差.根据CanIUse,今天唯一支持此功能的浏览器(2016年3月9日)是Firefox 43 +,Chrome 49 +,Safari 9.1+和iOS Safari 9.3+:

在此输入图像描述


备择方案 :

在CSS变量得到广泛支持之前,您可以考虑使用CSS预处理器语言,如LessSass.

CSS预处理器不仅允许您使用变量,而且几乎允许您使用编程语言执行任何操作.

例如,在Sass中,您可以创建如下函数:

@function exponent($base, $exponent) {
    $value: $base;
    @if $exponent > 1 {
        @for $i from 2 through $exponent {
            $value: $value * $base;
        }
    }
    @if $exponent < 1 {
        @for $i from 0 through -$exponent {
            $value: $value / $base;
        }
    }
    @return $value; 
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*nUK 5

你应该用逗号分隔每个id或类,例如:

h1,h2 {
  color: #fff;
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*orn 5

元素可以属于多个类,因此您可以执行以下操作:

.DefaultBackColor
{
    background-color: #123456;
}
.SomeOtherStyle
{
    //other stuff here
}
.DefaultForeColor
{
    color:#654321;
}
Run Code Online (Sandbox Code Playgroud)

然后在某个地方的内容部分:

<div class="DefaultBackColor SomeOtherStyle DefaultForeColor">Your content</div>
Run Code Online (Sandbox Code Playgroud)

这里的缺点是它在体内变得相当冗长,而且你不太可能只能将它列为仅列出一次颜色.但是你可能只能做两到三次,你可以将这些颜色组合在一起,也许是在他们自己的工作表中.现在,当你想要改变颜色方案时,它们都在一起,而且变化非常简单.

但是,是的,我对CSS最大的抱怨是无法定义自己的常量.

  • >"但是,是的,我对CSS的最大抱怨是无法定义自己的常量." 我也错过了没有基本的算术计算,也没有条件.我很乐意能说"宽度:100% - 10px" (2认同)
  • @VictorZamanian是的,C确实在编译时进行了那种解析,因此没有性能损失.CSS需要动态解析,所以我猜它可能是他们的故意.无论如何我也很满意calc(),但我想知道我们是否可以说:"width:calc(100% - border-right - border-left)"例如,从mozilla网站看来我们不会能够. (2认同)