简单的聊一聊如何使用CSS的父类Has选择器

news2024/11/8 21:54:51

6ab928c08a7a63f5ffbfea60fe9a61ed.jpeg

2ebc8a3a6bd7264781c5ccf6ba11c538.png

最近的:has()选择器允许您对父元素和其他祖先应用样式,本文将向您展示如何在Web应用程序开发中使用它。

在CSS的世界中,选择器是驱动我们在网页上看到的美丽且响应式设计的工作的马。它们允许开发者根据元素的属性、位置和关系来选择和样式化HTML元素。

一个较新的CSS选择器/伪类被称为 :has ,它允许您选择每个具有与您提供给 :has() 函数的选择器匹配的子元素的元素。它在CSS中是一个重要的解决方案,不仅仅是一个简单的“父级”选择器。

使用 :has() 选择器,您可以将样式应用于父元素或祖先HTML元素。这样我们就可以扩展选择器的范围,包括一个或多个兄弟或子元素。

在本文中,我们将讨论CSS选择器以及它们在代码中的多个使用示例。

何时使用:has选择器

:has() 选择器是一种CSS伪类,允许您选择包含特定子元素的元素。它是一个强大的CSS工具,您可以用于以下目的:

  • 为子元素的父元素设置样式:如果一个 <div> 元素包含一个 <p> 元素,你可以使用 :has() 选择器来为它设置样式。

  • 有条件地添加或删除样式:如果 <div> 元素包含特定数量的子元素,您可以使用 :has() 选择器为其添加边框。

  • 根据内容选择元素:您可以使用 :has() 选择器来选择所有包含具有 "important" 类的子元素的 <div> 元素。

:has() 选择器可以与任何有效的CSS选择器一起使用,包括其他伪类。这使得它成为一个非常多功能的工具,可以以各种方式使用。

这是一个关于如何使用 :has() 选择器的小片段

/* Select all <div> elements that contain a <p> element. */
div:has(p) {
 background-color: blue;
}
  
/* Select all <div> elements that contain a child element with the class "important". */
div:has(.important) {
 border: 1px solid black;
}   
/* Select all <div> elements that contain at least two child elements. */
div:has(> * + *) {
 padding: 10px;
}

上面的代码展示了如何使用 :has 选择器的实际示例。但在我们深入使用 :has 选择器之前,让我们先来看一下为什么选择器很重要。

项目设置

要开始这个项目,你可以从这个GitHub仓库克隆起始代码。完成的仓库也在这个仓库中,但你需要使用起始代码来跟随本教程。

https://github.com/joycefoster642/-has-css-project

cd73635f48a77c694fa546720abee7ee.png

上面的图片展示了我们的项目在浏览器上启动时的样子。

注意:该项目只是一个简单的类似博客的演示,用于展示 :has 伪类的一般用法。

正向选择 vs 反向选择

以前,开发者只能选择前进,但是现在有了 :has 选择器,你现在也可以选择后退。

现在,我们要选择一个元素的父级。过去,通常是这样做的:

article + article {
 background-color: pink;
}

正如你所注意到的,第二和第三篇文章的颜色发生了变化。这是因为它们相邻。现在,让我们用 :has 选择器来反向进行操作。

article:has(+ article) {
 background-color: coral;
}

在上面的代码中,我们只是简单地说,如果文章有相邻的文章,选择前两篇文章。

32adfb8afc618b58a328e0c753475747.png

现在,请注意这次选择了第一篇和第二篇文章。

基于子元素的选择

使用 :has ,我们不仅可以选择父元素,还可以选择子元素。

article:has(span) .bold {
 background-color: lightyellow;
}
article:has(span) .italic {
 text-decoration: underline;
}

在 index.html 文件中,我们使用 span 为文章2和3应用了一个加粗和斜体的类。在我们的CSS文件中,我们使用 article:has(span) 语法选择了我们的 span 。以下是结果:

26a3e14a02d3c7c8ab010247e14616ef.png

在这里,您可以看到对第二和第三篇文章中的粗体和斜体应用的更改。我们不仅选择了文章,还选择了 span 类别应用的内容。

使用:has与:not选择

在本节中,我们将介绍如何使用 :has 伪类与 :not 。

