伪元素与伪类

188 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

一、简介

伪类

伪类用于选择DOM树之外的信息,或是不能用简单选择器进行表示的信息。前者包含那些匹配指定状态的元素,比如:visited,:active;后者包含那些满足一定逻辑条件的DOM树中的元素,比如:first-child,:first-of-type,:target。

伪元素

伪元素为DOM树没有定义的虚拟元素。不同于其他选择器,它不以元素为最小选择单元,它选择的是元素指定内容。比如::before表示选择元素内容的之前内容,也就是""::selection表示选择元素被选中的内容。

二、区别

  • 伪元素是创建出一个新元素,伪类是一个已存在但我们不能直接看到的元素
  • 伪类本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息
  • 伪元素本质上是创建了一个有内容的虚拟容器
  • CSS3中伪类和伪元素的语法不同; 伪类 :link :hover 伪元素 ::before ::after

三、举例

伪元素

伪元素描述
::after在每个元素之后插入内容
::before在每个元素之前插入内容
::first-letter匹配每个元素中内容的首字母
::first-line匹配元素中第一行的文本
::selection匹配用户被用户选中或者处于高亮状态的部分
::placeholder匹配占位符的文本,只有元素设置了 placeholder 属性时,该伪元素才能生效

伪类

1、状态

伪类描述
:link选择未访问的链接
:visited选择已访问的链接
:hover选择鼠标指针浮动在其上的元素
:active选择活动的链接
:focus选择获取焦点的输入字段

2、结构化

伪类描述
:not否定伪类,用于匹配不符合参数选择器的元素
:first-child匹配元素的第一个子元素
:last-child匹配元素的最后一个子元素
:first-of-type匹配属于其父元素的首个特定类型的子元素的每个元素
:last-of-type匹配元素的最后一个子元素
:nth-child根据元素的位置匹配一个或者多个元素,它接受一个 an+b 形式的参数,an+b 匹配到的元素示例如下:(1) 1n+0,或 n,匹配每一个子元素; (2) 2n+0,或 2n,匹配位置为 2、4、6、8… 的子元素,该表达式与关键字 even 等价; (3) 2n+1 匹配位置为 1、3、5、7… 的子元素、该表达式与关键字 odd 等价; (4) 3n+4 匹配位置为 4、7、10、13… 的子元素。
:nth-last-child与:nth-child 相似,不同之处在于它是从最后一个子元素开始计数的
:nth-of-type:nth-of-type 与 nth-child 相似,不同之处在于它是只匹配特定类型的元素
:nth-last-of-type:nth-last-of-type 与 nth-of-type 相似,不同之处在于它是从最后一个子元素开始计数的
:only-child当元素是其父元素中唯一一个子元素时,:only-child 匹配该元素
:only-of-type当元素是其父元素中唯一一个特定类型的子元素时,:only-child 匹配该元素
:target当 URL 带有锚名称,指向文档内某个具体的元素时,:target 匹配该元素

此外,还有表单相关语言相关的等,感兴趣的可以了解下