CSS的选择权重问题

在我们开发前端页面时,往往css会错综复杂,一个元素可能出现多个样式,这个时候如果我们搞不清楚谁生效,就会很麻烦,还要写个demo测试一下。学习这部分内容已经很久了,18年听过姬成老师的课,讲的非常好,今天特来重温一下。

1、什么是选择器的权重

选择器的权重决定了浏览器在渲染页面时所选择渲染的样式,举个例子:

<div class='box'></div>
div{
    width:100px;
    height:100px;
    background-color:red;
}
.box{
    background-color:black;
}

这种情况下,渲染出来的盒子是红色背景还是黑色背景呢?此时浏览器就要根据权重做出抉择,到底让谁生效。上述例子是黑色背景生效,因为class选择器比标签选择器的权重更高,所以权重低的样式就会自动失效。

2、基础权重

选择器 权重
!important infinity
行内式 1000
id 0100
class | 属性 | 伪类 0010
标签 | 伪元素 0001
通配符 0000

这里的权重不是十进制、而是256进制,所以在后面加权的时候不要用十进制的思想加权。

3、多选择器组合加权问题

在实际的使用场景中,选择器往往会被组合使用,以达到精准选择元素并控制元素样式的目的。

常见的选择器:

div span{
    // 后代选择器 也叫派生选择器
}
div > span{
    // 直接子元素选择器
}
div ~ span{
    // div后的span选择器  兄弟选择器
}
div + span{
    // div后紧挨着span选择器  兄弟选择器
}
div span[attrName=attrValue]{
    // 属性选择
}
div>div[attrName=attrValue] span~stromg{
    // 复合选择器
}

当然,这只是选择器的冰山一角,只是使用频率较高,所有的选择器都可以进行组合,组合在一起的选择器,浏览器应该如何抉择谁的样式生效,谁的样式不生效呢,这就涉及到了复合选择器的加权,谁的加权最高,谁就生效。

4、选择器的加权规则

简单的来讲,只要是组合在一起的选择器,就将每一个选择的权重相加即可,这里要注意的是这些权重不是十进制,而是256进制。举个例子:

<div class='box'>
    <p>Hello World!</p>
</div>
div p{
    color:red;
}
.box p{
    color:black;
}

毫无疑问,p的字体颜色绝对是黑色,因为class选择器的权重比标签选择器要高,最后加权肯定是黑色的权重更高。其他更复杂的复合选择器也同理可得,只需要将每个权重相加即可,再比较即可得出谁生效。 

上一篇:Wireshark教程之一:认识Wireshark界面


下一篇:何为SSH协议?