【发布时间】:2021-11-29 05:55:06
【问题描述】:
假设按照设计,所有元素都应该看起来像给定颜色的瓷砖并带有一些阴影;像这样的东西:
.panel {
background-color: #bbffff;
padding: 1em;
box-shadow: 0.5em 0.5em 0.5em 0em rgba(0,0,0,50%);
}
<div class="panel">
Some text
</div>
此时,考虑编写模块化 CSS,我已经很想选择 box-shadow 声明并将其放入自己的规则集中,
.down-right-box-shadow {
box-shadow: 0.5em 0.5em 0.5em 0em rgba(0,0,0,50%);
}
这样我就可以通过将 class="down-right-box-shadow" 添加到 HTML 标记来重用它,而无需同时引入 background-color 和 padding 声明。
现在假设,出于某种原因,CSS 使用伪元素来创建靠近这些图块的一些效果,如下所示:
.panel {
background-color: #bbffff;
padding: 1em;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 0.4em;
}
.down-right-box-shadow {
box-shadow: 0.5em 0.5em 0.5em 0em rgba(0,0,0,50%);
}
.panel::after {
content: "";
width: 1em;
height: 1em;
border-radius: 100%;
margin-top: 0.2em;
background-color: blue;
box-shadow: 0.5em 0.5em 0.5em 0em rgba(0,0,0,50%);
}
<div class="panel down-right-box-shadow">
Some text
</div>
显然,其意图是 ::after 伪元素与页面上的其他所有元素具有相同的阴影,但由于它是伪元素,我无法从其中删除 box-shadow 声明以支持在 HTML 中添加 class="down-right-box-shadow",因为 HTML 中没有相应的元素。
所以我必须至少在这两个地方为.down-right-box-shadow 重写相同的声明。
如果明天 .down-right-box-shadow 规则集中的某些内容发生变化,我必须记住将相同的更改应用到 .panel::after 规则集中。
这个代码复制有什么干净的方法吗?
【问题讨论】:
-
CSS 变量 ....
-
@TemaniAfif,我知道如何为颜色和长度写一个变量,但这仍然意味着我必须在两个地方写
box-shadow: var(--zero-dot-5) var(--zero-dot-5) var(--zero-dot-5) var(--zero) var(--black-50);,不是吗? -
您为整个影子声明创建一个变量,然后在需要时使用它,那么您所要做的就是更新该变量一次
-
@TemaniAfif,你是说我可以先写
variable: "box-shadow: bla bla bla;";然后写var(--variable);而不是box-shadow: bla bla bla;?
标签: html css css-selectors pseudo-element reusability