CSS---选择器的组合、优先级 | 青训营笔记

187 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天
我们知道网页主要是由HTML(内容)、CSS(样式)、JavaScript(行为)这三大部分组成的。HTML的作用是在网页上展示有哪些信息内容;而CSS就是给HTML元素添加各种各样的样式,让网页显示更加好看;JavaScript则是给网页添加一些行为动画等效果,使网页不再是单一的静态网页,提高网页的浏览体验。今天就说说CSS如何给页面中众多的元素添加样式的。

选择器(Selector)

选择器种类

CSS是通过选择器找出页面中的元素,以便给元素设置样式。选择器分为:

  1. id选择器(#标签{})
  2. 类选择器(.标签{})
  3. 伪类(标签:类{})
  4. 属性选择器([属性]{})
  5. 标签选择器(标签{})
  6. 通配选择器(*{})

不同选择器选择元素的方式如下所示:

选择器组合 (Combinators)

有时候需要给多种元素添加CSS样式,单个的选择器无法满足我们的要求,这时候就可以通过选择器组合来选中多个元素,组合如下:

名称语法说明示例
直接组合AB满足A同时满足Binput:focus
后代组合A B选中B,如果它是A的子孙nav a
亲子组合A > B选中B,如果它是A的子元素,A的孩子section > p
兄弟选择器A ~ B选中B,如果它在A后且和A同级h2 ~ p
相邻选择器A + B选中B,如果它紧跟在A后面,A的第一个兄弟h2 + p
选择器组A , B同时选中A和Bh1, h2, h3

不同选择器组合的方式如下所示:

选择器的特异度(Specificity)

选择器按照特异度从高到底分为:
!important(∞) > 行内样式(1000) > id选择器(100) > 类(伪类、属性)选择器(10) > 标签选择器(1) > (*)通配符选择器(0)

特异度计算方式

  • 单个选择器时,选择器的特异度就是上面对应的值
  • 组合选择器时,选择器的特异度就多个选择器的相加,例如div .app的特异度就是10+1=11,注:这里的相加不会产生进位,例如:有11个标签选择器和一个类选择器的组合,他的特异度是10+11=1-11而不是21,特异度比较是从高位比到低位
    注意:
  • 兄弟选择器和相邻选择器不属于单个选择器,而是属于选择器的组合,例如 A ~ B 的特异度就是A的特异度加上B的特异度
  • 出现样式继承时,继承下来的特异度为0,如果该元素没有直接选中,不管父元素特异度多高,子元素得到的特异度都是0

样式作用原理

  1. 由于一个元素可能有多个样式,但最终渲染时只会有一个样式起作用,就是特异度最高的那一个起作用。
  2. 如果一个元素设置了多个特异度相同的样式,根据就近原则,会优先使用离元素最近的样式(一般是最后一个样式)