CSS控制级联

Chr*_*ert 8 html css css3

我已经构建了一个供用户使用的编辑器,它有一个可供选择的样式托盘,在这个例子中我们称之为.p1".p2".我遇到的问题是它们相互重叠,取决于它们在样式表中的显示顺序.

我找不到解决这个问题的方法,因为我不知道这些面板是如何嵌套的.

这个例子被大大简化了,我无法准确控制像标签这样的东西,它们可以嵌套在表格,列表,段落或任何其他任何深度的标签中.这也适用于标题和任何其他需要定制样式(例如H1,ul ...)的子元素,以便在显示的上下文中看起来很好.

.p1 a {
  color: red;
}
.p2 a {
  color: green;
}
Run Code Online (Sandbox Code Playgroud)
<div class="pl p2">
  <a href="#">Hello 2</a>
  <div class="pl p1">
    <a href="#">Hello 2-1</a>
    <div class="pl p2">
      <a href="#">Hello 2-1-2</a>
    </div>
  </div>
</div>
<div class="pl p1">
  <a href="#">Hello 1</a>
  <div class="pl p2">
    <a href="#">Hello 1-2</a>
    <div class="pl p1">
      <a href="#">Hello 1-2-1</a>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我玩过:不是选择器,也使用全部:默认,对儿童,但没有运气.

val*_*als 2

您的示例有点令人困惑,因为它有两个类应用于同一元素。

如果我理解正确的话,您希望 a元素由DOM 中最近的祖先来设计样式。

如果是这种情况,解决方案是设置一组规则,其中具有两个类之一的祖先将始终匹配,因此具有最高特异性的规则将获胜......

抱歉,但我找不到更好的方法来解释它......

.p1 a, 
*[class^=p] .p1 a, 
*[class^=p] *[class^=p] .p1 a, 
*[class^=p] *[class^=p] *[class^=p] .p1 a 
{
	background-color: antiquewhite;
}

.p2 a, 
*[class^=p] .p2 a, 
*[class^=p] *[class^=p] .p2 a, 
*[class^=p] *[class^=p] *[class^=p] .p2 a 
{
	background-color: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<div class="p2">
  <a href="#">Hello 2</a>
  <div class="p1">
    <a href="#">Hello 2-1</a>
    <div class="p2">
      <a href="#">Hello 2-1-2</a>
    </div>
  </div>
</div>
<div class="p1">
  <a href="#">Hello 1</a>
  <div class="p2">
    <a href="#">Hello 1-2</a>
    <div class="p1">
      <a href="#">Hello 1-2-1</a>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)