关于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)