CSS类优先级

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具有最高优先级):

element
.class
#id
Run Code Online (Sandbox Code Playgroud)

这是默认的优先顺序.除此之外,特异性也会计算,f.ex ul li将覆盖li.W3C在如何计算内部重量方面做了一个不错的表格:

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 */
Run Code Online (Sandbox Code Playgroud)

这是W3C规范.


Mat*_*ges 7

selectedItem规则更改为:

.dynamicList li.selectedItem
{
    background-color: #0000ff;
}
Run Code Online (Sandbox Code Playgroud)