首页 前端知识 CSS :where,:is,:has伪类选择器

CSS :where,:is,:has伪类选择器

2024-06-01 10:06:52 前端知识 前端哥 384 664 我要收藏

1 :where伪类选择器

1.1 解释

:where伪类选择器,参数为 选择器列表,将会选择所有能被该选择器列表中任何一条规则选中的元素,优先级总是为 0,即拥有最低优先级,当有其他规则和 :where 同时被命中时, :where 一定是失效的

1.2 作用

  • 组合选择器列表,简化css语法
  • 重置基础样式

1.3 举例

<html>
  <head>
    <style type="text/css">
      /* header p,
      main p,
      footer p {
        color: red;
        font-size: 20px;
      } */
      :where(header, main, footer) p {
        color: red;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <header>
      <p>头部</p>
      <div class="content-header"></div>
    </header>
    <main>
      <p>内容</p>
      <div class="main"></div>
    </main>
    <footer class="foot">
      <p>尾部</p>
      <div class="content-footer"></div>
    </footer>
  </body>
</html>
header p,
main p,
footer p {
  color: red;
  font-size: 20px;
}

等价于

:where(header, main, footer) p {
  color: red;
  font-size: 20px;
}

在这里插入图片描述

  footer p{
    color: blue;
    font-size: 22px;
  }
  :where(header, main, footer.foot) p {
    color: red;
    font-size: 20px;
  }

注意这里的样式优先级,:where选择器最低,尽管:where使用了footer.foot p,依然没有footer p优先级高
在这里插入图片描述

2 :is伪类选择器

2.1 解释

:is伪类选择器,参数为 选择器列表,将会选择所有能被该选择器列表中任何一条规则选中的元素,优先级会计入整个选择器的优先级(采用其最具体参数的优先级)

2.2 作用

组合选择器列表,简化css语法

2.3 举例

<html>
  <head>
    <style type="text/css">
      /* header p,
      main p,
      footer p {
        color: red;
        font-size: 20px;
      } */
      :is(header, main, footer) p {
        color: red;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <header>
      <p>头部</p>
      <div class="content-header"></div>
    </header>
    <main>
      <p>内容</p>
      <div class="main"></div>
    </main>
    <footer class="foot">
      <p>尾部</p>
      <div class="content-footer"></div>
    </footer>
  </body>
</html>
header p,
main p,
footer p {
  color: red;
  font-size: 20px;
}

等价于

:is(header, main, footer) p {
  color: red;
  font-size: 20px;
}

在这里插入图片描述

  :is(header, main, footer.foot) p {
    color: red;
    font-size: 20px;
  }
  .foot p{
    color: blue;
    font-size: 22px;
  }

注意这里的样式优先级,:is选择器使用footer.foot p设置的样式比直接使用.foot p设置的样式优先级高

在这里插入图片描述

作为对比,下面使用 footer.foot p设置样式,此时优先级和:is选择器设置的优先级相同,但是footer.foot p直接设置的样式后加载回覆盖掉:is选择器设置的样式(交换位置,则:is选择器样式生效)

  :is(header, main, footer.foot) p {
    color: red;
    font-size: 20px;
  }
  footer.foot p{
    color: blue;
    font-size: 22px;
  }

在这里插入图片描述

2.4 与:where选择器的不同

  • :where选择器优先级为0
  • :is选择器优先级会计入整个选择器的优先级(即根据ICE原则)

3 :has伪类选择器

3.1 解释

:has伪类选择器,参数为 选择器列表,提供了一种针对引用元素选择父元素或者先前的兄弟元素的方法
<target>:has(<selector>)

3.2 作用

选择父元素或者先前的兄弟元素

3.3 举例

<html>
  <head>
    <style type="text/css">
      div:has(div.content-footer) p{
        color:blue;
      }
      div p {
        color: red;
        font-size: 22px;
      }
      p+h1{
        color:orange;
      }
      p:has(+h1){
        color:yellow;
      }
    </style>
  </head>
  <body>
    <div>
      <p>头部</p>
      <div class="content-header"></div>
    </div>
    <div>
      <p>内容</p>
      <h1 class="main">h1</h1>
    </div>
    <div class="foot">
      <p>尾部</p>
      <div class="content-footer"></div>
    </div>
  </body>
</html>
div:has(div.content-footer) p{
        color:blue;
      }

选中class是.content-footer的div元素,并且以此div元素作为子元素的div元素下的p元素

 p:has(+h1){
        color:yellow;
      }

选中后面跟着h1元素的p元素(注意,p+h1选择器选择的是h1元素)

在这里插入图片描述

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10448.html
标签
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!