各种选择器
指定特定元素对其进行样式加工;
| 选择器 | 说明 | 版本 |
|---|---|---|
| 基础选择器 | ||
| tag | 类型选择器 | 1 |
| #id | id 选择器 | 1 |
| .class | 类选择器 | 1 |
| * | 通配选择器 | 2 |
| 层级选择器 | ||
| elemA elemB | 后代元素 | 1 |
| elemA>elemB | 子代元素 | 2 |
| elemA+elemB | 相邻同胞 | 2 |
| elemA~elemB | 元素后面的同胞元素 | 3 |
| 集合选择器 | ||
| elemA, elemB | 并集 | 1 |
| elemA.class/elemA#id | 交集 | 1 |
| 条件选择器 | ||
| :lang | 指定标记语言 | 2 |
| :dir() | 指定编写方向,文字书写方向为 ltr 或 rtl | 4 |
| :has | 包含指定元素,如: a:has(> img) (只会匹配直接包含 <img> 子元素的 <a> 元素) |
4 |
| :is | 指定条件,如::is(section, article, aside, nav) h1 |
4 |
| :not | 非指定条件,如:p:not(.fancy),类名不是 .fancy 的 元素 |
4 |
| :where | 指定条件,优先级总是为 0 | 4 |
| :scope | css 伪类,作为选择器要匹配的参考点的元素 | 4 |
| :any-link | 选择器代表一个有链接锚点的元素,匹配每一个有 href 属性的 、 或 元素 | 4 |
| :local-link | 所有包含href |
|
且属于绝对地址的链接元素 |
4 | |
| 结构选择器 | ||
| :first-child | 元素中为首的元素 |
2 |
| :last-child | 元素中为尾的元素 |
3 |
| :root | 文档根元素 | 3 |
| :empty | 无子元素的元素 | 3 |
| :nth-child(n) | 元素中指定顺序索引的元素 |
3 |
| :nth-last-child(n) | 元素中指定逆序索引的元素 |
3 |
| :only-child | 父元素仅有该元素的元素 |
3 |
| :nth-of-type(n) | 标签中指定顺序索引的标签 |
3 |
| :nth-last-of-type(n) | 标签中指定逆序索引的标签 |
3 |
| :first-of-type | 标签中为首的标签 |
3 |
| :last-of-type | 标签中为尾标签 |
3 |
| :only-of-type | 父元素仅有该标签的标签 |
3 |
| 状态选择器 | ||
| :active | 鼠标激活的元素 |
1 |
| :hover | 鼠标悬浮的元素 |
1 |
| :link | 未访问的链接元素 | 1 |
| :visited | 已访问的链接元素 | 1 |
| :target | 当前锚点的元素 |
3 |
| :focus | 输入聚焦的表单元素 |
3 |
| :required | 输入必填的表单元素 |
3 |
| :valid | 输入合法 | 3 |
| :invalid | 输入不合法 | 3 |
| :in-range | 输入范围内 | 3 |
| :out-of-range | 输入范围外 | 3 |
| :checked | 选项选中 | 3 |
| :optional | 选项可选 | 3 |
| :enabled | 事件启用 | 3 |
| :disabled | 事件禁用 | 3 |
| :read-only | 只读 | 3 |
| :read-write | 可读可写 | 3 |
| :target-within | 内部锚点元素处于激活状态的元素 |
4 |
| :focus-within | 内部表单元素处于聚焦状态的元素 |
4 |
| :focus-visible | 输入聚焦的表单元素 |
4 |
| :blank | 输入为空 | 4 |
| :user-invalid | 输入合法 | 4 |
| :indeterminate | 选项未定 | 4 |
| :placeholder-shown | 占位显示 | 4 |
| :current() | 浏览中 | 4 |
| :past() | 已浏览 | 4 |
| :future() | 未浏览 | 4 |
| :playing | 开始播放 | 4 |
| :paused | 暂定播放 | 4 |
| 属性选择器 | ||
| [attr] | 指定属性的元素 |
2 |
| [attr=val] | 属性等于指定值的元素 |
2 |
| [attr*=val] | 属性包含指定值的元素 |
2 |
| [attr^=val] | 属性以指定值开头的元素 |
2 |
| [attr$=val] | 属性以指定值结尾的元素 |
2 |
| [attr~=val] | 属性包含指定值(完整单词)的元素 |
|
| (不推荐) | 2 | |
| [att | r=val] | 属性以指定值(完整单词)开头的元素 |
| (不推荐) | 2 | |
| 伪元素 | ||
| ::first-letter | 元素的首字母,可实现首字母下沉等 | 1 |
| ::first-line | 元素的首行 |
1 |
| ::before | 在元素前插入的内容 |
2 |
| ::after | 在元素后插入的内容 |
2 |
| ::selection | 鼠标选中的元素 |
3 |
| ::backdrop | 全屏模式的元素 |
4 |
| ::placeholder | 表单元素的占位 |
4 |
有时候可以通过选择器在 css 层面就可以解决一下逻辑样式问题。
自定义属性—
带有前缀—的属性名,比如—example—name,表示的是带有值的自定义属性,其可以通过 var 函数在全文档范围内复用的。
#
用法:
:root {
--first-color: #488cff;
--second-color: #ffff8c;
}
#firstParagraph {
background-color: var(--first-color);
color: var(--second-color);
}
实践:
在需要多个同级子元素且不同样式时可以对其进行设置,可以减少冗余代码。
<ul class="strip-loading">
<li style="--line-index: 1;"></li>
<li style="--line-index: 2;"></li>
<li style="--line-index: 3;"></li>
<li style="--line-index: 4;"></li>
<li style="--line-index: 5;"></li>
<li style="--line-index: 6;"></li>
</ul>
li { --time: calc((var(--line-index) - 1) * 200ms); border-radius: 3px; width:
6px; height: 30px; background-color: #f66; animation: beat 1.5s ease-in-out
var(--time) infinite; & + li { margin-left: 5px; } }