0

0

css伪类:not()如何排除特定元素_利用:not组合选择器简化样式定义

P粉602998670

P粉602998670

发布时间:2026-01-24 13:15:08

|

253人浏览过

|

来源于php中文网

原创

:not()仅支持简单选择器,禁用嵌套伪类与复杂选择器;其否定逻辑影响性能与可读性,适合稳定少例外场景;与:is()混用需注意权重和兼容性。

css伪类:not()如何排除特定元素_利用:not组合选择器简化样式定义

伪类 :not() 不能嵌套其他伪类或复杂选择器

很多人试图写成 :not(:hover):not(.btn-primary) 是合法的,但一旦写成 :not(.btn:not(.disabled)) 就会失效——CSS 规范明确禁止 :not() 的参数中包含另一个 :not():nth-child():is() 等伪类,也不支持后代选择器(如 .nav a)。

真正能放进 :not() 括号里的,只有:简单选择器(.class#id[attr]div)、属性选择器[type="submit"])、以及单个伪类(如 :disabled:checked)。

  • :not(.active) ✅ 合法
  • :not([data-state="loading"]) ✅ 合法
  • :not(button:disabled) ✅ 合法(标签 + 伪类,仍算“简单”)
  • :not(.menu li) ❌ 非法:含空格,是后代选择器
  • :not(:not(.hidden)) ❌ 非法:嵌套 :not()

:not() 对性能和可读性的影响常被低估

浏览器在匹配 :not() 时,会先找出所有父级元素,再逐个检查是否「不满足括号内条件」。这意味着:ul > li:not(.special) 实际上比 ul > li 多一次否定判断,尤其在大量 DOM 节点下可能拖慢渲染。

更隐蔽的问题是可读性陷阱:当用 :not() 替代显式类名时,样式意图容易模糊。

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

  • button:not(.ghost) 看似省事,但后续加新按钮类型(比如 .outline)时,它也会被这条规则命中——你本意可能是「只作用于默认按钮」,但否定逻辑无法表达这种排他性
  • 相比 button.defaultbutton:not(.ghost):not(.outline) 更难维护,也更容易漏掉新增状态
  • 调试时,DevTools 的样式面板里看到 button:not(.ghost),你得反向推导哪些元素被排除了,而不是一眼看出「这是默认款」

:not() 简化「例外处理」场景最稳妥

真正适合 :not() 的地方,是那些明确、稳定、数量少的例外。比如统一设置表单控件边框,但禁用 textarea;或给所有链接加下划线,但跳过已设 class="skip-underline" 的。

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载
input, select, number {
  border: 1px solid #ccc;
}
<p>/<em> 只排除 textarea,不碰其他 input 类型 </em>/
input:not(textarea) {
border-radius: 4px;
}</p><p>a:not(.skip-underline):not([aria-hidden="true"]) {
text-decoration: underline;
}

这类写法清晰表达了「默认适用,少数例外」的语义,且例外本身不易变动。一旦例外变多(比如要排除 .skip-underline[data-no-decorate].nav-link),就该转为显式正向选择器,而非堆砌 :not()

:is():where() 混用需注意权重与兼容性

现代 CSS 中,:not() 常和 :is() 组合来表达「除了某几类之外的所有」,例如:

a:not(:is(.nav-link, .skip-underline, [data-external])) {
  color: var(--link-color);
}

但要注意两点:

  • :is() 会取其参数中最高优先级的选择器权重,所以 :not(:is(.btn, a:hover)) 的权重等同于 a:hover(即 0,1,1),而单独写 a:not(.btn):not(:hover) 权重更低(0,1,0)——这会影响样式覆盖顺序
  • :is():not() 组合在 Safari 15.4 之前不支持,若需兼容旧版 iOS/Safari,应避免,改用 BEM 或额外 class 控制

真正需要简化多条件排除时,与其硬凑 :not() + :is(),不如用预处理器生成 class 列表,或直接靠 HTML 结构分层控制。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

871

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

30

2025.12.06

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

236

2023.12.07

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

4337

2024.08.14

li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

436

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

热门下载

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

精品课程

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

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.5万人学习

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

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