伪类和伪元素

203 阅读3分钟

一:伪类

伪类就是一个选择处于特定状态的元素的选择器,比如某一个class的第一个元素(:first-child),我们可以理解成一个特定的CSS类,但与普通的类不一样,它只有处于DOM树无法描述的状态下才能为元素添加样式且它是基于⽂档之外的抽象,所以将其称为伪类。

二:伪元素

DOM树没有定义的虚拟元素,核⼼就是需要创建通常不存在于⽂档中的元素,比如(::before ::after ),类似于增添一个新的DOM节点到DOM树中,而不是改变元素的状态,它本身只是基于元素的抽象,并不存在于⽂档中,所以称为伪元素。

三:伪类和伪元素的异同点

1)伪类是操作文档中已有的元素,而伪元素是创建了一个文档外的元素。
2)为了书写CSS时进行区分,一般伪类是单冒号,如:hover,而伪元素是双冒号::before。一般大部分伪类强制使用单冒号,大部分伪元素单冒号和双冒号都可以,(ps:浏览器对以:开头的伪元素也继续⽀持),但是为了区分,建议按照规范书写。
3)伪类和伪元素都不出现在源⽂件和DOM树中。也就是说在html源⽂件中是看不到伪类和伪元素的

四:列举一些伪类和伪元素

伪类
名称用途
:avtive匹配被用户激活的元素(比如点击)
:disabled匹配处于不可用状态的可交互元素
:empty匹配没有子元素的元素
:first-child匹配在兄弟元素中处于第一的元素
:first-of-type匹配在它的兄弟元素中是某个类型中的第一个的元素
:blank匹配空的input
:checked匹配被选中的radio或者checkbox
:enabled匹配处于可用状态的可交互元素
:focus匹配获取焦点的的元素
:focus-visible匹配获取焦点且能被用户看到的元素
:hover匹配用户在此悬停或者触摸的元素
:invalid匹配处于不合法状态的元素,比如正则校验不通过
:lang根据文档语言匹配元素
:last-child匹配在兄弟元素中处于最后的元素
:last-of-type匹配在它的兄弟元素中是某个类型中的最后一个的元素
:link匹配没有被访问过的链接
:is()匹配符合结果的元素
:not()匹配符合结果之外的元素
:nth-child(n)匹配父元素的第n个子元素。n可以是一个数字、一个关键字或一个公式
:nth-of-type(n)匹配父元素的某种类型元素中的第n个子元素。n可以是一个数字、一个关键字或一个 公式
:nth-last-child(n)与nth-child()类似,从后往前数
:nth-last-of-type(n)与nth-last-of-type-child()类似,从后往前数
:only-child匹配没有兄弟元素的元素
:only-of-type匹配一个元素,该元素是其兄弟元素中唯一的一个类型。
:placeholder-shown匹配显示默认占位符的表单元素
:required匹配内容为必填的表单元素
:root匹配根元素
:valid匹配处于合法状态的元素
:target匹配符合当前url的锚点元素
:visited匹配被访问过的元素
伪元素
名称用途
::before匹配在原始元素的实际内容之后出现的区域
::after匹配在原始元素的实际内容之前出现的区域
::first-letter匹配元素的第一个字母
::first-line匹配元素第一行
::selection匹配被选中的文本或者区域