0

0

CSS伪类:is()嵌套技巧_减少选择器冗余提升可读性

P粉602998670

P粉602998670

发布时间:2026-02-16 11:07:40

|

901人浏览过

|

来源于php中文网

原创

:is()嵌套写法需chrome100+/firefox100+/safari15.4+支持,旧版会忽略整条规则;嵌套仅限一层,不可与:not()混用,不支持伪元素,权重取内部最高值,工具链可能误降级,推荐用于同维度状态组合。

css伪类:is()嵌套技巧_减少选择器冗余提升可读性

伪类 :is() 嵌套写法不生效?检查浏览器兼容性与语法层级

Chrome 100+、Firefox 100+、Safari 15.4+ 才完整支持 :is() 内部嵌套选择器(比如 :is(h1, .title):hover),旧版本会直接忽略整条规则。别急着改逻辑,先查 caniuse.com/:is 看目标环境是否兜底。

常见错误现象::is(.btn, .link):is(:hover, :focus) 在 Safari 15.3 下完全不触发,因为嵌套 :is() 不被识别;必须拆成 :is(.btn:hover, .btn:focus, .link:hover, .link:focus) 或降级用逗号分隔。

  • 嵌套层级仅限一层:支持 :is(.a, .b):hover,但不支持 :is(:is(.a, .b):hover)
  • 不能和 :not() 混用在同一个 :is() 里,:is(.x:not(.y)) 合法,:is(.x, :not(.y)) 会报解析错误
  • 伪元素如 ::before 不能出现在 :is() 内部,:is(.a::before) 是无效语法

:is() 替代长重复选择器时,注意权重计算陷阱

:is() 不改变选择器优先级,它取括号内所有选择器的最高权重。比如 :is(.card .title, h2) 的权重等同于 .card .title(0,2,0),不是简单相加或取平均。

这意味着你用 :is() “简化”写法后,可能意外覆盖了原本更低权的样式,尤其在组件库或 CSS-in-JS 场景下容易踩坑。

立即学习前端免费学习笔记(深入)”;

芦笋演示
芦笋演示

一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。

下载
  • 对比:.section h2(0,1,1)vs :is(.section h2, .post h2)(仍是 0,1,1)——权重没变
  • :is(.featured h2, h2) 权重是 0,1,1(取高者),而单独写 h2 是 0,0,1,前者会更强
  • 如果想保持低权,别用 :is() 包裹高权选择器;宁可多写几行,也别靠它“假装轻量”

和预处理器(如 Sass)混用时,:is() 别提前被编译掉

Sass 1.55+ 才原生理解 :is() 并跳过其内部解析;旧版会把 :is(.a, .b) 当作未知伪类,尝试展开或报错。更危险的是,有些 PostCSS 插件(如 postcss-preset-env)默认对 :is() 做降级转换,把现代写法转成冗长逗号列表,反而放大体积。

使用场景:你在 _mixins.scss 里封装了一个按钮样式,里面用了 :is(),结果构建后发现生成了 12 行重复选择器——大概率是工具链在“好心帮忙”。

  • 确认 postcss-preset-env 配置中 stage: 3features 显式关闭 is-selector 降级
  • Sass 用户升级到 sass@1.55.0+,并避免在 @if@each 中动态拼接 :is() 字符串
  • Webpack/Vite 项目中,检查 css-loader 是否启用了 importLoaders 连环处理,导致多次解析

真正省代码的地方:配合属性选择器和状态组合

单写 :is([data-size="sm"], [data-size="lg"]) 没啥意义,但和状态连用就显效::is(button, [type="submit"]):is(:disabled, [aria-busy="true"]) 一行顶四行,且语义清晰。

这种写法在表单控件、图标按钮、响应式文本等场景最实用,关键是括号内得是「同一维度的变体」,否则可读性反降。

  • 推荐模式::is([role="button"], button, a[onclick])(行为一致的可点击元素)
  • 避免模式::is(.header, [data-modal], .tooltip)——类型、用途、结构都不同,后期维护难定位
  • 性能影响极小:现代浏览器已对 :is() 做过优化,比手写 10+ 逗号选择器更快解析

最易被忽略的一点::is() 内部不支持 CSS 变量计算,:is(.a#{--size}, .b) 这种插值在 Sass 里会报错,得用 #{...} 外包整个 :is() 块,而不是往里面塞变量。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

955

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

780

2023.11.06

Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

211

2023.10.12

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

814

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

552

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1553

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

640

2023.11.24

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

283

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

CSS教程
CSS教程

共754课时 | 32.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号