浅谈css伪类和伪元素的区别、优先级

html-css018

浅谈css伪类和伪元素的区别、优先级,第1张

css的伪类和伪元素在我们平常的工作中有着很广泛的应用,比如:hover、:active、:after等等,但是大部分人可能并不清楚伪类和伪元素的具体区别,所以我们今天来简单的梳理一下。 css伪类的定义 由于css2.1中伪类和伪元素的定位并无区别,所以我们直接引用css3中对于伪类的定义(引入来源w3c)定义:引入伪类概念是用于选择不存在于DOM树中的信息或那些不能够通过常规css选择器得到的信息。(比如:hover,:active就属于不在于dom中的信息,nth-child()属于不能够通过常规css选择器得到的信息) 伪类由“冒号”(:)+伪类的名称和伪类括号内的可选参数组成。(伪类括号内的可选参数指:nth-child(n)里的n) 所有的常规选择器都可以在任何位置使用伪类。伪类名称不区分大小写。一些伪类是互斥的,另一些伪类可以同时应用于同一个元素。为了满足用户在操作DOM时产生的DOM结构改变,伪类可以是动态的。 css伪元素的定义定义:伪元素用于创建和访问文档中不存在的抽象元素。例如,文档语言不提供访问元素内容的第一个字母或第一行的机制。使用伪元素可以访问到这些。伪元素还可以让我们访问文档中原本不存在的抽象元素(例如,::before和::after)。 伪元素由两个冒号(::)后跟伪元素的名称组成。 ::两个冒号这种格式,是为了区别伪类和伪元素。与现有样式表的兼容性,考虑到兼容性有部分伪元素可以同时使用1个或者2个冒号,(即:first-line,:first-letter,:before和:after)。对于css3中引入的新伪元素,则必须要使用2个冒号。 每个选择器只能出现一个伪元素,并且伪元素要位于选择器的后面。注意:此规范的未来版本可能允许每个选择器使用多个伪元素。 css伪类和伪元素的区别 伪类和伪元素的语法结构不同,伪类为冒号(:)加伪类名称,伪元素为两个冒号(::)加伪元素名称,不过为了考虑兼容性(css2.1中伪类和伪元素都是一个冒号),部分伪元素也支持一个冒号的写法,例如(:after,:before,:first-line,:first-letter)。 一个选择器只能使用一个伪元素,但是可以使用多个伪类。 伪类和伪元素的优先级不同,大部分伪类为0-1-0,伪元素则为0-0-1。参考 css选择器的优先级 https://www.chentugen.com/archives/12/

a:link {} /* 未访问的链接 */

a:visited {} /* 已访问的链接 */

a:hover {} /* 鼠标移动到链接上 */

a:active {} /* 选定的链接 */

a:first-child{}/*选中第一个子元素*/

a:last-child{}/*选中最后一个子元素*/

a:focus{}/*选中焦点的元素添加样式*/

a:lang{}/*为不同的语言定义特殊的规则*/

a:nth-child(n){}/*匹配第n个子元素,可以是表达式,也可以是系统自带属性,如odd,even*/

a:nth-of-type(n){}/*同上,不同点在于匹配所有子元素,nth-of-type匹配某个特定子元素*/

常用是这些伪类。

选择器 示例 示例说明

:checkedinput:checked选择所有选中的表单元素

:disabledinput:disabled选择所有禁用的表单元素

:emptyp:empty选择所有没有子元素的p元素

:enabledinput:enabled选择所有启用的表单元素

:first-of-typep:first-of-type选择的每个 p 元素是其父元素的第一个 p 元素

:in-rangeinput:in-range选择元素指定范围内的值

:invalidinput:invalid选择所有无效的元素

:last-childp:last-child选择所有p元素的最后一个子元素

:last-of-typep:last-of-type选择每个p元素是其母元素的最后一个p元素

:not(selector):not(p)选择所有p以外的元素

:nth-child(n)p:nth-child(2)选择所有 p 元素的父元素的第二个子元素

:nth-last-child(n)p:nth-last-child(2)选择所有p元素倒数的第二个子元素

:nth-last-of-type(n)p:nth-last-of-type(2)选择所有p元素倒数的第二个为p的子元素

:nth-of-type(n)p:nth-of-type(2)选择所有p元素第二个为p的子元素

:only-of-typep:only-of-type选择所有仅有一个子元素为p的元素

:only-childp:only-child选择所有仅有一个子元素的p元素

:optionalinput:optional选择没有"required"的元素属性

:out-of-rangeinput:out-of-range选择指定范围以外的值的元素属性

:read-onlyinput:read-only选择只读属性的元素属性

:read-writeinput:read-write选择没有只读属性的元素属性

:requiredinput:required选择有"required"属性指定的元素属性

:rootroot选择文档的根元素

:target#news:target选择当前活动#news元素(点击URL包含锚的名字)

:validinput:valid选择所有有效值的属性

:linka:link选择所有未访问链接

:visiteda:visited选择所有访问过的链接

:activea:active选择正在活动链接

:hover a:hover 把鼠标放在链接上的状态

:focusinput:focus选择元素输入后具有焦点

:first-letterp:first-letter选择每个<p>元素的第一个字母

:first-linep:first-line选择每个<p>元素的第一行

:first-childp:first-child选择器匹配属于任意元素的第一个子元素的 <p>元素

:beforep:before在每个<p>元素之前插入内容

:afterp:after在每个<p>元素之后插入内容

:lang(language)p:lang(it)为<p>元素的lang属性选择一个开始值