css伪类函数 :is()、:where()、:has()、:not()

news2024/11/23 15:32:27

本文主要描述:is():where():has():not(),四个方法大部分内容相同,首先主要讲:is()方法,并根据:is()方法与:where():has():not()方法的不同来说明这三种方法的特性

:is()

  • 使用方法

  • 选择器特定性

  • 安全性

  • 伪类和伪元素的支持

  • :前空格意义

  • 兼容性

:is()使用方法

:is()伪类函数选择器,他接受一个选择器列表作为参数,将后边的样式分别赋值给每个作为参数的选择器

:is()适合用于当多个元素使用相同的样式时使用

普通使用
.parent .box1 {
  color: red;
}
.parent .box2 {
  color: red;
}
.parent .box3 {
  color: red;
}
.parent p {
  color: red;
}

使用is的写法:

.parent :is(.box1,.box2,.box3,p) {
  color: red;
}

.parent下匹配到:is()中(.box1.box2.box3p)任一一个class或标签时,都会匹配成功

:is()可以出现在选择器的任何位置
/* :is()在后方 */
.parent .box1 {
  background-color: red;
}
.parent .box2 {
  background-color: red;
}

/* :is()在前 */
.box1 a {
  font-weight: bold;
}
.box2 a {
  font-weight: bold;
}

/* :is()在中间 */
.parent .box1 a {
  font-size: 40px;
}
.parent .box2 a {
  font-size: 40px;
}

使用:is()的写法

/* :is()在后方 */
.parent :is(.box1,.box2) {
  background-color: red;
}

/* :is()在前 */
:is(.box1,.box2) a {
  font-weight: bold;
}

/* :is()在中间 */
.parent :is(.box1,.box2) a {
  font-size: 40px;
}
:is()组合使用

我们也可以使用多个:is()实现不同的组合,更灵活的实现写法

比如:我想给.box1.box2的标签中aspan都设置color: red;,纯CSS写的话需要每种组合都写一遍

.box1 a{
  color: red;
}
.box2 a{
  color: red;
}
.box1 span{
  color: red;
}
.box2 span{
  color: red;
}

如果使用:is(),只需要一句话就可以实现

:is(.box1, .box2) :is(a, span) {
  color: red;
}

:is()的选择器特定性(css特异性排序):

  1. :is()的自身特异性为0-0-0,但不妨碍is括号内部数据的特异性,也就是说,带:is()和不带:is()的特异性是一样的

比如#box :is(.parent, .parent2) .children {}#box .parent .children {}的特定性是一样的,都是1-2-0#box1-0-0.parent、.children或者.parent2、.children0-2-0

  1. :is()中有多个不同的特定性时,取最高的优先级,就算这个优先级并没有被使用

    <style>
    /* ↓特异性2-0-0 */
    #box :is(.parent, #a, .parent3.children) {
      color: red;
    }
    /* ↓特异性是1-1-0 */
    #box .parent {
      color: blue;
    }
    </style>
    ...
    <div id="box">
      <div class="parent">此文字为红色</div>
    </div>
    

    先说结果,这段代码最终文字是红色,css的特异性是2-0-02指的是#box#a

    • 拆开:is()分析

    • #box .parent的特异性是1-1-0

    • #box #a的特异性是2-0-0

    • #box .parent3.children的特异性是1-2-0

    • 虽然#a并没有被使用,但三者特异性最高的是#box #a,所以上边代码最终的特异性是2-0-0

:is()的安全性

安全性例子来源于mdn

在普通css中,如果任何一个选择器无效,则整个列表将被视为无效。使用 :is()时,则可以避免这个无效的情况

:valid,
:unsupported {
  /* … */
}

该代码中,在不支持:unsupported的浏览器中,:valid的样式也不会生效,但如果用:is()的话,就可以避免这个问题

:is(:valid, :unsupported) {
  /* … */
}
/* 就算浏览器不支持:unsupported,:valid的样式仍然生效 */

:is()不支持伪类和伪元素

.box:is(::before,::after){...}
/* ↑该样式并不会生效 */

:前空格意义

注意空格会导致结果不同

div:is()div :is()的意义不同

  • div :is(.value)表示的是div下的.value

    <style>
    div :is(.value) {
      color: red;
    }
    </style>
    ...
    <!-- 对应的节点是 -->
    <div>
      <span class="value">xxx</span>
    </div>
    
  • div:is(.value)表示的是classvaluediv

    <style>
    div:is(.value) {
      color: red;
    }
    </style>
    ...
    <!-- 对应的节点是 -->
    <div class="value">xxx</div>
    

兼容性

is兼容性

