CSS逻辑组合伪类

CSS 的逻辑组合伪类有 4 种,分别是::not()、:is()、:where()和:has()。

否定伪类:not()

否定伪类,是在元素与括号里面的参数不匹配的时候,就会对这个伪类进行匹配。比如::not(span):{color:red},这就会匹配不是 span 元素的其他所有元素,包括 html 和 body。

否定伪类:not()的几个特点:

  1. :not()的优先级是 0,因为它的优先级是由括号里面的参数来定的;
  2. :not()伪类可以同时判断多个选择器,比如input:not(:disabled):not(:read-only) {}​​,表示匹配不属于禁用状态同时也不处于只读状态的 input 元素;
  3. not()支持多个表达式,比如:.cs-li:not(li, dd) {}​​,还有另外一种写法:.cs-li:not(li):not(dd) {}​​。但是这两种写法,要考虑兼容性问题;
  4. :not()也支持选择符,比如:input:not(.a > .b) { border: red solid; }​​;

:is()

:is()伪类,是把括号里面的选择都分配出去。语法如下:

复制代码
:is(article) p {}
:is(article, section) p {}
:is(.article[class], section) p {}
.some-class:is(article:not([id]), section) p {}​​

is 这个伪类最大的作用,就是在简化选择器。比如我们要设置多个 div 内的图片样式,样式代码如下:

复制代码
.div-a > img,
.div-b > img,
.div-c > img,
.div-d > img {
   display: block;
   width: 100%; height: 100%;
   border-radius: 50%;
}​​

通过 is 伪类来简化一下:

复制代码
:is(.div-a,.div-b,.div-c,.div-d)>img{
   display: block;
   width: 100%; height: 100%;
   border-radius: 50%;
}

:where()伪类的功能和 is 是一样的,只是它的优先级一直都是 0,会忽略括号内参数的优先级。比如::where(.article, section) p {}​​的优先级就是 p 标签的优先级。

关联伪类:has()

has()伪类,就是匹配某个选择器。例如:a:has(span) { color:red }​​,a 元素内的 span 标签的字体颜色设置为 red。

这就是 CSS 经常遇到的几个逻辑伪类。

相关推荐
圣光SG2 分钟前
奶茶店网页(纯HTML和CSS)
前端·css·html
kyriewen3 分钟前
你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”
前端·css·面试
漫天黄叶远飞5 分钟前
async/await 到底怎么工作的?
前端
ai_xiaogui13 分钟前
PanelAI前端全面升级!私有化部署AI面板控制台+生态市场一键管理详解
前端·人工智能·comfyui一键部署·生态市场算力共享·ai面板控制台·panelai私有化部署·大模型前端管理
Jelena1577958579215 分钟前
1688.item_get_app接口:包装尺寸重量信息深度解析
开发语言·前端·python
酉鬼女又兒23 分钟前
零基础快速入门前端DOM核心知识点详解与蓝桥杯Web赛道备考指南(可用于备赛蓝桥杯Web应用开发)
前端·职场和发展·蓝桥杯
daols8830 分钟前
vue甘特图vxe-gantt实现点击任务条弹出编辑表单
前端·vue.js·甘特图·vxe-gantt
Fairy要carry33 分钟前
项目05-手搓Agent之任务通信+任务编排的实现
服务器·前端·网络
忘忧记33 分钟前
pytest进阶参数化用法
前端·python·pytest
github_czy1 小时前
FastAPI 流式响应核心原理解析(含前端断开感知)
前端·fastapi