# 选择器
# 元素选择器
即 HTML 标签名称,p div
# ID 选择器
#id
# 类选择器
.class
# 伪类选择器
伪类的格式是:冒号 : 后跟一个词。
# 结构伪类
:root伪类用于选取文档的根元素,在 HTML 中根元素始终是html.:empty伪类用于选取没有任何内容(元素、文本节点)的元素。元素内只包含空格、换行,不是空元素,因为空白属于文本节点;元素内只包含注释,是空元素。:empty是唯一一个在匹配时考虑文本节点的选择器。demo loading:first-child伪类选择的是第一个子元素。:last-child伪类选择的是最后一个子元素。demo loading:only-child伪类选择的元素是其父元素的唯一子元素。功能上等价于:first-child:last-child.demo loading:nth-child(n)伪类用于选择第 n 个子元素。其中
n的位置取值为An + B 表达式 (opens new window), 典型可取值有:- 整数
:nth-child(2)表示第二个子元素 - 包含 n 的表达式
nth-child(2n)表示第 2、4、6... 个子元素 - 关键字
even偶数:nth-child(even)等效于nth-child(2n)odd奇数:nth-child(odd)等效于nth-child(2n+1)
- 整数
:nth-last-child(n)伪类用于选择倒数第 n 个子元素:first-of-type伪类选择的元素是父元素的第一个该类型(html 标签)的元素。:last-of-type伪类选择的元素是父元素的最后一个该类型的元素。:only-of-type伪类选择的是在兄弟元素中间的唯一的那种(html 标签)元素demo loading:nth-of-type(n)第 n 个该类型元素:nth-last-of-type(n)倒数第 n 个该类型元素
# 动态伪类
# 超链接伪类
# 用户操作伪类
:hover:active:focus:focus-visible:focus-within
# UI 状态伪类
:enabled启用的 UI 元素(可以接受输入):disabled禁用的 UI 元素(不接受用户输入)demo loading:checked选中状态的单选按钮或复选框:indeterminate既不是选中状态也不是未选中状态的单选按钮或复选框。只能通过 js 指定。如:全选复选框选择后,取消了子项的复选状态,此时全选复选框的状态。:default默认选中的单选按钮、复选框或选项demo loading:valid:invalid:in-range:out-of-range:required:optional:read-write:read-only
# 组合符(Combinator)
combinator 在 MDN 上被翻译为“关系选择器” (opens new window),个人感觉不太恰当。
从作用上看是用于组合多个选择器,达到描述文档结构关系的作用。从标准来看,从 19990803 (opens new window) 到 level 4 (opens new window) 使用的词都是 combinator, 跟选择器的意思挨不上边。所以在笔记中会称其为“组合符”,感觉更接近原意。
# 后代组合符()
空格用于表示后代元素,包括直接子元素和更低层级的后代元素。
# 子元素组合符(>)
# 紧邻兄弟元素组合符(+)
# 后续兄弟元素组合符(~)
# 属性选择器
# 存在某属性
[attr] 表示存在某属性
# 精准匹配属性值
[attr="value"] 表示具体属性为特定值时精准选择
# 根据部分属性值选择
此时该属性必须存在
[foo|="bar"] 匹配 bar 或 以 bar- 开头 的值,常用于 lang 属性。
[foo~="bar"] 匹配包含 bar 的一组词。类选择器 .bar 等价于 [class~="bar"].
[foo*="bar"] 匹配包含子串 bar的值
[foo^="bar"] 匹配以 bar 开头的值
[foo$="bar"] 匹配以 bar 结尾的值
通过 i 标识符可以使匹配值不区分大小写