Stu*_*art 25 css class list css-specificity
我今天遇到问题后,对CSS类的优先级有疑问.情况如下:
我有一个无序列表,其中有一个与之关联的类.该LI
标签具有定义得太一些风格.我想LI
在点击后更改s 的样式(通过添加的"selected"
类),但是从不应用添加的类的样式.这是正常的行为还是这个代码应该有效?
CSS:
.dynamicList
{
list-style: none;
}
.dynamicList li
{
display: block;
width: 400px;
height: 55px;
padding: 10px 10px 10px 10px;
border: 1px solid #000;
background-color: #ff0000;
}
.selectedItem
{
background-color: #0000ff;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<ul class="dynamicList">
<li>First Item</li>
<li class="selectedItem">Second (Selected) Item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
"selected"
列表项的背景颜色不会更改.如果我不将样式应用于LI
元素,但是创建另一个类并将其应用于所有列表项以使其读取,则也是如此.
<li class="listitem selectedItem">xxxx</li>
Run Code Online (Sandbox Code Playgroud)
Joh*_*ley 26
这听起来像CSS特异性问题.尝试将.selectedItem
规则集更改为:
.dynamicList li.selectedItem {
background-color: #0000ff;
}
Run Code Online (Sandbox Code Playgroud)
cle*_*tus 17
简短的回答是你的.selectedItem样式没有得到应用,因为之前的样式更具体,因此具有更高的优先级.这是一个不错的纲要:
现在,让我们列出CSS的内部优先级(3具有最高优先级):
Run Code Online (Sandbox Code Playgroud)element .class #id
这是默认的优先顺序.除此之外,特异性也会计算,f.ex ul li将覆盖li.W3C在如何计算内部重量方面做了一个不错的表格:
Run Code Online (Sandbox Code Playgroud)LI {...} /* a=0 b=0 c=1 -> specificity = 1 */ UL LI {...} /* a=0 b=0 c=2 -> specificity = 2 */ UL OL LI {...} /* a=0 b=0 c=3 -> specificity = 3 */ LI.red {...} /* a=0 b=1 c=1 -> specificity = 11 */ UL OL LI.red {...} /* a=0 b=1 c=3 -> specificity = 13 */ #list {...} /* a=1 b=0 c=0 -> specificity = 100 */
这是W3C规范.
将selectedItem
规则更改为:
.dynamicList li.selectedItem
{
background-color: #0000ff;
}
Run Code Online (Sandbox Code Playgroud)