在 CSS 中,特异性(Specificity)是一个决定页面中哪些样式规则应用到特定元素的规则集。当多个规则都适用于同一个元素时,特异性决定了哪个规则将被应用。理解特异性对于编写清晰、可预测的 CSS 代码至关重要。
那我们一起来看看吧。
特异性有 5 个层次,从高到低依次是:
也就是一个优先级公式:内联样式 > ID 选择器 > 类选择器、伪类、属性选择器 > 元素选择器、伪元素选择器 > 通用选择器(*)
假设我们有以下 CSS 规则:
- p {
- color: blue;
- }
-
- #main p {
- color: green;
- }
-
- p.highlight {
- color: red;
- }
-
效果如下:
也就是说,如果一个<p>元素同时拥有id="main"和class="highlight",那么它的文本颜色将会是绿色,因为 ID 选择器的特异性高于元元素和类选择器。
特异性是通过计算每个选择器的层次值来确定的。具体来说,特异性的计算规则如下:
如果有多个选择器,它们的特异性值会相加。
例子:以下 CSS 规则,如注释说明,所以文字显示的是,蓝色。
- /* 特异性:101 */
- #content p {
- color: green;
- }
-
- /* 特异性:11 */
- p.highlight {
- color: red;
- }
-
- <div class="content">
- <!-- 特异性 1000 -->
- <p class="highlight" style="color: blue">This is text.</p>
- </div>
-
特异性是 CSS 中一个复杂但功能强大的概念。掌握了特异性,你就可以更精确地控制页面的样式,避免许多常见的样式冲突问题。
那如果两个或更多具有相同特异性的样式规则应用于同一个元素时,是什么规则呢?遵循以下 2 点:
- /* 特异性:10001 = p标签是1 + important是10000 */
- p {
- background-color: #13dada;
- font-size: 20px;
- color: #fff !important;
- }
-
效果就会变成我们新写的样式了。
虽然!important在 CSS 中是一个强大的声明,它允许你强制浏览器忽略掉其他所有 CSS 规则,使得使用!important的样式规则具有最高优先级。然而,!important也被认为是一种万不得已的糟糕做法...
为什么不建议用 important?
因为它违背了 CSS 的层叠性(Cascading)和特异性原则,使得样式表难以维护和理解。以下是一些可能会考虑使用!important的情况:
尽管有上述情况,通常建议尽可能避免使用!important。如果发现自己需要频繁使用!important,这通常是一个信号,表明 CSS 代码需要重构。
更好的做法是使用更具体的选择器、利用 CSS 的层叠性原则,或者重新考虑 HTML 结构来自然地达到所需的样式效果。