Emi*_*ily 5 html css css-selectors
我想针对某个特定段落的所有 后代段落,class同时忽略第一个中另一个段落的所有 后代段落class(无论哪个类在哪个类中,这都应该有效)。为此,我必须使用 4 个选择器,如下所示:
* {
margin: 0.2em 0;
width: fit-content;
}
div {
margin-left: 1em
}
/* == 4 selectors to achieve desired effect = */
.orange p {
background: orange;
}
.cyan .orange p {
background: orange;
}
.cyan p {
background: cyan;
}
.orange .cyan p {
background: cyan;
}Run Code Online (Sandbox Code Playgroud)
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
<div>
<p>Orange</p>
<div class="cyan">
<p>Cyan</p>
<div>
<p>Cyan</p>
</div>
</div>
</div>
</div>
</div>
<div class="cyan">
<p>Cyan</p>
<div>
<p>Cyan</p>
<div>
<p>Cyan</p>
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
问题是:这可以仅使用两个选择器来实现吗?[这两个选择器的顺序应该能够在不改变效果的情况下改变。]
我试过选择器,如:
.orange:not(.cyan) p {
background: orange;
}
.cyan:not(.orange) p {
background: cyan;
}
Run Code Online (Sandbox Code Playgroud)
但它并没有很好地针对最后一个,因为它继承了第一个的风格。我正在寻找两个匹配这些情况的选择器,而在样式表中没有任何特定的顺序。
这是一个使用 CSS 变量的简单解决方案。检查以下问题以获取更多详细信息:CSS 作用域自定义属性在用于计算外部作用域中的变量时被忽略
* {
margin: 0.2em 0;
width: fit-content;
}
div {
margin-left: 1em
}
p {
background: var(--c);
}
.cyan {
--c:cyan;
}
.orange {
--c:orange;
}Run Code Online (Sandbox Code Playgroud)
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
<div>
<p>Orange</p>
<div class="cyan">
<p>Cyan</p>
<div>
<p>Cyan</p>
</div>
</div>
</div>
</div>
</div>
<div class="cyan">
<p>Cyan</p>
<div>
<p>Cyan</p>
<div>
<p>Cyan</p>
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
您可以将其缩放为任意数量的着色,因为每种颜色只需要一个选择器,并且顺序无关紧要:
* {
margin: 0.2em 0;
width: fit-content;
}
div {
margin-left: 1em
}
p {
background: var(--c);
}
.cyan {
--c:cyan;
}
.orange {
--c:orange;
}
.blue {
--c:lightblue;
}Run Code Online (Sandbox Code Playgroud)
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
<div>
<p>Orange</p>
<div class="cyan">
<p>Cyan</p>
<div class="blue">
<p>Blue</p>
</div>
</div>
</div>
</div>
</div>
<div class="cyan">
<p>Cyan</p>
<div class="blue">
<p>Blue</p>
<div>
<p>Blue</p>
<div class="orange">
<p>Orange</p>
<div>
<p>Orange</p>
</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |