CSS 选择器规定了 CSS 规则可以应用在哪些元素上。
CSS 选择器分类
选择器从大的分类上可以划分为以下几种:基本选择器、分组选择器、组合器、伪选择器。
基本选择器
- 通用选择器:
*
,selector *
,用于匹配所有元素或者 selector 选择器下的所有元素 - 元素选择器:
elementname
, 按标签名匹配所有符合条件的元素 - 类选择器:
.classname
, 根据class
属性匹配所有符合条件的元素,class
可以有多个值,不同值之间用空格分隔 - ID 选择器:
#idname
, 根据 id 属性匹配所有符合条件的元素 - 属性选择器:
[attr]
,[attr=value]
,[attr~=value]
,[attr|=value]
,[attr^=value]
,[attr$=value]
,[attr*=value]
,例如:[type="text"]
用于选择所有拥有type="text"
属性的 input 元素
属性选择器规则释义:
^
字符串开始位置匹配
$
字符串结束位置匹配
*
字符串任意位置匹配
i
字符串匹配不区分大小写
g
字符串全局匹配
[attr~=value]
attr 的值需要包含单词 value,注意是单词,而不是字符串里有这个字符
[attr|=value]
开头必须是 value 的单词
分组选择器
指用 ,
分隔形成的选择器列表,只要满足列表中任一条件即可被匹配到,例如:
.title,
.meta-item,
.author-name {
color: #333;
}
组合器
指将多个选择器组合在一起使用,从而缩小匹配的范围。
- 后代选择器: 例如
.main .article
- 直接子代选择器: 例如
ul > li
- 一般兄弟选择器: 例如
.prev ~ .next
, 匹配同一个父级下,.prev
后的所有.next
元素 - 紧邻兄弟选择器: 例如
h2 + p
, 匹配所有紧邻在h2
后的p
元素 - 列组合器: 用于表格,例如
col || td
会匹配所有col
作用域内的td
元素
伪选择器
分为伪类选择器和伪元素选择器。
- 伪类选择器:根据元素的状态信息选择元素,例如
a:hover
用于匹配a
元素的鼠标滑过状态 - 伪元素选择器:用于表示 HTML 语义无法表达的元素,例如:
p:first-letter
用于匹配所有p
元素的首个字符
CSS 选择器权重
一般来说,选择器越特殊优先级就越高,指向就越精确,通常会这样划分:
1
表示元素选择器的优先级10
表示类选择器的优先级100
表示 ID 选择器的优先级
那么计算优先级时就可以按照如下方法计算:
.main h2 优先级:10 + 1 = 11
.main article .title 优先级:10 + 1 + 10 = 21
#hot-news .title 优先级:100 + 10 = 110
CSS 选择器使用注意事项
- 避免选择器名称过于通用,匹配过多的元素
- 避免嵌套过深
- 采取防冲突措施,例如使用 BEM 方式命名、使用 CSS modules
- ID 选择器前不要再加其它选择器限制,因为它本身已经唯一了
- 尽量避免使用
!important