CSS 父选择器,:has()

news2024/11/19 23:27:15

在CSS Selectors 4规范中,CSS 引入了一个名为 的新选择器:has(),它最终让我们可以选择父级。这意味着我们可以选择具有特定元素的父元素。目前Safari和Chrome105已经支持。

父选择器如何在 CSS 中工作

在 CSS 中,如果我们想要选择某些东西,我们会使用后代选择器。例如,选择在div标签中的p标签中,如下所示:

div p {
    color: red;
}

在这之前,如果我们想要选择包含p标签的div标签是没有办法的,我们就需要使用javaScript来完成我们的操作。

使用:has选择器,我们现在可以选择包含p子元素的div元素,或者选择器的任何正常组合。代码如下所示:

div:has(p) {
    color: red;
}

这段可以会将所有含有p标签的div标签的颜色变成红色。

将父选择与其他选择器相结合

就像任何其他 CSS 选择器一样,我们可以在特定情况下组合它。例如,如果只想选择div具有直接span子代的标签:

div:has(> span) {
    color: red;
}

不过它不仅限于父母选择。例如,下面我们可以选择一个包含兄弟div的span元素:

span:has(+ div) {
    color: red;
}

甚至,使用:not()选择器选择没有子元素的元素。例如,以下将选择任何没有p元素的div:

div:not(:has(p)) {
    color: red;
}

选择仅包含 CSS 文本的元素

CSS 中一个非常常见的问题是:empty标签不选择包含任何文本的元素 - 所以如果一个元素包含一个空格,那么:empty就不会生效。:has选择器使我们能够选择仅包含文本节点的元素,而没有其他子元素。

虽然这对于带有空格的简单元素来说不是完美的解决方案——它确实让我们能够选择只有文本节点的 DOM 元素,这在以前是不可能的. 我们可以通过以下代码实现这一点:


div:not(:has(*)) {
    background: green;
}

兼容

如果想要在现有的项目中使用has选择器,可以考虑使用下面的polyfill
》https://www.npmjs.com/package/css-has-pseudo

结论

随着Chrome 105 中添加了对:has()选择器支持,父选择正在迅速成为现实,我们很快就能在项目中使用它。到目前为止,有了 Safari 支持,很容易测试并了解它在未来的工作方式。这还有一个额外的好处,就是让我们减少了父选择的 Javascript 解决方案。

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

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

相关文章

【Pygame小游戏】史上最全:《唐诗三百首》合集,每一首都是精华,果断收藏~(学诗+锻炼记忆+Python诗句填空小程序上线啦)

前言 岁岁年龄岁岁心,不负时光不负卿 哈喽!我是你们的栗子同学,今天给大家来点儿有趣的—— 有句话说:“读史使人明智,读诗使人灵秀。”唐诗本来就是中国文化的绚丽瑰宝,是每个人都 该学习的人生必修课。…

蚂蚁三面遭分布式血虐,意外收获史诗级分布式笔记手册,从基础到进阶收获满满

学习分布式系统设计的难题在于,这个过程存在一个环境障碍,工作中只有一些中大规模的互联网企业,才有开发大规模分布式系统的场景和需求。这就造成目前只有少数身在一线互联网公司的架构师和开发者,才有机会接触并掌握分布式系统设…

Spring Security入门学习

认识Spring Security Spring Security 是为基于 Spring 的应用程序提供声明式安全保护的安全性框架。Spring Security 提供了完整的安全性解决方案,它能够在 Web 请求级别和方法调用级别处理身份认证和授权。因为基于 Spring 框架,所以 Spring Security…

树莓派Pico开发板与大功率MOSFET/IGBT器件驱动控制24V直流电机技术实践

摘要:本文在介绍MOSFET器件和IGBT器件作为电子开关基本原理的基础上,讲述了Pico与MOSFET&IGBT器件驱动控制24V直流电机硬件接口技术,最后给出了Pico开发板GP15端口控制24V直流电机启停的MicroPython测试程序。 一、实验设备和元器件清单 …

[附源码]Nodejs计算机毕业设计基于Java的智慧停车软件Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

React 入门:实战案例 TodoList 对组件的 props 进行限制

文章目录安装 prop-types 库给组件的 props 添加限制给 Header 组件添加限制给 List 组件添加限制给 Item 组件添加限制验证 props 限制完整代码Header 组件完整代码List 组件完整代码Item 组件完整代码本文实现对组件的 props 进行属性的类型和必要性的限制。为什么要对 props…