article:not(:has(span)) {
 background-color: yellowgreen;
}

以下是结果:

9bc67ec6e6ed1834dc6b5af3fe8410fe.png

只会改变没有 span 类的文章。:has 选择器还支持 0R 逻辑条件。

article:has(p, .button) {
 background-color: royalblue;
}

以下是结果:

02dab588ec8209fdd7eca0c51f7a49d9.png

在这里,我们可以选择一个带有 OR 的段落的文章,或者选择一个带有 button 类的任意文章。这三篇文章被选择是因为它们都有一个 p 的HTML标签。但是如果我们移除 p 标签,只有最后一个带有“buy now” button 类的文章会保持着颜色。

:has使用案例和示例

在本节中,我们将探讨使用 :has 选择器时的更多实际用例和示例。

导航菜单示例

这将引导我们进入我们项目的下一部分,它看起来是这样的:

0401c5db52c5c2f649b30b0c39da3fb1.png

在这里,我们将鼠标移到位置上,您可以看到当我们将鼠标悬停在位置上时,我们拥有的不同位置。

当我们不悬停在位置和员工上时,您会注意到根本没有任何下拉菜单的指示。如果我们为此使用修饰类,我们将不得不手动进入HTML文件并编写代码。然而,我们可以通过 :has 伪类来实现这一点。

.nav__item:has(.nav__submenu)::after {
 font-family: "Font Awesome 5 Free";
 font-weight: 400;
 content: "\f150";
 margin-left: 1rem;
}

在上面的代码中,我们说,如果 .nav__item 里面有 .nav__submenu ,则只将设计应用于前两个导航图标。以下是结果:

4d6ec937e9f49fb82102c2699b05b988.png

模态示例

我们可以用JavaScript创建一个模态框,但现在我们也可以使用 :has 选择器来实现。下面的示例将带我们进入项目的下一个部分,效果如下:

936a29ccc82db47de05b6995efc9b49d.png

当复选框被选中时,没有任何反应。但是我们可以通过 :has 伪类轻松实现某些操作。

.awesome:has(.awesome__terms:checked) {
 display: none;
}

.awesome 类是我们的模态框。然后我们说如果我们有 .awesome__terms: checked ,再次点击复选框时让下一页显示出来。

4499b1f6ea4eb297fe04b576df8422b1.png

浅色和深色模式示例

这是另一个快速示例,展示了如果选中了某个选项,我们可以如何应用它。

.three:has(.lightswitch:checked) {
 background-color: var(--COLOR);
 color: var(--BGCOLOR);
}

一旦我们应用上述代码并点击“切换到暗模式”,下面是结果:

b24f1cf27d6506ce70e0900fdfdfb7a0.jpeg

现在,您可以无缝切换浅色和深色模式。

输入验证示例

我们的最后一个例子将引导我们进入项目的这一部分,看起来像这样:

bb7142e9ab374da0529042ec1b767d78.png

上面的图像显示了包含文本“名称”和文本输入的 label 。现在,我们要选择相反的东西。以前,我们只能向前选择,所以 label 必须在文本 input 之后。现在,我们可以根据 input 中的内容更改 label 。

<div>
 <label for="name">Name:</label>
 <br />
 <input
   class="name"
   type="text"
   name="name"
   id="name"
   required
   pattern="^\[A-Z\][A-z]{2,}"
 />
</div>

在我们上面的代码中,我们对 index.html 应用了一个模式。在这里,我们有一个 required pattern ,其中的正则表达式表示文本必须以大写字母开头,并且至少为3个字符。在我们的 style.css 中,我们包含了以下代码

label:has(~ .name:valid)::after {
 content: '✔️';
 color: limegreen;
 margin-left: 1rem;
 font-size: 3rem;
}

以下是结果:

9309b48fcb0ecb310ae1b4f2cd265bb4.png

名字“Joyce”符合首字母大写且最多三个单词的要求,因此出现了绿色的勾号。

既然我们已经到了教程的结尾,希望你对 CSS 选择器/伪类有所了解。

结论

CSS :has 选择器提供了一种创新的方法来解决网页开发中的复杂样式挑战。在本文中,我们探讨了这个强大选择器的功能和潜在用例,它允许我们根据元素的后代来定位目标元素。

