html - CSS 规则特异性

标签 html css rules css-specificity

如何计算 CSS 中的规则特异性?我知道基本的东西(样式 1000,id 100,att/class 10,等等)但是,我仍然被简单的东西卡住了太多次,例如:

这要多少钱?

<div class="wrapper">
    <div class="inner"></div>
</div>
.wrapper > div /* ??? */
.inner /* 10 */

很明显,第一条规则适用。但是它多少钱?

最佳答案

基本上是这样的:

  • !important 样式总是覆盖所有其他样式,但在 !important 样式中,特殊性规则确实适用
  • 内联样式获得 1000 个“特异性”点
  • ID获得100分
  • (伪)类和属性选择器得 10 分
  • 标签选择器得 1 分
  • 如果存在具有相同特异性的选择器,则页面上最后定义的规则将覆盖其他规则。
  • 通用选择器 * 和继承的样式没有特异性点。

此外,this site可能对你有用。它进一步解释了这一点。

testing these rules for myself 之后,我注意到这并不完全正确。应用特异性的顺序仍然适用,但通过这个测试,它实际上并不像我知道的大多数网站声称的那样与这个积分系统一起工作。似乎更准确的是将样式放在“盒子”中。它仍然会使用我上面列出的“框”的顺序,而是计算每个“框”,如果该组中有相同数量的选择器,请检查下一个。然后它会像这样工作:

  • !important 样式位于框 1 中。这些样式覆盖所有其他样式。如果有多个相同样式的声明都具有 !important 规则,则将查看下一个最高框中的样式。
  • 内联样式在框 2 中。内联样式将覆盖所有其他样式。如果有多个内联样式声明,最后定义的一个将适用。
  • ID 选择器在方框 3 中。如果有多个相同样式的声明,且 ID 选择器的数量相同,将查看下一个最高的方框。
  • (伪)类和属性选择器在方框 4 中。我想您已经了解了当多个相同样式具有相同数量的选择器时会发生什么......
  • 标签选择器在方框 5 中。...
  • 通用选择器在方框 6 中。但是这个方框的行为有点不同,因为添加更多的通用选择器并不会增加特异性,正如我们可以看到的 here ,因此在此框中仅适用定义顺序。不过,使用通用选择器应用的样式确实会覆盖继承的样式。
  • 如果没有直接为元素分配样式,则可能会应用继承的样式,具体取决于它是什么样式。

所以基本上,如果我们的样式表顶部有一个带有 1 个 id 选择器的样式,而在该样式下方有一个超过 10 个类选择器的样式,则带有 id 选择器的样式仍然适用。带有 id 选择器的样式在方框 3 中“赢得了战斗”,因此其他方框将被忽略。 specificity calculator Fabrício Matté 与插图的关联非常好。

PS:使用 +>~ 或任何其他运算符根本不会影响特异性。这些样式具有完全相同的特异性(因此后者将适用):

div > span {color:red;}
div span {color:blue;}

关于html - CSS 规则特异性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145739/

相关文章:

javascript - 案例研究图像与导航栏重叠,有没有办法解决这个问题?

c++ - 标准函数的函数指针和成员函数指针的规则是什么?

PostgreSQL SELECT-RULES ,继承,行级权限

java - 在 Drools 6 中以编程方式创建新的 drools 规则的新接受方式是什么?

javascript - 多个元素的请求全屏

javascript - 使用 webkit 转换 scaleY 后无法检索 html5 视频元素的正确高度

jquery - 比较两个 img src

javascript - 在 Summernote 中获取选定的内容

javascript - Jquery .text() 调用返回 null?

xml - HTML5 的 MIME 类型采用严格的 XML 语法(XHTML5??,用于 Mobile Safari)?