翻 MDN 文档重新系统地学习下 CSS 选择器知识,记录下来当作笔记。
所谓 CSS selector 用于在 HTML 文档中选取指定的元素节点,可用于 CSS 文件中设置 style 或者在某些库中选取元素节点(如爬虫)。
CSS Rules 中使用
在 CSS 文件中 selector 通常为 Rules 的开头,每个 Rules 可以指定单个 selector 或者指定 selectors list,后者以逗号分割 (,)
CSS 选择器类型
- Type selectors: 类型选择器,根据
tagname
来选择对应的元素 - Universal selectors: 通用选择器,使用
*
来匹配所有元素- 可以增强伪类选择器的可读性:
div *:first-child
instead ofdiv :first-child
- 可以增强伪类选择器的可读性:
- Class selectors: 类选择器,使用
.classname
来选择相应的元素- 可以结合其它选择器如
span.highlight
- 可以同时选取包含多个 class 的元素
.class1.class2
- 可以结合其它选择器如
- ID selectors: ID 选择器,使用
#id
来选取相应元素 - Attribute selectors: 属性选择器,根据元素的属性来选择元素
[attr]
: 元素包括 attr 属性[attr='val']
: 元素的 attr 属性值为 val[attr~='val']
: 元素的 attr 属性为 val 或该属性的列表中包含 val(如attr='val val1'
[attr|='val']
: 元素的 attr 属性为 val 或该属性以 val- 开头(如attr='val-val1'
[attr^='val']
: 属性以 val 开头[attr$='val']
: 属性以 val 结尾[attr*='val']
: 属性包含 val- 取否定需要伪类选择器
:not([attr])
- 末尾添加
i
可以是匹配大小写不敏感
- pseudo-class: 伪类选择器,用
:pseudo-class-name
可选择在特定状态的元素- 选择指定顺序:
first-child
,last-child
,first-of-type
,nth-child(n or an+b)
- 选择特定状态:
checked
,disabled
,visited
- for action:
hover
,focus
- 选择指定顺序:
- pseudo-element: 伪元素选择器,使用
::pseudo-element
选取- 与伪类的区别伪元素会为选中的元素添加 HTML 片段,而伪类只会在原元素中修改
- 选取特定位置:
first-line
- 生成特定内容:
before
,after
然后通过 content 属性设置
CSS Combinators
- Descendant:
后者元素的某个祖先是前者元素
- Child:
>
后者是前者的直接子节点 - Adjacent sibling:
+
后者紧接着前者,且是同一个父元素节点 - General sibling:
~
后者出现在前者的后面,且是同一个父元素节点
CSS Selector 的优先级
如果有多个 CSS Rule 同样选择到了某个元素节点且声明的 CSS 样式出现冲突时,会根据首先根据优先级进行处理,当优先级相同时,选择后声明的规则。
优先级可以用一个四位数表示,每出现一个选择器在相应位上加一
- inline style: 行内的 css style 的优先级时最高的,直接在千位加一
- 百位: ID Selector
- 十位: Class selector, attribute selector, preudo-class selector
- 个位: type selector, preudo-element selector