通过利用 :has 选择器,网页开发人员可以提高他们的CSS代码的效率和灵活性,简化选择过程,减少不必要的类和嵌套结构的需求。

这个选择器使开发人员能够创建更清晰、更易于维护的代码,同时保持HTML结构的完整性。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

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

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

相关文章

OPPO手机如何添加日程桌面插件?

对于不少网友来说&#xff0c;每天生活、学习、工作相关的日程事项非常多&#xff0c;为了避免自己在忙碌中忘记待办的日程&#xff0c;就会在手机的待办APP中逐条记录下来当天的日程安排。不过还有一些小伙伴表示&#xff0c;如果忘记定时查看这些待办事项怎么办呢&#xff1f…

智慧公厕:打造便捷环保的城市出行新体验

公共厕所&#xff0c;作为城市基础设施的一部分&#xff0c;一直以来备受关注。然而&#xff0c;传统的公厕管理方式往往难以满足人们对于卫生、舒适、便捷的需求。为了改善这一现状&#xff0c;智慧公厕应运而生。 智慧公厕&#xff0c;顾名思义&#xff0c;是运用物联网、云…

V90伺服驱动器控制(PN版本)

V90伺服驱动器脉冲控制常用参数和接线,请查看下面文章链接: SMART PLC和V90伺服实现外部脉冲位置控制-CSDN博客SMART PLC脉冲轴控功能块详细介绍请参看下面文章链接:S7-200 SMART PLC自定义脉冲轴控功能块AxisControl_FB(梯形图)_RXXW_Dor的博客-CSDN博客博途1200/1500PL…

django 项目基本配置

项目工程初始化 安装框架 pip install django使用命令创建项目 django-admin startproject 项目名称效果 根目录创建apps用以放置所有包 切换至apps目录创建子应用 python ../manage.py startapp usermuxi_shop_back/settings.py # Build paths inside the project lik…

Android JKS MD5 SHA1 公钥生成 私钥生成 APP备案 内容获取

1 查看 jks keytool -list -v -keystore /Users/lipengfei/Desktop/android/androidproject.jks密钥库类型: jks 密钥库提供方: SUN您的密钥库包含 1 个条目别名: ddgj 创建日期: 2018-11-16 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: CNcn, OUcn, Ocn, Lcn,…

Chrome浏览器免费广告拦截器插件 —— Adblock

背景&#xff1a;我们在浏览网页的过程中经常会有看到一些广告&#xff0c;这些广告不仅影响正常浏览&#xff0c;甚至会遮挡主要内容&#xff0c;给用户造成极大困扰。今天分享一去除广告或者指定元素的优秀插件——Adblock 屏蔽广告前&#xff1a;页面中总是会出现一些广告 …

CVE-2023-38831漏洞实例

一、漏洞样本 DIPLOMATIC-CAR-FOR-SALE-BMW.rar样本&#xff0c;在我们双击DIPLOMATIC-CAR-FOR-SALE-BMW.pdf解压并打开时&#xff0c;就会触发漏洞运行同目录下的同文件名程序DIPLOMATIC-CAR-FOR-SALE-BMW.pdf .cmd&#xff1a; 二、恶意载荷分析 释放文档并打开&#xff0c…

广告流量变现:解析数字时代的商机

在数字时代&#xff0c;广告流量变现成为了许多企业和个人的重要商机。通过巧妙地利用广告流量&#xff0c;可以实现盈利和增加收入的目标。本文将深入探讨广告流量变现的概念、方法和策略&#xff0c;帮助读者更好地把握这一商机。 一、广告流量变现的概念 广告流量变现是指通…

39 WEB漏洞-XXEXML之利用检测绕过全解

目录 涉及案例pikachu靶场xml数据传输测试-回显、玩法、协议、引入玩法-读文件玩法-内网探针或攻击内网应用(触发漏洞地址)玩法-RCE引入外部实体dtd无回显-读取文件协议-读文件&#xff08;绕过&#xff09;xxe-lab靶场登陆框xml数据传输测试-检测发现CTF-Jarvis-OJ-Web-XXE安全…

智能低压配电房解决方案