:where()

  • 使用方法——同:is()

  • 选择器特定性——不同

  • 安全性——同:is()

  • 伪类和伪元素的支持——同:is()

  • 注意空格会导致结果不同——同:is()

  • 兼容性

:where():is()除了选择器特定性不同以外,其他的全部相同

:where()的特定性

:where()的特定性为0-0-0,并且会妨碍内部特异性,括号内无论任何id、元素,特定性都为0-0-0

<style>
/* ↓特异性1-0-0 */
#box :where(.parent, #a, .parent3.children) {
  color: red;
}
/* ↓特异性是1-1-0 */
#box .parent {
  color: blue;
}
</style>
...
<div id="box">
  <div class="parent">此文字为蓝色</div>
</div>

兼容性

where

:has()

  • 使用方法——不同

  • 选择器特定性——同:is()

  • 安全性——同:is()

  • 伪类和伪元素的支持——同:is()

  • 注意空格会导致结果不同——同:is()

  • 兼容性

:has()使用方法

.children:has(div) {...}匹配有classchildren的标签,并且该标签必须是div

<style>
.value:has(div) {
  color: red;
}
</style>
...
<!-- ↓仅匹配div标签 -->
<div class="value">xxx</div>
<!-- ↓不会匹配p标签 -->
<p class="value">xxx</p>

兼容性

has

:not()

  • 使用方法——不同

  • 选择器特定性——同:has()

  • 安全性——同:has()

  • 伪类和伪元素的支持——同:has()

  • 注意空格会导致结果不同——同:has()

  • 兼容性

:not()使用方法

:not():has()用法相同,但作用相反

.children:not(div) {...}匹配有classchildren的标签,并且该标签不能是div

<style>
.value:has(div) {
  color: red;
}
</style>
...
<!-- ↓不会匹配div标签 -->
<div class="value">xxx</div>
<!-- ↓仅匹配p标签 -->
<p class="value">xxx</p>

兼容性

not

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1460962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 后端面试指南

面试指南 TMD&#xff0c;一个后端为什么要了解那么多的知识&#xff0c;真是服了。啥啥都得了解 MySQL MySQL索引可能在以下几种情况下失效&#xff1a; 不遵循最左匹配原则&#xff1a;在联合索引中&#xff0c;如果没有使用索引的最左前缀&#xff0c;即查询条件中没有包含…

【elasticsearch实战】知识库文件系统检索工具FSCrawler

需求背景 最近有一个需求需要建设一个知识库文档检索系统&#xff0c;这些知识库物料附件的文档居多&#xff0c;有较多文档格式如&#xff1a;PDF, Open Office, MS Office等&#xff0c;需要将这些格式的文件转化成文本格式&#xff0c;写入elasticsearch 的全文检索索引&am…

YOLO-World:实时开放词汇目标检测

paper&#xff1a;https://arxiv.org/pdf/2401.17270.pdf Github&#xff1a;GitHub - AILab-CVC/YOLO-World: Real-Time Open-Vocabulary Object Detection online demo&#xff1a;https://huggingface.co/spaces/stevengrove/YOLO-World 目录 0. 摘要 1. 引言 2. 相关工…

解决docker中运行的jar包连不上数据库

目录 数据库主机地址设置问题&#xff1a; 网络连接问题&#xff1a; 数据库端口映射&#xff1a; 数据库认证问题&#xff1a; 数据库服务是否正常运行&#xff1a; 日志查看&#xff1a; 如果在 Docker 中运行的 JAR 包无法连接到数据库&#xff0c;有几个可能的原因和…

优秀自媒体工作者常用的7款ai写作工具! #AI写作#AI写作

我们做自媒体运营&#xff0c;想要快速的创作内容&#xff0c;提供文章的创作速度是我们的目标&#xff0c;我们别的大佬可以很快地就创作出一篇内容&#xff0c;而自己墨迹半天确出不了一个字呢&#xff1f;其实这关乎到创作技巧&#xff0c;下面小编就跟大家分享如何利用自媒…

Linux的Ubuntu的APT使用

Linux的Ubuntu的APT使用 apt 介绍 apt 是 Advanced Packaging Tool 的简称&#xff0c;是一款安装包管理工具。在 Ubuntu 下&#xff0c;我们可以使用 apt 命令进行软件包的安装、删除、清理等&#xff0c;类似于 Windows 中的软件管理工具。 Ubuntu 软件操作的相关命令 su…

SD-WAN专线:助力企业海外社交媒体推广

随着全球化的发展&#xff0c;越来越多的企业将目光投向海外市场&#xff0c;而在海外市场推广中&#xff0c;社交媒体平台成为了一个重要的推广渠道。然而&#xff0c;很多企业在海外社交媒体推广过程中都会遇到网络问题&#xff0c;传统的VPN解决方案往往存在IP被封、网络不稳…

