关于CSS让人迷惑的一些特性
这有一个无序的list
:
<ul id="summer-drinks">
<li>Whiskey and Ginger Ale</li>
<li>Wheat Beer</li>
<li>Mint Julip</li>
</ul>
现在你想从列出的这些饮料中,选择一个自己喜欢的饮料:
<ul id="summer-drinks">
<li class="favorite">Whiskey and Ginger Ale</li>
<li>Wheat Beer</li>
<li>Mint Julip</li>
</ul>
于是你打开自己最喜欢的编辑器,键入下面这些CSS
代码,然而,它并没有工作!
.favorite {
color: red;
font-weight: bold;
}
你经过一番探索之后,发现这个文件中还隐藏着这样一段代码:
ul#summer-drinks li {
font-weight: normal;
font-size: 12px;
color: black;
}
选择哪一条语句来运用这个CSS
上是需要遵循规则的。事实上,当specificity
值相同的时候,最下边的那条规则会取胜:
.favorite {
color: red;
}
.favorite {
color: black;
}
你可以通过尽可能详细的设置CSS
或者使用!important
来控制CSS
,像这样:
html body div#pagewrap ul#summer-drinks li.favorite {
color: red;
font-weight: bold;
}
或者这样:
.favorite {
color: red !important;
font-weight: bold !important;
}
但我想说的是,这样会让你的CSS
代码特别容易难以阅读,而且也不会带来什么真正的好处。!important
也很容易就会被误用。
计算CSS Specificity的值
CSS
为ID
和class
应用了不同的权重:
换句话说:
- 如果元素有
inline
样式,毫无疑问获胜(1,0,0,0分) - 对于
ID
元素,得(0,1,0,0分) - 对于
class
元素(伪元素或者属性选择器),得(0,0,1,0分) - 对于
element
引用,得(0,0,0,1分)
小测试
注意事项
- 全局通用选择器
*
没有得分:(0,0,0,0) - 伪元素(pseudo-elements)如
:first-line
得分(0,0,0,1),不像伪类(pseudo-class)得分(0,0,1,0) - 伪类(
pseudo-class:not()
)并不会添加任何specifity
,只看括号里边的就行 !important
比inline
样式还要高,你可以认为它得分(1,0,0,0,0)