推荐答案
伪类(Pseudo-classes)和伪元素(Pseudo-elements)都是 CSS 中用于选择元素的特殊选择器,但它们有本质的区别:
伪类 (Pseudo-classes):
- 作用:伪类用于选择元素的特殊状态,而不是元素本身。它们基于元素的状态、属性或者位置进行选择。
- 表示符:使用冒号
(:)
连接。 - 例子:
a:hover
(鼠标悬停在链接上)input:focus
(输入框获取焦点)li:first-child
(列表的第一个子元素)button:disabled
(被禁用的按钮)a:visited
(用户已访问过的链接)
伪元素 (Pseudo-elements):
- 作用:伪元素用于选择元素的特定部分,而不是元素本身。它们创建了抽象的元素,可以被样式化。
- 表示符:使用双冒号
(::)
连接(CSS3 新规范,但单冒号:
仍兼容)。 - 例子:
p::first-line
(段落的第一行)p::first-letter
(段落的第一个字母)div::before
(在 div 元素前插入内容)div::after
(在 div 元素后插入内容)::selection
(用户选择的文本)
总结区别:
- 选择目标:伪类选择的是元素的状态,而伪元素选择的是元素的部分。
- 抽象性:伪类是已经存在的元素状态,伪元素是抽象的、虚构出来的元素部分。
- 用法:伪类是选择符的一部分,用来匹配符合特定状态的元素;伪元素像是附着在元素上的特殊结构,用来设置额外的样式。
本题详细解读
伪类 (Pseudo-classes)
伪类主要用于根据元素的状态或位置来选择元素,它们不会创建新的元素,而是对现有元素进行样式化。
常用伪类举例及详解:
:hover
:当鼠标指针悬停在元素上方时,应用样式。常用于创建交互效果,如按钮颜色改变、显示提示信息等。a:hover { color: red; }
:focus
:当元素获取焦点时(例如用户点击输入框),应用样式。用于提升表单的可用性。input:focus { border-color: blue; }
:active
:当元素被激活时(例如用户点击鼠标按钮但尚未松开),应用样式。常用于按钮点击效果。button:active { background-color: gray; }
:first-child
/:last-child
:选择父元素中的第一个或最后一个子元素。常用于列表或表格的样式设置。ul li:first-child { font-weight: bold; }
:nth-child(n)
/:nth-last-child(n)
:选择父元素中指定顺序的子元素,n 可以是数字、odd
(奇数)或even
(偶数)。ul li:nth-child(2n) { background-color: #f0f0f0; } /* 为偶数项列表设置背景色 */
:disabled
/:enabled
:选择被禁用或启用的表单元素。用于根据表单状态设置样式。input:disabled { opacity: 0.5; cursor: not-allowed; }
:visited
/:link
:选择用户已访问或未访问的链接。a:visited { color: gray; }
:not(selector)
: 否定选择器,选择不符合给定选择器的元素ul li:not(:last-child){ border-bottom:1px solid #ccc; }
伪元素 (Pseudo-elements)
伪元素用于创建虚拟元素,它们可以用来添加内容或对元素的部分进行样式化。伪元素是抽象的,不真正存在于 HTML 结构中。
常用伪元素举例及详解:
::before
/::after
:在元素内容的前面或后面插入内容。常用于添加装饰性的内容,例如图标、分隔线,以及实现一些复杂的布局。-- -------------------- ---- ------- ------------ - -------- --- -------- ------ ------ ----- ------- ----- ----------------- ---- --------- --------- ---- -- ----- -- -
::first-line
:选择元素的第一行文本。p::first-line { font-weight: bold; }
::first-letter
:选择元素的第一个字母。常用于实现首字放大效果。p::first-letter { font-size: 2em; float: left; }
::selection
:选择用户选中的文本。可以改变选中时的背景颜色和文本颜色。::selection { background-color: yellow; color: black; }
::placeholder
: 改变输入框占位符的样式input::placeholder{ color: #aaa; }
::marker
: 改变列表项标记的样式ul::marker { color: red; font-size: 1.2em; }
注意:
- 在 CSS2 中,伪元素使用单冒号
:
,但在 CSS3 中建议使用双冒号::
。为了兼容性,大多数浏览器仍然支持单冒号语法。但为了遵循标准,应尽量使用双冒号。 ::before
和::after
伪元素必须结合content
属性使用,否则不会显示。- 伪元素不能被脚本访问,它们不属于 DOM 结构。