Web前端: :is(通用选择器)

:is(通用选择器)

        CSS中的 :is() 选择器是⼀个功能强⼤的伪类选择器,它⽤于简化复杂的选择器,特别是在处理多个相似的选择器时。:is() 选择器接受 ⼀个选择器列表作为参数,然后匹配列表中任何⼀个选择器所选中的元素。

:is() 选择器核心概念

基本语法

:is(selector1, selector2, ..., selectorN) {/* 样式规则 */
}

核心特性

  1. 简化选择器列表:将多个选择器组合成一个规则

  2. 容错机制:忽略无效选择器而不使整个规则失效

  3. 优先级计算:采用参数列表中最高的优先级值

  4. 嵌套支持:可以嵌套使用多个 :is() 选择器

对比传统方法与 :is() 方法 

/* 传统方法 - 冗长且重复 */
header h1, 
header h2, 
header h3, 
section h1, 
section h2, 
section h3 {color: #3498db;
}/* :is() 方法 - 简洁高效 */
:is(header, section) :is(h1, h2, h3) {color: #3498db;
}

示例:

1、合并多个选择器
如果你想为多个不同的元素应⽤相同的样式,可以使⽤ :is() 来简化选择器:
:is(h1, h2, h3, .special) {font-weight: bold;
}
2、简化复杂的选择器
:is() 也可以⽤来简化嵌套的选择器,使代码更易读:
article :is(h1, h2, h3) {color: darkblue;
}
这将选择 article 元素内部的所有 h1h2h3 元素,并将它们的⽂本颜⾊设置为深蓝⾊。
3、结合伪类
:is() 可以与伪类结合使⽤:
:is(a, button):hover {background-color: yellow;
}
这将会选择所有 a 元素和 button 元素在悬浮状态下,为它们设置⻩⾊背景。