32单片机基础:GPIO输入

1.1按键控制LED 按键介绍&#xff1a; 两种方式&#xff0c;我们一般用下接的方式。 第一个图&#xff1a;注意点。当按键按下&#xff0c;PA0接地&#xff0c;被置为低电平&#xff0c; 但是一旦按键松手&#xff0c;PA0悬空&#xff0c;引脚电压不确定。所以无论怎么读引脚…

MySQL 核心模块揭秘 | 06 期 | 事务提交之前,binlog 写到哪里?

1. 准备工作 参数配置&#xff1a; binlog_format ROW binlog_rows_query_log_events OFF创建测试表&#xff1a; CREATE TABLE t_binlog (id int unsigned NOT NULL AUTO_INCREMENT,i1 int DEFAULT 0,str1 varchar(32) DEFAULT ,PRIMARY KEY (id) USING BTREE ) ENGINEIn…

使用 Nuxt 构建简单后端接口及数据库数据请求

写在前面 本文主要为大家介绍&#xff0c;如何使用 Nuxt 框架实现一个简单的后端接口&#xff0c;并且从数据库中请求数据返回给前端。 实现 创建 serverMiddleware 文件夹 首先我们新建一个名字为 serverMiddleware 文件夹用来存储接口相关信息 目录结构如下&#xff1a;…

探索 JavaScript ES8 中的函数式编程并通过实例加以实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 介绍 函数式编程是一种强大的范式&#xff0c…

【buuctf--outguess】

看题目就知道应该要用到 outguess 这个工具了&#xff0c;具体用处和下载方式请参照这篇博客Outguess下载和使用方法_outguess工具-CSDN博客 下载的 tar 压缩包解压&#xff0c;huhuhu.zip是伪加密的&#xff0c;直接用 binwalk -e 提取一下就可以&#xff0c;也可以修改压缩源…

python游戏代码大全可复制,python基础游戏代码

本篇文章给大家谈谈python游戏编程入门游戏代码&#xff0c;以及python游戏代码大全可复制&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 仅限技术学习参考 分享13个游戏源码&#xff0c;可以自己复现玩玩&#xff0c;研究下里面的编程逻辑&#xff0c;对学…

PMP考试难度怎么样?

PMP考试整体难度并不大&#xff0c;因为目前的考试题型都是选择题&#xff0c;所以通过率相对较高。然而&#xff0c;新考纲中增加了更多关于敏捷方法的题型&#xff0c;这些题目相对更加变化多样&#xff0c;也有不少考生觉得难以抉择&#xff0c;四个选项都似乎都是正确的。P…

电商数据采集+跨境电商|API电商数据采集接口洞悉数字新零售发展

随着全球经济一体化和电子商务的快速发展&#xff0c;网络购物的需求日益增加。不断涌现的电商企业使得行业的竞争情况愈演愈烈。在这种情况下&#xff0c;企业不仅要加大经营力度&#xff0c;还要在自己的基础设施和技术上持续投入&#xff0c;才能更好的适应市场和消费习惯。…

开源CMS Drupal本地快速部署并实现无公网ip环境远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

TP4366 1A 低成本 天源 同步移动电源方案 SOP-8

描述 TP4366是一款专为移动电源设计的同步升压的单芯片解决方案,内部集成了线性充电管理模块、同步放电管理模块、电量检测与LED指示模块、保护模块。TP4366内置充电与放电功率MOS,充电电流固定为0.8A,同步升压支持1A 输出电流。TP4366内部集成了温度补偿、过温保护、过充与过…

MySQL数据库基础(十二):子查询(三步走)

文章目录 子查询&#xff08;三步走&#xff09; 一、子查询&#xff08;嵌套查询&#xff09;的介绍 二、子查询的使用 三、总结 子查询&#xff08;三步走&#xff09; 一、子查询&#xff08;嵌套查询&#xff09;的介绍 在一个 select 语句中,嵌入了另外一个 select …

数据结构与算法:栈

朋友们大家好啊&#xff0c;在链表的讲解过后&#xff0c;我们本节内容来介绍一个特殊的线性表&#xff1a;栈&#xff0c;在讲解后也会以例题来加深对本节内容的理解 栈 栈的介绍栈进出栈的变化形式 栈的顺序存储结构的有关操作栈的结构定义与初始化压栈操作出栈操作获取栈顶元…

基于springboot实现的音乐网站

一、系统架构 前端&#xff1a;html | js | css | bootstrap 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 用户注册 03. 首页 04. 喜欢 05. 查询