随着科技的发展&#xff0c;数字化经济的提出&#xff0c;以及各行各业在数字化经济发展的浪潮中&#xff0c;配电房的数字化、智能化、安全化、节能化提供了新的解决方案和新思路。 系统概述&#xff1a; 力安科技智能低压配电房通过在电力设备终端加装电力探测器、物…

通信原理板块——数字数据压缩编码之霍夫曼编码

1、数字数据压缩编码基本原理 数据分为数字数据和模拟数据&#xff0c;此处的数据指的是数字数据或数字化后的模拟数据 (1)数字数据压缩编码要求 数据与语音或图像不同&#xff0c;对其压缩是不允许有任何损失&#xff0c;只能采用无损压缩的方式。压缩编码选用一种高效的编码表…

微信好友消息自动回复,让你轻松应对好友咨询

有许多用微信做业务、做微商的小伙伴&#xff0c;微信有时候消息太多看不过来&#xff0c;漏看消息&#xff0c;或者不知道怎么引导用户&#xff0c;让他们看到你想让他们看到的消息。微信上用户多微信上的信息容易漏掉&#xff0c;怎么能有时效的回复客户呢&#xff1f;此时你…

Mybatis-plus连接postgrel数据库主键自增问题

首先pg中没有直接设置主键自增这一说法&#xff0c;一般只能新建一个序列&#xff0c;可以使用Navicat创建 在mp的配置类中加入序列的配置&#xff1a; Bean public IKeyGenerator keyGenerator() {return new H2KeyGenerator(); }然后实体类的主键策略只能是INPUT&#xff0…

Ps:选框工具

Ps 的选框工具有四个&#xff0c;它们分别是&#xff1a; 矩形选框工具 Rectangular Marquee Tool 椭圆选框工具 Elliptical Marquee Tool 单行选框工具 Single Row Marquee Tool 单列选框工具 Single Column Marquee Tool 快捷键&#xff1a;M 单行和单列选框工具属于特殊…

MathType7.4最新免费版(公式编辑器)下载安装包附安装教程

MathType是一款专业的数学公式编辑器&#xff0c;理科生专用的必备工具&#xff0c;可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。可视化公式编辑器轻松创建数学方程式和化学公式。兼容Office Word、PowerPoint、Pages、Keynote、Numbers 等7…

WINCC趋势画面模板

加载按钮 Sub OnClick(Byval Item) Dim Chart,tag,ctrl,objTrendWnd,objTimeAxis,objValAxis,objTrendSet ChartScreenItems("组合框2")Chart tagChart.SelTextSet ctrl ScreenItems("控件1")threadSet objTrend…

为什么说99%的传统视频监控都有问题?

就传统的监控来说&#xff0c;主要还是通过摄像头单纯地记录画面&#xff0c;依赖人力在屏幕前“看”&#xff0c;工作人员长时间盯着十几个监控画面&#xff0c;十分容易疲劳导致注意力不集中&#xff0c;不能及时发现事故并解决。而且传统的视频监控仍以事后查证为主&#xf…

网上可以赚钱的软件,闲暇时间可用来薅羊毛做副业

正因为有了互联网&#xff0c;我们的生活变得越来越便利。我们可以在网上购物、休闲娱乐、与朋友交流&#xff0c;甚至可以通过网上做副业来赚取额外收入。生活中总会有一些业余时间&#xff0c;而很多人也不想浪费它&#xff0c;总想着做一点事情来弥补经济上的不足。因此&…

STP生成树协议详解

一、STP作用 如果链路断开或节点故障&#xff0c;那么互联的设备就无法正常通信了&#xff0c;这类网络问题叫做单点故障。没有备份的链路或节点&#xff0c;出现故障会直接断网。如果要提供 724 小时不间断的服务&#xff0c;那就需要在网络中提前部署冗余。避免出现单点故障…

web站点的欢迎页面

2023.10.20 什么是一个web站点的欢迎页面&#xff1f; 当我们设置了欢迎页面之后&#xff0c;在访问这个webapp的时候&#xff0c;或者访问这个web站点的时候&#xff0c;没有指定任何“资源路径”&#xff0c;这个时候会默认访问你的欢迎页面。 如何设置欢迎页面&#xff1f…