完整演示示例

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS :is() 通用选择器深度解析</title><style>* {box-sizing: border-box;margin: 0;padding: 0;}body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;line-height: 1.6;color: #333;background: linear-gradient(135deg, #1a2a6c, #b21f1f, #1a2a6c);padding: 20px;min-height: 100vh;}.container {max-width: 1200px;margin: 0 auto;background-color: rgba(255, 255, 255, 0.95);border-radius: 15px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);overflow: hidden;}header {background: linear-gradient(to right, #3498db, #2c3e50);color: white;padding: 2rem;text-align: center;border-bottom: 5px solid #2980b9;}h1 {font-size: 3rem;margin-bottom: 1rem;text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);}.subtitle {font-size: 1.5rem;opacity: 0.9;max-width: 800px;margin: 0 auto;}.content {display: flex;flex-wrap: wrap;padding: 30px;gap: 30px;}.explanation, .demo {flex: 1;min-width: 300px;background: white;border-radius: 10px;padding: 25px;box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);}h2 {color: #2c3e50;border-bottom: 3px solid #3498db;padding-bottom: 10px;margin-bottom: 20px;font-size: 2rem;}h3 {color: #3498db;margin: 15px 0 10px;}.code-block {background: #2c3e50;color: #ecf0f1;padding: 15px;border-radius: 8px;font-family: 'Courier New', monospace;margin: 15px 0;overflow-x: auto;}.comment {color: #95a5a6;}.selector {color: #e74c3c;}.property {color: #3498db;}.value {color: #2ecc71;}/* :is() 选择器演示 */:is(section, article, aside) :is(h2, h3) {color: #e74c3c;border-left: 4px solid #e74c3c;padding-left: 10px;}:is(.demo-container, .explanation) p {line-height: 1.8;margin-bottom: 15px;}:is(.card, .note) {background: #f9f9f9;border-radius: 8px;padding: 15px;margin: 15px 0;border-left: 4px solid #3498db;}.priority-demo :is(#high-priority, .medium-priority) p {background-color: #2ecc71;color: white;padding: 10px;border-radius: 4px;}/* 优先级演示 */.priority-demo #high-priority p {background-color: #e74c3c;}/* 容错机制演示 */:is(.valid, :invalid-selector) p {background-color: #9b59b6;color: white;padding: 10px;border-radius: 4px;}.demo-container {display: grid;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));gap: 20px;margin-top: 20px;}.demo-box {background: #f8f9fa;border: 1px solid #ddd;border-radius: 8px;padding: 20px;text-align: center;transition: transform 0.3s, box-shadow 0.3s;}.demo-box:hover {transform: translateY(-5px);box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);}.demo-box h3 {margin-top: 0;color: #2c3e50;}footer {text-align: center;padding: 20px;background: #2c3e50;color: white;margin-top: 30px;border-top: 5px solid #3498db;}.browser-support {display: flex;justify-content: center;gap: 20px;flex-wrap: wrap;margin-top: 15px;}.browser {background: #34495e;padding: 10px 20px;border-radius: 30px;font-weight: bold;}@media (max-width: 768px) {.content {flex-direction: column;}h1 {font-size: 2.2rem;}}</style>
</head>
<body><div class="container"><header><h1>CSS `:is()` 通用选择器</h1><p class="subtitle">简化CSS选择器,减少代码冗余,提高可维护性</p></header><div class="content"><div class="explanation"><h2>什么是 :is() 选择器?</h2><p><strong>:is()</strong> 伪类函数接受一个选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素。这对于以更紧凑的形式编写大型选择器非常有用。</p><div class="card"><h3>核心优势</h3><ul><li><strong>简化代码</strong>:减少选择器列表中的重复</li><li><strong>容错机制</strong>:忽略无效选择器而不破坏整个规则</li><li><strong>优先级处理</strong>:采用参数列表中最高的优先级值</li><li><strong>嵌套支持</strong>:支持多层嵌套使用</li></ul></div><h3>语法示例</h3><div class="code-block"><span class="comment">/* 传统方式 */</span><br>.main <span class="selector">header</span> <span class="selector">h1</span>,<br>.main <span class="selector">section</span> <span class="selector">h1</span>,<br>.main <span class="selector">article</span> <span class="selector">h1</span> {<br>&nbsp;&nbsp;<span class="property">color</span>: <span class="value">#e74c3c</span>;<br>}<br><br><span class="comment">/* 使用 :is() */</span><br>.main <span class="selector">:is(header, section, article)</span> <span class="selector">h1</span> {<br>&nbsp;&nbsp;<span class="property">color</span>: <span class="value">#e74c3c</span>;<br>}</div><h3>优先级规则</h3><p>:is() 的优先级由其参数列表中优先级最高的选择器决定:</p><div class="code-block"><span class="comment">/* 优先级 = ID选择器 (1,0,0) */</span><br><span class="selector">:is(#header, .main-header)</span> { }<br><br><span class="comment">/* 优先级 = 类选择器 (0,1,0) */</span><br><span class="selector">:is(.header, div)</span> { }</div></div><div class="demo"><h2>实际演示</h2><h3>简化标题样式</h3><p>以下标题样式通过 :is() 统一设置:</p><div class="demo-container"><section class="demo-box"><h2>Section 标题</h2><p>这个标题应用了 :is() 设置的样式</p></section><article class="demo-box"><h2>Article 标题</h2><p>这个标题应用了 :is() 设置的样式</p></article><aside class="demo-box"><h3>Aside 子标题</h3><p>这个子标题同样应用了 :is() 样式</p></aside></div><h3>优先级演示</h3><div class="priority-demo"><div id="high-priority" class="demo-box"><h3>ID 选择器</h3><p>这个元素有 ID 选择器,优先级更高</p></div><div class="medium-priority demo-box"><h3>类选择器</h3><p>这个元素只有类选择器</p></div></div><h3>容错机制演示</h3><div class="demo-container"><div class="valid demo-box"><h3>有效选择器</h3><p>这个元素使用了有效的选择器</p></div><div class="demo-box"><h3>普通元素</h3><p>这个元素没有特殊样式</p></div></div><div class="note"><h3>浏览器支持情况</h3><p>:is() 选择器在现代浏览器中得到良好支持:</p><div class="browser-support"><div class="browser">Chrome 88+</div><div class="browser">Firefox 78+</div><div class="browser">Safari 14+</div><div class="browser">Edge 88+</div></div></div></div></div><footer><p>CSS :is() 通用选择器演示 | 使用现代CSS简化您的样式表</p><p>提示::is() 选择器可以替代 :matches() 和 :any()(已弃用)</p></footer></div>
</body>
</html>

效果展示:

关键特性演示说明

  1. 简化选择器:使用 :is(section, article, aside) :is(h2, h3) 统一设置不同容器中的标题样式

  2. 优先级规则:在优先级演示中,ID选择器(#high-priority)比类选择器(.medium-priority)具有更高优先级

  3. 容错机制:在容错演示中,:is(.valid, :invalid-selector) 规则中的无效选择器被忽略,但有效部分仍然应用

  4. 实际应用:整个页面的内容区域、卡片和笔记框样式都使用了 :is() 选择器来简化代码

这个演示展示了 :is() 选择器如何显著简化CSS代码,提高可读性和可维护性,同时保持强大的选择能力。现代浏览器对它的支持良好,使其成为现代Web开发中一个实用的工具。

 

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

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

相关文章

【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识

**总结&#xff1a;分享华为交换机以太网子接口基础知识&#xff1a;包含子接口的简介、功能、分类以及二层以太网子接口配置终结子接口、三层以太网子接口配置终结子接口和检查配置结果的相关命令 ** 一、子接口的概念 1、子接口的简介以太网子接口&#xff1a;‌是通过协议和…

在Docker中安装nexus3(作为maven私服)

1. 为什么我不推荐安装nexus2&#xff1f; 有两个原因&#xff1a;&#xff08;1&#xff09;nexus2安装麻烦&#xff0c;nexus3安装更方便 &#xff08;2&#xff09;Nexus 3相对于Nexus 2进行了一些重要的改进和增强。它引入了新的存储引擎、更多的仓库类型支持、改进的权限…

一、MySQL 8.0 之《EXPLAIN ANALYZE 执行计划》

文章目录一、MySQL EXPLAIN ANALYZE 执行计划指南主要功能实际执行性能分析详细的执行统计性能瓶颈识别与普通 EXPLAIN 的区别使用场景查询优化问题诊断总结二、EXPLAIN ANALYZE 执行计划样例分析执行顺序解读逐行详细解释第 7 行 (最内层)第 6 行第 5 行第 4 行第 3 行第 2 行…

Google I/O Extended :2025 Flutter 的现状与未来

大家好&#xff0c;我是 Flutter GDE 郭树煜&#xff0c;Github GSY 项目的维护人&#xff0c;今天主要分享的内容是「Flutter 的现状与未来」&#xff0c;可能今天更多会是信息科普类型的内容&#xff0c;主要是分享关于 Flutter 的现状与未来 现状 其实 Flutter 从开源到现在…

软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制

数据库事务管理与备份恢复 事务&#xff08;Transaction&#xff09; 是数据库管理系统中执行的一个不可分割的工作单元&#xff0c;它包含一组 SQL 操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行。 事务的四大特性&#xff08;ACID&#xff09;&…

【牛客刷题】相遇

文章目录 一、题目介绍1.1 题目描述1.2 输入描述1.3 输出描述1.4 示例二、解题思路2.1 核心算法设计2.2 性能优化关键2.3 算法流程图三、解法实现3.1 解法一:基础实现3.1.1 初级版本分析3.2 解法二:优化版本(推荐)3.2.1 优化版本分析一、题目介绍 1.1 题目描述 街道可以看…

uni-app 下拉搜索多选 支持自己创建数据

组件 /components/selectmul.vue <template><view class="multi-select-container"><view class="input-dropdown-container"><view class="" v-if="selectlist&&selectlist[0]"><text class=&qu…

nmon使用方法

安装方法 方法1&#xff1a; 最简单方法&#xff1a; #dnf install nom 验证 执行命令&#xff1a; #nmon 方法2&#xff1a; 下载安装包安装&#xff0c;下载地址 官网&#xff1a;nmon and njmon | Site / Download 或者&#xff1a;https://sourceforge.net/project…

Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

数学建模的一般步骤

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 青春由磨砺而出彩&#xff0c;人生因奋…

【web安全】SQLMap 参数深度解析:--risk 与 --level 详解

目录 简介 一、--risk 参数&#xff1a;测试风险控制 1. 基本定义 2. 各级别详细对比 risk1 (默认) risk2 risk3 3. 使用建议 二、--level 参数&#xff1a;测试深度控制 1. 基本定义 2. 各级别详细对比 level1 (默认) level2 level3 level4 level5 3. 技术实…

YOLO在自动驾驶交通标志识别中的应用与优化【附代码】

文章目录YOLO在自动驾驶交通标志识别中的应用与优化引言1. YOLO算法概述1.1 YOLO的核心思想1.2 YOLO的演进2. 交通标志识别的挑战2.1 数据集特性2.2 性能指标要求3. YOLO模型优化策略3.1 数据增强改进3.2 注意力机制集成3.3 针对小目标的改进4. 完整实现示例4.1 模型训练代码4.…

开源鸿蒙(OpenHarmony)桌面版全面解析:架构适配、设备支持与开发实战

摘要:深度剖析OpenHarmony 4.0+桌面版的技术演进,揭秘其在X86/国产芯片设备的落地实践,附源码获取与开发板实战指南 一、OpenHarmony桌面版架构突破 1.1 跨平台内核适配 开源鸿蒙通过 多内核混合架构 实现全场景覆盖: X86架构:集成Linux内核适配层(kernel/linux),支持…

【WEB】Polar靶场 11-15题 详细笔记

目录 十一.爆破 PHP的基本语法 变量与常量 数据类型 流程控制 函数 文件操作 数据库交互 1.substr() 函数 2. intval() 函数 十二.XFF X-Forwarded-For&#xff08;简称XFF&#xff09; 十三.rce1 shell 命令分隔符 isset()函数 preg_match_all()函数 ${IFS}…

导诊系统的科室和症状词库如何扩展?

要扩展导诊系统的科室和症状词库&#xff0c;可以通过以下几种方式实现&#xff1a;1. 直接扩展科室定义&#xff08;推荐&#xff09;在初始化代码中直接添加新的科室及对应症状&#xff1a;# 扩展后的科室定义 depts [Department("内科", ["发热", &quo…

通过Prompt生成互动式网页HTML案例探索(二)

之前提到了一些【通过Claude 生成图片的prompt集锦&#xff08;一&#xff09;】&#xff0c;本篇沿着试着用prompt生成互动式网页 文章目录 1 什么是互动式网页&#xff1f;1.1 一个&#x1f330;1.1 核心能力列举1.3 部署方式 2 猜测秘塔AI搜索生成HTML的Prompt3 mozi大佬&am…

暑假读书笔记第四天

今日文章&#xff1a; 小林coding&#xff1a;什么是软中断&#xff1f; 目录软中断软中断概述软中断类型如何定位软中断 CPU 使用率过高的问题&#xff1f;其他: 往期打卡 软中断 中断是系统用来响应硬件设备请求的一种机制&#xff0c;操作系统收到硬件的中断请求&#xf…

跨平台的ARM 和 x86 Docker 镜像:汇编语言实验环境搭建

一、安装和配置 Docker 1.安装 Docker 官网链接&#xff1a;https://www.docker.com/ 以Debian(Ubuntu)系统为例: #安装依赖包 sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release#添加 Docker 官方 GPG 密钥 sudo mkdir -p /etc/apt/keyr…

【前端知识】HTML页面渲染:底层原理与技术实现剖析

HTML页面渲染&#xff1a;底层原理与技术实现剖析HTML页面渲染&#xff1a;底层原理与技术实现剖析渲染引擎的核心工作流程深度解析渲染关键阶段1. 解析与构建DOM&#xff08;Document Object Model&#xff09;2. 构建CSSOM&#xff08;CSS Object Model&#xff09;3. 渲染树…

Catmull-Rom平滑多段线在奇异点处的扭曲问题(1)

Catmull-Rom在奇异点处的扭曲问题 引言 在计算机图形学和动画中&#xff0c;我们经常需要在已知点之间创建平滑的过渡。Catmull-Rom样条是一种流行的插值方法&#xff0c;它以简单直观的方式生成经过所有控制点的平滑曲线。本文将深入探讨Catmull-Rom插值的原理、实现和应用。…