CSS Selector
Pseudo
- 用户操作 - :hover, :active, :focus, :focus-visible, :focus-within
- 位置 - :any-link, :link, :visited, :local-link, :target, :target-within, :scope
- 语言 - :dir, :lang
- 时间维度 - :current, :past, :future
- 用于 WebVTT - 字幕
- 资源状态 - :playing, :paused
- 用于媒体资源
- 输入组件 - :blank, :placeholder, :default, :valid, :invalid, :required, :optional, :read-write, :read-only
- 树结构 - :root, :empty,
:nth[-last]-child,:(first|last|only)-child,:nth[-last]-of-type,:(first|last|only)-of-type - 选择 - :is, :matches, :any, :has
- ShadowDOM - :host, :host-context
- 内容 - :contains, :empty
| defined | pseudo | desc |
|---|---|---|
| CSS 1 | ||
| :link | 未访问链接 | |
| :visited | 已访问链接 | |
| :active | ||
| CSS 2 | ||
| :lang | ||
| :first-child | ||
| :hover | ||
| :focus | ||
| Selectors 3 | ||
| :target | 当前 url 匹配目标 #ele-id | |
| :root | 一般指 html, 自定义元素时指当前元素 | |
| :nth-child() | ||
| :nth-last-of-child() | ||
| :nth-of-type() | ||
| :nth-last-of-type() | ||
| :last-child | ||
| :first-of-type | ||
| :last-of-type | ||
| :only-child | ||
| :only-of-type | ||
| :empty | 选择空白节点 | |
| :not() | ||
| :enabled | ||
| :disabled | ||
| :checked | ||
| :indeterminate | ||
| CSS 3 UI | ||
| :default | ||
| :valid | ||
| :invalid | ||
| :in-range | ||
| :out-of-range | ||
| :required | ||
| :optional | ||
| :read-only | ||
| :read-write | ||
| Selectors 4 | ||
| :any-link | :link or :visited ,有 href 元素 | |
| :blank | ||
| :local-link | 如果链接匹配当前页面 | |
| :scope | 目前无法定义 scope, 等同 :root; DOM 有 scope | |
| :drop | ||
| :current | ||
| :past | ||
| :future | ||
| :placeholder-shown | ||
| :user-invalid | ||
| :nth-col() | ||
| :nth-last-col() | ||
| :is() | 使用最高优先级 | |
| :where() | 与 :is 相同,但无优先级,适用于写样式库 | |
| :focus-visible | 浏览器根据操作方式决定是否显示 focus | |
| :focus-within | ||
| 增强 :not() | 参数与 :is 相同 | |
| :has | 暂未实现 - 类似 parent 选择 | |
| :target-within | 不支持 | |
| Fullscreen API | :fullscreen | 全屏时 |
| CSS 4 UI | ||
| :autofill |
/* 不在 nav 下的 a */
a:not(nav *) {
}
- :target - 使用 id 或 name 属性
https://wener.me#reference
- :is - 早期叫 :matches
- 类似于缩写展开
:is(h1,h2) p->h1 p, h2 p - 不能选择伪元素
- 类似于缩写展开
- :where = :is - 但不增加选择符权重
- :has - Chrome 105
- :scope = :root
- 限定选择范围 -
querySelector(),querySelectorAll(),matches(),Element.closest() - 目前还无法创建 scope
- 限定选择范围 -
- container query
<!-- 插入一个专门用于定位的 anchor -->
<!-- 目前 name 属性已废弃 -->
<a name="my-anchor"></a>
<a id="my-anchor"></a>
FAQ
选择多个子元素
/* 更现代的做法 */
.article :is(h1, h2, h3) {
}
/* 以前的做法 */
.article h1,
.article h2,
.article h3 {
}
选择内容匹配
// jQuery
$('td:contains("Yes")')
// js console
$x("//td[text()='Yes']")
// js
document.evaluate("//td[text()='Yes']",document).iterateNext()