CSS `:is()` `:where()` 实战指南:简化选择器,提升可维护性

🎯 CSS :is() & :where() 实战指南:简化选择器,提升可维护性

你是否在项目中写过一大串重复的选择器?比如:

h1, h2, h3, h4, h5, h6 { margin-bottom: 1rem; }

这样的代码既冗长又难维护。
现在 CSS 提供了 :is():where() 选择器,让你可以写得更短、更优雅,还能更好地控制优先级。


🧠 什么是 :is():where()

它们都是 选择器列表函数,允许你在一个规则中传入多个候选选择器:

  • :is():匹配多个选择器,计算 正常的优先级
  • :where():匹配多个选择器,但 权重始终为 0

✅ 基础示例

/* 用 :is() 简化 */
:is(h1, h2, h3, h4, h5, h6) {margin-bottom: 1rem;
}

效果等同于:

h1, h2, h3, h4, h5, h6 {margin-bottom: 1rem;
}

🧪 实战一:按钮多状态写法

.button:is(:hover, :focus, :active) {background: #4f46e5;color: white;
}

📌 优势:不再写 .button:hover, .button:focus, .button:active,简洁很多。


🧪 实战二:用 :where() 降低选择器优先级

/* 全局 reset 样式 */
:where(h1, h2, h3, p) {margin: 0;padding: 0;
}

📌 因为 :where() 权重为 0,后续样式可以轻松覆盖,不会“打架”。


🌟 高级技巧

  1. 组合选择器

    .card :is(h2, h3) {color: #111;
    }
    

    ✅ 匹配 .card 内的所有 h2h3

  2. 与伪类结合

    nav :is(a:hover, a:focus) {text-decoration: underline;
    }
    
  3. 重置 + 覆盖最佳实践

    • :where() 写 Reset(低优先级)
    • :is() 写组件逻辑(正常优先级)

🌐 浏览器支持(2025)

浏览器支持情况
Chrome 88+
Safari 15+
Firefox 78+
Edge 88+

📌 几乎已完全普及,可以放心用在生产环境。


