css 小师系列:一种新的影响样式优先级的方式😍

相信各位一定遇到过被样式优先级折磨的困扰,那么各位平时都是怎么处理的呢?

!important?

不够优雅!

添加选择器增加权重?

过于繁琐!

那么,在技术飞速发展的现在,有没有什么方式,可以既简单又优雅的解决这个问题呢?

有的,兄弟,有的,今天它来了!

不要998,不要98,有用的知识抱回家!

现在,here we go!

:where()? :is()?

在解决问题之前,先来了解相关知识,这两个伪类选择器是什么,又有什么用呢?

话不多说,直接贴mdn!😂

首先是:where()

emmmm,有点云里雾里的🤨,让我用简单来翻译下(汉译汉😅)

简单来说,:where() 伪类选择器,用于将选择器进行分组,并将它们作为一个整体来进行选择,以简化和优化选择器的编写(类似于逻辑||)

如何使用呢?

见下列代码:

css 复制代码
p:where(.name,:focus){
    color:red
}

.dark--theme :where(button, a) {
  color: reb;
}

相当于

css 复制代码
p.name,p:focus{
  color:red
}

.dark--theme button,.dark--theme a{
  color: reb;
}

:is() 选择器用法和功能和 :where() 一致,区别在于两者之间的区别在于,:is() 会计入整个选择器的优先级(它采用其最具体参数的优先级),而 :where() 的优先级为 0。

下面是使用时要注意的地方。

注意点

  1. 空格符在这两个选择器中是有意义的
  2. :is() 和 :where() 是一个宽容型选择器(即无效的选择器会被忽略,会匹配剩下的)
  3. 这两个伪类不匹配伪元素 4.这两个伪类会增加理解成本,请确定使用他们会产生收益 5.要注意其兼容性,兼容性见下图

如何解决优先级问题?

重点就在于这句话::is() 会计入整个选择器的优先级(它采用其最具体参数的优先级),而 :where() 的优先级为 0。

首先 :where() 的优先级为零,这个特性使得它在设计框架、主题等场景时非常有用,因为很容易被覆盖。

那么:is()呢?计入整个选择器的优先级(它采用其最具体参数的优先级)意味着它的优先级是如何的呢?

来看下面这个场景:

css 复制代码
button:is(.btn){
  background:blue;
}

#btn.btn{
  background:red
}

按钮颜色如下:

这个时候怎么让有:is()伪类选择器的样式生效呢?很简单,可以往里添加几个不存在的选择器来提高其优先级,比如

css 复制代码
button:is(.btn,#increase#increase){
  background:blue;
}

这个时候按钮就会变成蓝色的了,如下图:

因此,显而易见,:is()选择器优先级是按照其分组内最高的优先级。即使那个选择器并不存在。

知道了这个,再解释下上面的示例,看下面这个优先级表格,就可以很简单的判断那个优先级更高了。

选择器 优先级
#btn.btn
button:is(.btn)
button:is(.btn,#increase#increase)

感兴趣的也可以在这个权重测试网站自己多写几个尝试下.

因此,:is()选择器可以很方便的在不选择任何元素的情况下增加选择器权重(也就是说,不需要改变html就可以增加权重了!😎)

怎么样,是不是不用再被这恼人的优先级困扰了?

总结

虽然,这两个选择器在兼容性方面还有着一定局限性,不过,相信随着之后技术迭代,这两个选择器也会成为大家常用熟知的工具!😊

感谢大家阅读,有问题可以随时在评论区提出,欢迎大家积极讨论!

(ps:都看到这了,点个赞👍再走呗,谢谢大家!😘)

往期文章

css 小师系列:为什么 background 渐变可以叠加,而颜色不可以?

相关推荐
醉方休10 分钟前
React 官方推荐使用 Vite
前端·react.js·前端框架
Dontla15 分钟前
React惰性初始化函数(Lazy Initializer)(首次渲染时执行一次,只执行一次,应对昂贵初始化逻辑)(传入一个函数、传入函数)
前端·javascript·react.js
lypzcgf23 分钟前
FastbuildAI新建套餐-前端代码分析
前端·智能体平台·ai应用平台·agent平台·fastbuildai
南囝coding36 分钟前
Claude Code 插件系统来了
前端·后端·程序员
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 默认的自动配置,笔记25
前端·spring boot·笔记
Cherry Zack1 小时前
Vue Router 路由管理完全指南:从入门到精通前言
前端·javascript·vue.js
亮子AI2 小时前
【npm】npm install 产生软件包冲突怎么办?(详细步骤)
前端·npm·node.js
汪汪大队u2 小时前
为什么 filter-policy 仅对 ASBR 的出方向生效,且即使在该生效场景下,被过滤的路由在协议内部(如协议数据库)依然存在,没有被彻底移除?
服务器·前端·网络
慧一居士2 小时前
vue.config.js 文件功能介绍,使用说明,对应完整示例演示
前端·vue.js
颜酱2 小时前
用导游的例子来理解 Visitor 模式,实现AST 转换
前端·javascript·算法