目录
- 常见的 CSS 伪类
-
- 3. 表单相关
-
- 伪类 vs 伪元素
- 总结
CSS 伪类(Pseudo-class)是一种用于选择特定状态下的元素的选择器,它不会修改 HTML 结构,而是根据元素的状态来应用不同的样式。
伪类以 :
开头,例如 :hover
、:nth-child()
等。
常见的 CSS 伪类
1. 用户交互相关
伪类 | 作用 |
---|
:hover | 当鼠标悬停在元素上时应用样式 |
:active | 当元素被点击(激活)时应用样式 |
:focus | 当元素获取焦点(如输入框被点击)时应用样式 |
:focus-visible | 仅当元素通过键盘或某些输入方式获得焦点时生效 |
button:hover {background-color: lightblue;
}input:focus {border: 2px solid blue;
}
2. 结构相关
伪类 | 作用 |
---|
:first-child | 选择属于其父元素的第一个子元素 |
:last-child | 选择属于其父元素的最后一个子元素 |
:nth-child(n) | 选择父元素的第 n 个子元素(从 1 开始计数) |
:nth-of-type(n) | 选择特定类型的第 n 个元素 |
:only-child | 选择唯一的子元素 |
:empty | 选择没有子元素的元素(包括文本节点) |
p:first-child {color: red;
}li:nth-child(odd) {background-color: lightgray;
}p:only-child {font-weight: bold;
}
这里 :empty
最经典的一个用法就是对于 antd table 支持 cell 为空时添加 -
兜底展示:
.ant-table-cell:empty:after,
.ant-table-cell span:empty:after {content: "-";
}
3. 表单相关
伪类 | 作用 |
---|
:checked | 选中复选框(checkbox)或单选框(radio)时生效 |
:disabled | 选中禁用状态的表单元素 |
:enabled | 选中可用状态的表单元素 |
:required | 选中必填的输入框 |
:valid / :invalid | 用于验证表单输入是否合法 |
input:checked {outline: 2px solid green;
}input:disabled {background-color: lightgray;
}
4. 其他常用伪类
伪类 | 作用 |
---|
:not(selector) | 选中不匹配 selector 的元素 |
:has(selector) | 选中包含某个子元素的父级(现代浏览器支持) |
:is(selector1, selector2) | 选择符合任意一个 selector 的元素 |
:where(selector) | 类似 :is() ,但无优先级影响 |
button:not(.disabled) {background-color: blue;
}
div:has(img) {border: 2px solid red;
}
:is(h1, h2) {font-size: 20px;
}
伪类 vs 伪元素
- 伪类(Pseudo-class):基于元素的状态应用样式(
:hover
、:nth-child()
)。 - 伪元素(Pseudo-element):用于创建或选中特定部分的元素(
::before
、::after
)。
总结
- 伪类以
:
开头,主要用于元素状态的变化(:hover
、:checked
)。 - 结构相关的伪类用于选择特定子元素(
:first-child
、:nth-child(n)
)。 :not()
和 :has()
提供更灵活的选择器控制能力。