双十二买什么数码产品比较值?入手超值的数码好物盘点

2022年双十二正式开启倒计时模式,最近看到很多人问什么数码产品值得入手。现如今,数码产品已经贯彻在我们生活的方方面面,在此,我来给大家盘点几款入手超值的数码好物,可以当个参考。 一、蓝牙耳机 推荐产品&#xf…

JUC(6) : LockSupport | 优雅的线程通信工具

一、前言 前文介绍了 CompletableFuture 和 线程池的几种对线程的管理方式后,本质上,通过这些工具,可以直接帮我们对线程进行很好的管理和运作,什么时间需要启动哪个线程,以及线程的执行顺序等。毕竟,线程…

视频监控在油气长输管道巡护管理的应用解决方案

一、方案背景 由于油气产地与消费中心位置的不一致性,常常需要采用长距离的油气管道运输。从偏僻的矿区到繁华的街市,管道架设的环境十分复杂,一旦发生危险,后果将不堪设想。因此,为确保管道安全运行,消除…

redis高可用之主从复制,哨兵,集群

目录 前言 一、主从复制 1、主从复制的作用 2、主从复制流程 3、部署Redis 主从复制步骤 3.1 环境准备 3.2 首先要搭建redis,并关闭防火墙 3.3 修改Redis 配置文件(Master节点操作) 3.4 修改Redis 配置文件(Slave节点操作) 3.5 验证主从效果 二、哨兵 1…

App逆向案例 X嘟牛 - Frida监听 WT-JS工具还原(一)

App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一) 提示:文章仅供参考,禁止用于非法途径; 文章目录App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一)前言一、资源推荐二、App抓包分…

基于android平台的语音机器人服务娱乐系统

分 类 号:TP311 学校代码:11460 学 号:10130920 本科生毕业论文 基于android平台的语音机器人服务娱乐系统 Robot Entertainment Service System Based on Android Platform 所在系(院): 学 生&…

如何通过快解析建设“智慧工地”,实现远程管理维护

A企业是我国某大型房地产企业,早在几年前就实现了全国化布局,目前除了住宅开发与销售、商用地产开发与销售及持有运营业务外,还涉猎房地产金融、物业服务与社区经营等领域。作为中国房地产的知名企业,从2020年起,A企业…

CentOS虚拟机搭建Hadoop集群

注:本文是对 https://www.bilibili.com/video/BV1CU4y1N7Sh 的实践。 环境 CentOS 7.7JDK 8Hadoop 3.3.0 准备 VMWare的网络设置:略。 准备好3台虚拟机,其IP地址分别为 192.168.88.151 、 192.168.88.152 、 192.168.88.153 &#xff0c…

RK3399 Android 8.1 开机动画制作全流程详解

文章目录一、开机动画包二、开机动画图片三、desc.txt编写规范四、开机动画临时生效五、开机动画内置系统一、开机动画包 N个文件夹和一个desc.txt。文件夹中是开机动画的图片资源,按照文件名顺序播放。desc.txt是开机动画的播放规范。压缩包必须是zip,…

力扣(LeetCode)1781. 所有子字符串美丽值之和(C++)

模拟 & 哈希集合 使用哈希集合,开字符集,下标对应小写字母顺序,值对应字符出现次数。 所有子字符串,根据示例看出,是连续子字符串。那么枚举起点,再枚举子字符串长度,就是所有连续子字符串…

web网页大作业:基于html设计与实现的茶文化网站12页(带psd)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

如何使用PyMySQL模块进行增删改查?

在正式动手之前,我们需要先安装 PyMySQL 模块。 (1)使用 pip 安装, 清华镜像: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql (2)使用 conda 安装 conda install pymysql Step2: …

毕业/课程设计——基于STM32的智能灯光控制系统(智能家居、手机APP控制、语音控制)

文章首先介绍本系统所包含的功能,主要包含六方面功能,之后逐步分享开发过程,其流程如下:点亮灯带(三极管)→调节灯光亮度(PWM)→为系统添加远程控制功能→为系统添加语音识别功能→添…

【脚本项目源码】Python实现鲁迅名言查询系统

前言 本文给大家分享的是如何通过利用Python实现鲁迅名言查询系统,废话不多直接开整~ 开发工具 Python版本: 3.6 相关模块: PyQt5模块 fuzzywuzzy模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 …