CSS 伪类
标签、class、id、属性选择器你已经会了。还差一层:有时不想永远同一种样子,而想在指针停在按钮上、用 Tab 进到输入框、或链接已经打开过时换外观。这时用伪类——不必在 HTML 里再造新 class。
伪类是什么意思?
伪类是用一个冒号(:)接到选择器上的关键字。HTML 里看不到 class="hover" 这类东西。条件成立时浏览器才启用规则:指针悬停、焦点、链接历史,或在父元素子女中的位置。
常用伪类
先学这些。名字还有很多,但做 UI 入门通常够用。
📊 日常 CSS 伪类
| 伪类 | 何时生效 | 示例 |
|---|---|---|
:hover |
指针在元素上 | a:hover |
:focus |
元素有焦点(键盘或点击) | input:focus |
:visited |
链接已被访问(有隐私限制) | a:visited |
:first-child |
元素是父元素的第一个子元素 | li:first-child |
:nth-child(n) |
第 n 个子元素,或奇/偶 | tr:nth-child(odd) |
:disabled |
表单控件被禁用 | button:disabled |
悬停 — :hover
用 :hover,指针在元素上时外观会变。按钮和链接靠小变化显得有活力——而不是布局乱跳。
悬停 — 按钮反馈
cssbutton:hover {
background-color: #0f766e;
color: #fff;
}
关于悬停
变化要温和。触控几乎没有真正悬停;别把关键信息只放在 :hover 里。
焦点 — :focus
:focus 选中当前活动的元素——例如用 Tab 到达。没有清晰焦点环,键盘用户会在表单里迷路。
焦点 — 输入框上清晰的环
cssinput:focus {
outline: 2px solid #0f766e;
outline-offset: 2px;
}
悬停与焦点都要有
悬停给指针用。焦点表示「这个控件现在是活动的」。没有同等清晰的替代时,不要删掉 outline。
已访问链接 — :visited
:visited 给浏览器认为已打开过的链接上色。通常只能改颜色(以及很少属性)。别指望改 padding 或布局——隐私会限制。
已访问 — 柔和的链接色
cssa:visited {
color: #6b21a8;
}
链接状态的书写顺序
若一起写多种状态,常见安全顺序是:link → visited → hover → focus(有时记作 LVHA)。这样已访问链接上仍能看到悬停和焦点。
第一个子元素 — :first-child
:first-child 表示该元素是父元素的第一个子元素——不是「整页任意位置的第一个 li」,而是同一父元素下兄弟中的第一个。
第一个子元素 — 突出列表首项
cssli:first-child {
font-weight: 700;
}
下一步::nth-child
用 :nth-child(odd) 或 :nth-child(3) 可做斑马纹或「每隔三个」。先把 :first-child 学稳,再学这些模式。
好习惯
- 伪类 = 一个冒号(
:hover);伪元素 = 两个(::)——下一课 - 交互悬停务必配清晰的
:focus - visited 颜色保持克制
- 用 Tab 也测一遍,别只靠鼠标
自己动手
- 短页面:
<button>、<input>、几个链接,以及含三个<li>的<ul>。 - 写上
button:hover { background-color: #0f766e; color: #fff; },把鼠标移到按钮上。 - 写上
input:focus { outline: 2px solid #0f766e; },用 Tab 进入字段。 - 写上
a:visited { color: #6b21a8; },打开链接再返回。 - 写上
li:first-child { font-weight: 700; }——只有第一项变粗。
常见错误
- 写成
::hover而不是:hover——双冒号给伪元素用 - 做了悬停却删掉焦点 outline 且无替代
- 指望
:visited对任意属性都自由 - 以为
p:first-child是「页面任意处的第一个段落」 - 把重要文字只放在
:hover里,触控用户永远看不见
小结
- 伪类用一个冒号按状态或位置选择
:hover与:focus提供反馈;两者都要保留:visited在浏览器限制内给已打开链接上色:first-child取第一个子元素;:nth-child是下一步- 单冒号 = 伪类;双冒号 = 伪元素
- 用鼠标、Tab 和短列表练习
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部