⚠️ 注意事项

  • :is() 的权重 = 里面最具体选择器的权重

    div:is(.highlight, #id) { ... }
    

    权重会按 #id 来算。

  • :where() 永远是 0 权重,适合写 Reset 或全局初始化。

  • 不要滥用,否则可读性可能下降。


✨ 一句话总结

:is():where() 是现代 CSS 的“选择器助手”,让你的样式更简洁、更可维护,合理利用权重差异,还能轻松写出优雅的架构。

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

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

相关文章

Linux I/O 访问架构深入分析

Linux I/O 访问架构深入分析 目录 概述I/O 架构层次核心数据结构I/O 处理流程VFS 虚拟文件系统块设备I/O字符设备I/O内存映射I/O异步I/O机制I/O调度器调试工具与方法性能优化策略 概述 Linux I/O 系统是一个多层次、高度抽象的架构,旨在为应用程序提供统一的文件访问…

Linux:6_基础IO

基础IO 一.理解"文件" 文件分类 1.内存级(被打开)文件 2.磁盘级文件 1. 狭义理解 文件在磁盘里磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的磁盘是外设 (即是输出设备也是输入设备)磁盘上的文件本质是对文件的所有操作,都是对外…

Coze源码分析-资源库-删除插件-前端源码-核心逻辑

删除插件逻辑 1. 删除操作入口组件 删除插件操作主要通过 usePluginConfig hook 中的 renderActions 方法实现,该方法返回 TableAction 组件来处理表格行的操作。 文件位置:frontend/packages/studio/workspace/entry-base/src/pages/library/hooks/u…

第一代:嵌入式本地状态(Flink 1.x)

最初的架构将状态以 JVM Heap 对象的形式存储在 TaskManager 的内存中。对于小规模数据集,这种方式效果良好,但随着状态大小的增长超出内存,将所有状态保存在内存中变得成本高昂且不稳定。 为了解决状态规模增长的问题,引入了一种…

跨境金融数据对接实践:印度NSE/BSE股票行情API集成指南

跨境金融数据对接实践:印度NSE/BSE股票行情API集成指南 关键词:印度股票数据对接 NSE实时行情 BSE证券接口 金融API开发 Python请求示例一、印度股市数据源技术解析(核心价值) 印度两大交易所数据获取难点: 时区差异&a…

AFSim2.9.0学习笔记 —— 1、AFSim及完整工具介绍(文末附:完整afsim2.9.0源码、编译好的完整工具包、中文教材等)

🔔 AFSim2.9.0 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) AFSim介绍 AFSim(Advanced Framework for Simulation Integration & Modeling【高级仿真集成与…

ArcGIS学习-18 实战-降雨量空间分布插值分析

设置环境加载要素投影查看要素,发现均不是投影数据,但都是地理坐标都是WGS1984使用工具进行批量投影然后新建空地图,重新加载确认图层的投影与栅格数据一致插值样条法得到反距离权重法插值得到克里金法插值得到

HarmonyOS应用开发:深入理解声明式UI与弹窗交互的最佳实践

HarmonyOS应用开发:深入理解声明式UI与弹窗交互的最佳实践 引言 随着HarmonyOS 4.0的发布及后续版本的演进,华为的分布式操作系统已经进入了全新的发展阶段。基于API 12及以上的开发环境为开发者提供了更强大、更高效的开发工具和框架。在HarmonyOS应用…

探索Java并发编程--从基础到高级实践技巧

Thread(线程)线程 程序执行的最小单位(一个进程至少有一个线程)。线程内有自己的执行栈、程序计数器(PC),但与同进程内其他线程共享堆内存与进程资源 在java中,线程由java.lang.Thr…

Go语言实战案例-开发一个Markdown转HTML工具

这个小工具可以把 .md 文件转换为 .html 文件,非常适合写笔记、博客或者快速预览 Markdown 内容。📌 案例目标• 读取一个 Markdown 文件• 使用开源库将 Markdown 转换为 HTML• 将 HTML 输出到新文件中📦 所需库我们用 goldmark 这个 Markd…

基于51单片机的太阳能锂电池充电路灯

基于51单片机的太阳能锂电池充电路灯系统设计 1 系统功能介绍 本设计以 STC89C52单片机 为核心,构建了一个能够利用太阳能为锂电池充电并智能控制LED路灯的系统。系统结合了 光照检测电路、LED灯电路、按键检测电路、太阳能充电电路 等模块,实现了节能、…

PAT 1178 File Path

这一题的大意是给出了一个windows的文件夹目录,让我们按照所属的目录关系,来找相应的目录是否存在,如果存在,就输出找到该文件的路径,如果不存在输出error 我的思路是用合适的树形结构保存下来目录的所属关系&#xff…

云原生部署_k8s入门

K8S官网文档:https://kubernetes.io/zh/docs/home/Kubernetes是什么Kubernetes 是用于自动部署、扩缩和管理容器化应用程序的开源系统。 Kubernetes 源自 ,Google 15 年生产环境的运维经验同时凝聚了社区的最佳创意和实践。简称K8s.Kubernet…

实战项目-----Python+OpenCV 实现对视频的椒盐噪声注入与实时平滑还原”

实战项目实现以下功能:功能 1:为视频每一帧添加椒盐噪声作用:模拟真实环境中图像传输或采集时可能出现的噪声。实现方式:读取视频的每一帧。随机选择 10000 个像素点,将其设置为黑色(0)或白色&a…

Day42 PHP(mysql注入、跨库读取)

一、sql注入基本原理:没有对用户输入的数据进行限制,导致数据库语句可以做什么,用户就可以做什么。取决于不同数据库的不同查询语言,所以为什么有mysql注入/orcale注入等等。步骤:【access】表名(字典爆破来…

机器人控制器开发(部署——软件打包备份更新)

文章总览 为什么做备份更新 为机器人控制器设计一套打包备份更新机制,为控制器的批量生产和产品与项目落地做准备。 当某个模块出现bug需要升级时,用户可以快速获取正确的bak包并导入到控制器中重启生效。 如果没有做好软件的备份更新机制&#xff0c…

LaTeX TeX Live 安装与 CTAN 国内镜像配置(Windows / macOS / Linux 全流程)

这是一份面向国内环境的 LaTeX 从零到可编译 指南:覆盖 TeX Live / MacTeX 安装、PATH 配置、CTAN 国内镜像(清华/北外/上交/中科大等)一键切换与回滚、常见坑位(权限、镜像路径、版本切换)、以及 XeLaTeX/latexmk 的实…

WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单

WhoisXML API非常自豪地宣布,我们再次荣登美国权威榜单——2025年Inc.5000全美成长最快的私营企业之一。今年,公司在地区排名中位列第119名,在全美总体排名中位列第4,271名。Inc. 5000榜单要求参评企业必须保持独立运营,并在2021至…

Elasticsearch面试精讲 Day 9:复合查询与过滤器优化

【Elasticsearch面试精讲 Day 9】复合查询与过滤器优化 在Elasticsearch的搜索体系中,复合查询(Compound Queries)与过滤器(Filters)优化是构建高效、精准搜索逻辑的核心能力。作为“Elasticsearch面试精讲”系列的第…

Android使用ReactiveNetwork监听网络连通性

引入库 implementation com.github.pwittchen:reactivenetwork-rx2:3.0.8监听网络连接变更ReactiveNetwork.observeNetworkConnectivity(context).subscribeOn(Schedulers.io())// ... // anything else what you can do with RxJava.observeOn(Schedulers.computation()).subs…