事关css的那些伪类选择器

167 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

有关于伪类选择器

写在前面: 记录一些常用的好用的css选择器以及对应用法.

动态伪类选择器语法

  • a:link (被定义了超链接并未被访问过)
  • a:visited (被定义了超链接已被访问过)
  • a:active (表单元素被选中激活)
  • a:hover (元素被鼠标滑过)
  • input:focus (表单元素被获取焦点)
  • input:checked (表单元素被获取焦点)
  • input:enabled (表单元素被启用)
  • input:disabled (表单元素被禁用)

a标签有4种伪类差不多(即对应四种状态),如下:

-  :link “链接”:超链接点击之前
-  :visited “访问过的”:链接被访问过之后
-  :hover “悬停”:鼠标放到标签上的时候
-  :active “激活”: 鼠标点击标签,但是不松手时。

结构伪类选择器语法

  • E F:nth-child(n):选择父元素E的第n个子元素F。其中n可以是整数(1,2,3)、关键字(even,odd)、可以是公式(2n+1),而且n值起始值为1,而不是0.

  • E:fisrt-child :作为父元素的第一个子元素的元素E。与E:nth-child(1)等同

  • E:last-child :作为父元素的最后一个子元素的元素E。与E:nth-last-child(1)等同

  • E:root:选择匹配元素E所在文档的根元素。在HTML文档中,根元素始终是html,此时该选择器与html类型选择器匹配的内容相同

  • E F:nth-last-child(n):选择父元素E的倒数第n个子元素F。此选择器与E:nth-child(n)选择器计算顺序刚好相反,但使用方法都是一样的,其中:nth-last-child(1)始终匹配最后一个元素,与last-child等同

  • E:nth-of-type(n) :选择父元素内具有指定类型的第n个E元素

  • E:nth-last-of-type(n):选择父元素内具有指定类型的倒数第n个E元素

  • E:first-of-type:选择父元素内具有指定类型的第一个E元素,与E:nth-of-type(1)等同

  • E:last-of-tye :选择父元素内具有指定类型的最后一个E元素,与E:nth-last-of-type(1)等同

  • E:only-child :选择父元素只包含一个子元素,且该子元素匹配E元素

  • E:only-of-type:选择父元素只包含一个同类型子元素,且该子元素匹配E元素

逻辑伪类选择器

:is()和:where()

:is()CSS伪类函数将选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素。

// 不使用:is()
div span,
div i,
p span,
p i {
    color: red;
}
// 使用:is()
:is(div, p) :is(span, i) {
    color: red;
}

 // 其实就是简便语法,代码简写,把不同父容器的相同(可以不止一个)子元素的一些共性样式抽离出来

示意图(图片来自CoCo大佬):

image

:is 和 :where 在代码语法上是一模一样的,但是,区别在于优先级.

  • :where() 的优先级总是为 0
  • :is() 的优先级是由它的选择器列表中优先级最高的选择器决定

:not()

:not()伪类选择器用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中,它也被称为反选伪类

<div class="a">div.a</div>
<div class="b">div.b</div>
<div class="c">div.c</div>
<div class="d">div.d</div>
---
div:not(.b) {
    color: red;
}
---
// 其他元素为红色  .b为默认的黑色.

:has()

: has()  伪类代表一个元素,其给定的选择器参数(相对于该元素的 :scope)至少匹配一个元素。

// 下面的选择器只会匹配直接包含 <img> 子元素的 <a> 元素
a:has(> img) 
// 下面的选择器只会匹配其后紧跟着 <p> 元素的 <h1> 元素:
h1:has(+ p)

End