# 伪类和伪元素
# 伪类
CSS *伪类* 是添加到选择器的关键字,指定要选择的元素的特殊状态。例如,:hover
可被用于在用户将鼠标悬停在按钮上时改变按钮的颜色。
伪类连同伪元素一起,他们允许你不仅仅是根据文档 DOM 树中的内容对元素应用样式,而且还允许你根据诸如像导航历史这样的外部因素来应用样式(例如 :visited
)同样的,可以根据内容的状态(例如在一些表单元素上的 :checked
),或者鼠标的位置(例如 :hover
让你知道是否鼠标在一个元素上悬浮)来应用样式。
# 伪元素
伪元素是一个附加至选择器末的关键词,允许你对被选择元素的特定部分修改样式。下例中的 ::first-line
伪元素可改变段落首行文字的样式。
一个选择器中只能使用一个伪元素。伪元素必须紧跟在语句中的简单选择器/基础选择器之后。
**注意:**按照规范,应该使用双冒号(::
)而不是单个冒号(:
),以便区分伪类和伪元素。但是,由于旧版本的 W3C 规范并未对此进行特别区分,因此目前绝大多数的浏览器都同时支持使用这两种方式来表示伪元素。为了兼容性可以使用单冒号的方式访问伪元素,但为了区分即预防版本迭代尽量使用双冒号的方式。
# 区别
伪类是选择器的一种,它用于选择处于特定状态的元素,比如当它们是这一类型的第一个元素时,或者是当鼠标指针悬浮在元素上面的时候。它们表现得会像是你向你的文档的某个部分应用了一个类一样,帮你在你的标记文本中减少多余的类,让你的代码更灵活、更易于维护。
所有的伪类以同样的方式实现。它们选中你的文档中处于某种状态的那部分,表现得就像是你已经向你的 HTML 加入类一样。
一些伪类只会在用户以某种方式和文档交互的时候应用。这些用户行为伪类,有时叫做动态伪类,表现得就像是一个类在用户和元素交互的时候加到了元素上一样。案例包括:
:hover
——上面提到过,只会在用户将指针挪到元素上的时候才会激活,一般就是链接元素。:focus
——只会在用户使用键盘控制,选定元素的时候激活。
伪元素以类似方式表现,不过表现得是像你往标记文本中加入全新的 HTML 元素一样,而不是向现有的元素上应用类。伪元素开头为双冒号::
。
有一组特别的伪元素,它们和content
属性一同使用,使用 CSS 将内容插入到你的文档中中。
你能用这些插入一个文本字符串,和在下面的实时示例里那样。
从 CSS 插入文本字符串,我们并不会在 Web 浏览器上经常这么做,因为对于一些屏幕阅读器来说,文本是不可见的,而且对于未来别人的查找和编辑也不是很方便。
这些伪元素的更推荐的用法是插入一个图标,例如下面的示例加入的一个小箭头,作为一个视觉性的提示,而且我们并不希望屏幕阅读器读出它。
# 简单总结
伪类 | 伪元素 | |
---|---|---|
语法 | : 单冒号 | :: 双冒号 |
简述 | 为元素的某种特殊的状态添加的类 | 生成看似元素但是不存在于DOM树上的假的元素 |
作用 | 可以为元素添加一些特殊效果 | 生成不被文档读取的假元素,插入内容或特殊样式 |
种类 | :hover | ::before |
:active | ::after | |
:focus | ::first-letter | |
:visited | ::first-line | |
:first-child | ::placeholder | |
:root | ::selection | |
... ... | ... ... |