伪类 Pseudo Classes
伪类:: 伪选择器支持按照未被包含在文档树中的状态信息来选择元素。
/* 用户的指针悬停在其上的任何按钮 */
button:hover {
color: blue;
}
伪类由冒号(:)后跟着伪类名称组成(例如,:hover)。函数式伪类还包含一对括号来定义参数(例如,:dir())。附上了伪类的元素被定义为锚元素(例如,button:hover 中的 button)。
伪类让你可以将样式应用于元素,不仅与文档树内容有关,也与外部因素有关——如与导航历史有关的(例如,:visited)、与其内容的状态有关的(如某些表单元素上的 :checked)或者与鼠标位置有关的(如 :hover,它可以让你知道鼠标是否在一个元素上)。
伪类
例子:
a:visited匹配所有曾被访问过的<a>元素。什么是伪类呢?
Pseudo-classes: 翻译过来是伪类;- 伪类是选择器的一种,它用于选择处于特定状态的元素;
比如我们经常会实现的:当手指放在一个元素上时,显示另外一个颜色;
常见的伪类有:
动态伪类(dynamic pseudo-classes)
:link、:visited、:hover、:active、:focus目标伪类(target pseudo-classes)
:target语言伪类(language pseudo-classes)
:lang()元素状态伪类(UI element states pseudo-classes)
:enabled、:disabled、:checked结构伪类(structural pseudo-classes)(后续学习)
:nth-child()、:nth-last-child()、:nth-of-type()、:nth-last-of-type():first-child、:last-child、:first-of-type、:last-of-type:root、:only-child、:only-of-type、:empty
否定伪类(negation pseudo-classes)(后续学习)
:not()
动态伪类 dynamic pseudo-classes
使用举例
a:link未访问的链接,包括那些已经给定了其他伪类选择器的链接(例如:hover选择器,:active选择器,:visited选择器)。a:visited已访问的链接。表示用户已访问过的链接。出于隐私原因,可以使用此选择器修改的样式非常有限。a:hover鼠标挪动到链接上(没有激活它)的情况。这个样式会被任何与链接相关的伪类重写,像:link、:visited和:active等。a:active激活的链接(鼠标在链接上长按住未松开)它让页面能在浏览器监测到激活时给出反馈。当用鼠标交互时,它代表的是用户按下按键和松开按键之间的时间。:active伪类一般被用在<a>和<button>元素中。这个伪类的一些其他适用对象包括包含激活元素的元素,以及可以通过他们关联的<label>标签被激活的表格元素。
除了
<a>元素,:hover、:active也能用在其他元素上动态伪类 -
:focus:focus指当前拥有输入焦点的元素(能接收键盘输入)- 文本输入框一聚焦后,背景就会变红色
:focus伪类选择器常伴随在:hover伪类选择器左右,需要根据你想要实现的效果确定它们的顺序。因为链接
<a>元素可以被键盘的 Tab 键选中聚焦,所以:focus也适用于<a>元素直接给
<a>元素设置样式,相当于给<a>元素的所有动态伪类都设置了- 相当于
a:link、a:visited、a:hover、a:active、a:focus的color都是red
- 相当于
:hover必须放在:link和:visited后面才能完全生效:active必须放在:hover后面才能完全生效:focus伪类选择器常伴随在:hover伪类选择器左右,需要根据你想要实现的效果确定它们的顺序。所以建议的编写顺序是:link、:visited、:focus、:hover、:active- 在触摸屏上
:hover有问题,基本不可用。不同的浏览器上:hover伪类表现不同。可能从不会触发;或者在触摸某元素后触发了一小会儿;或者总是触发即使用户不在触摸了,直到用户触摸别的元素。触摸屏非常普遍,所以网页开发人员不要让任何内容只能通过悬停才能展示出来,不然这些内容对于触摸屏使用者来说是很难或者说不可能看到。
- HTML
- CSS
<div class="css-pseudo-classes-demo">
<a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/:hover" target="_blank" rel="noopener noreferrer"> :hover
| MDN (mozilla.org) </a>
<a href="">你已经访问过此链接。</a>
<form>
<label for="my-button">Button: </label>
<button id="my-button" type="button">提交</button>
</form>
</div>
.css-pseudo-classes-demo a {
background-color: powderblue;
transition: background-color 0.5s;
border: 5px solid white;
border-radius: 3px;
}
.css-pseudo-classes-demo form {
position: relative;
left: 5px;
top: 10px;
}
.css-pseudo-classes-demo a:link {
background-color: #82aae3;
}
.css-pseudo-classes-demo a:visited {
background-color: #a75d5d;
}
.css-pseudo-classes-demo > a:focus {
background-color: #3a4f7a;
}
.css-pseudo-classes-demo a:hover,
.css-pseudo-classes-demo > form:hover {
background-color: #f1f7b5;
}
.css-pseudo-classes-demo > a:active,
.css-pseudo-classes-demo > form:active {
background-color: #c780fa;
}