CSS类的优先级如何受它是什么类的影响;“更密切地”;在…内

CSS类的优先级如何受它是什么类的影响;“更密切地”;在…内,css,css-selectors,Css,Css Selectors,直到几分钟前,我还确信选择器“距离”会影响应用哪种css样式。以下是我所说的距离: .class-2 .target { background-color: green; } .class-1 .target { background-color: red; } <div class="class-1"> <div class="class-2"> <p class="target">Hello World!<

直到几分钟前,我还确信选择器“距离”会影响应用哪种css样式。以下是我所说的距离:

.class-2 .target {
    background-color: green;
}

.class-1 .target {
    background-color: red;
}

<div class="class-1">
    <div class="class-2">
        <p class="target">Hello World!</p>
    </div>
</div>
.class-2.目标{
背景颜色:绿色;
}
.一级目标{
背景色:红色;
}

你好,世界

在这个例子中,我想我期望
.target
元素有一个绿色的背景色——因为它看起来像
.class-2。target
样式更具体——至少,target在class-2中比class-1更接近。但事实并非如此。显然,影响优先级的唯一因素是它们的声明顺序

这对我来说真的很奇怪;我猜我假设CSS规则是从外到内应用的,或者至少这是一个因素

当我需要应用一个类样式时,我该怎么做?基于它在哪个类中更接近。有没有办法做到这一点

例如,在这个JSFIDLE中,如何使背景颜色适当地呈现红色和绿色


在我的特定情况下,我需要它,因为我使用的是通常为12列的网格,并且我需要(在某些情况下)在其中设置16列的网格上下文。

在这种特定情况下,您可以使用子选择器:

这仅适用于父/子元素。否则,如果需要,您必须引入更多的父/子关系,或者重新考虑如何使用选择器

选择器具有特异性和级联顺序。上述选择器具有相同的特异性,因为它们都由两类组成。这又回到了级联顺序。它们也存在于相同的样式表中,因此应用了最终的优先级规则:CSS文档中的顺序

如果希望
.class-2
的优先级高于
.class-1
,则必须在样式表中将选择器移到其后面:

.class-1 .target {
    background-color: green;
}

.class-2 .target {
    background-color: red;
}
然而,这与HTML本身无关。在HTML文档中,没有选择父对象和子对象之间的接近程度。你可以这样做:

.class-2 > * > .target

但此选择器仅在
.target
是孙子时有效。

在这种特定情况下,您可以使用子选择器:

这仅适用于父/子元素。否则,如果需要,您必须引入更多的父/子关系,或者重新考虑如何使用选择器

选择器具有特异性和级联顺序。上述选择器具有相同的特异性,因为它们都由两类组成。这又回到了级联顺序。它们也存在于相同的样式表中,因此应用了最终的优先级规则:CSS文档中的顺序

如果希望
.class-2
的优先级高于
.class-1
,则必须在样式表中将选择器移到其后面:

.class-1 .target {
    background-color: green;
}

.class-2 .target {
    background-color: red;
}
然而,这与HTML本身无关。在HTML文档中,没有选择父对象和子对象之间的接近程度。你可以这样做:

.class-2 > * > .target

但此选择器仅在
.target
是孙子时有效。

在这种特定情况下,您可以使用子选择器:

这仅适用于父/子元素。否则,如果需要,您必须引入更多的父/子关系,或者重新考虑如何使用选择器

选择器具有特异性和级联顺序。上述选择器具有相同的特异性,因为它们都由两类组成。这又回到了级联顺序。它们也存在于相同的样式表中,因此应用了最终的优先级规则:CSS文档中的顺序

如果希望
.class-2
的优先级高于
.class-1
,则必须在样式表中将选择器移到其后面:

.class-1 .target {
    background-color: green;
}

.class-2 .target {
    background-color: red;
}
然而,这与HTML本身无关。在HTML文档中,没有选择父对象和子对象之间的接近程度。你可以这样做:

.class-2 > * > .target

但此选择器仅在
.target
是孙子时有效。

在这种特定情况下,您可以使用子选择器:

这仅适用于父/子元素。否则,如果需要,您必须引入更多的父/子关系,或者重新考虑如何使用选择器

选择器具有特异性和级联顺序。上述选择器具有相同的特异性,因为它们都由两类组成。这又回到了级联顺序。它们也存在于相同的样式表中,因此应用了最终的优先级规则:CSS文档中的顺序

如果希望
.class-2
的优先级高于
.class-1
,则必须在样式表中将选择器移到其后面:

.class-1 .target {
    background-color: green;
}

.class-2 .target {
    background-color: red;
}
然而,这与HTML本身无关。在HTML文档中,没有选择父对象和子对象之间的接近程度。你可以这样做:

.class-2 > * > .target

但此选择器仅在
.target
是孙子时有效。

CSS中没有距离优先级,优先级的唯一规则是:

  • ID的数量
  • 类的数量,伪类
  • 元素的数量,伪元素
  • *选择器
定义见

要实现所需,您需要在css中添加一些类:

<div class="foo class-1">
  <div class="foo class-2">
    <p class="target">Hello World!</p>
  </div>
</div>

.class-1 .target, .foo .class-1 .target, .foo .foo .class-1 .target {
  background-color: red;
}
.class-2 .target, .foo .class-2 .target, .foo .foo .class-2 .target {
  background-color: green;
}

你好,世界

.class-1.target、.foo.class-1.target、.foo.foo.class-1.target{ 背景色:红色; } .class-2.target、.foo.class-2.target、.foo.foo.class-2.target{ 背景颜色:绿色; }

举例来说。但是,如果你有很多嵌套,它可能会变成一个噩梦,你应该考虑另一种方式。

< P>在CSS中没有距离优先权,优先级的唯一规则是:

  • ID的数量
  • 班级人数