我对 css 变量进行了修改,找到了一个有趣的应用程序:您可以定义一个--color
变量,并将其用作基于类的不同属性的值:按钮的背景可以用 填充--color
,而选项卡控件可以使用使用border-bottom--color
突出显示当前选项卡,如下所示:
:root {
font: 14px sans-serif;
--red: #f44;
--blue: #78f;
--green: #3c1;
--color: var(--blue);
}
.blue {
--color: var(--blue);
}
.red {
--color: var(--red);
}
.green {
--color: var(--green);
}
.fillbutton {
background: var(--color);
color: #fff;
padding: 0.25em 1em;
}
.borderbutton {
background: #fff;
border: 1px solid var(--color);
color: var(--color);
padding: 0.25em 1em;
}
.tab {
border-bottom: 1px solid #ccc;
padding: 0 1em;
line-height: 150%;
}
.tab.current {
border-bottom: 2px solid var(--color);
color: var(--color);
font-weight: bold;
}
<p>
<span class="fillbutton">Default</span>
<span class="fillbutton green">Green</span>
<span class="fillbutton red">Red</span>
<span class="borderbutton">Default</span>
<span class="borderbutton green">Green</span>
<span class="borderbutton red">Red</span>
</p>
<p><span class="tab">Tab1</span><span class="tab current">Tab2</span><span class="tab">Tab3</span></p>
<p><span class="tab red">Tab1</span><span class="tab red current">Tab2</span><span class="tab red">Tab3</span></p>
通过定义类来改变 --color 我们可以轻松地创建不同的配色方案,而不必特定于我们想要样式的项目:只需要一个类.red
,而不是单独的.red.fillbutton
//.red.borderbutton
.red.tab.current
由于某些浏览器不支持css变量,我想我会尝试使用像scss这样的处理器来复制这个功能,但是scss变量似乎只是全局的,因此不能模仿这个用例。有没有办法让我使用 scss 以类似的 DRY 方式实现上述行为?