惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Jina AI
Jina AI
The Cloudflare Blog
V
Visual Studio Blog
博客园_首页
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
博客园 - Franky

博客园 - JoeYoung

nvm-windows 实现 Node 多版本管理 收官大吉,来年可期 本地部署 DeepSeek+VS Code,搭建本地大模型 电脑安装 Win10 提示无法在当前分区上安装Windows的解决办法 Ollama可以不装在C盘,安装时选择路径 Swiper 自动无缝匀速滚动 Swiper 实现奇葩需求案例 Vue+ElementUI 导出为PDF文件 table 中设置宽度被td或th里的内容撑开超出 在页面离开前提醒你的 beforeunload 事件 npm安装依赖包的多种镜像及方法 通栏中不定数量的图片/轮播自适应宽高的简单示例 微信小程序 input 不能输入特殊字符的方法 微信小程序 input中输入内容后还提示请输入的解决办法 CSS的逻辑组合伪类 jQuery 指定区域的内容循环滚动 微信小程序 scroll-view 组件的 bindscroll 不触发不生效 scroll-view 组件里的 scroll-into-view 属性实例 微信小程序 授权登录时不得默认强制用户同意隐私政策协议
CSS结构伪类选择器之否定伪类:not()
JoeYoung · 2023-12-05 · via 博客园 - JoeYoung

结构伪类选择器是针对 HTML 层级结构的伪类选择器。

常用的结构化伪类选择器有:

:root选择器、:not选择器、:only-child选择器、:first-child选择器、:last-child选择器、

:nth-child选择器、:nth-child(n)选择器、:nth-last-child(n)选择器、:nth-of-type(n)选择器、

:empty选择器、:target选择器。

这些基本上都很常用,今天着重说下:否定伪类:not()

否定伪类特别有用,在css中, :not选择器 用于匹配非指定元素/选择器的每个元素,语法格式:

比如:假设我想选择所有 div,除了 id 为 的那个 container。下面代码:

div:not(#container) {
 color: blue;
}

否定伪类: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; };

今天遇到一个问题,想把首页除了logo之外的其他元素变黑白,但是用否定伪类却出现很奇怪的问题,其他有部分元素还是彩色的,代码如下:

.home div:not(.logo)
 {
     -webkit-filter: grayscale(100%); 
     -moz-filter: grayscale(100%); 
     -ms-filter: grayscale(100%); 
     -o-filter: grayscale(100%); 
     filter: grayscale(100%);
     filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);  
     _filter:none; 
     filter: gray;
}

然后改为:效果一样

.home div:not(.header > .logo)
 {
     -webkit-filter: grayscale(100%); 
     -moz-filter: grayscale(100%); 
     -ms-filter: grayscale(100%); 
     -o-filter: grayscale(100%); 
     filter: grayscale(100%);
     filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);  
     _filter:none; 
     filter: gray;
}

后来换成另一种写法却可以,代码如下:

.home div:not(.header):not(.logo)
 {
        -webkit-filter: grayscale(100%); 
        -moz-filter: grayscale(100%); 
        -ms-filter: grayscale(100%); 
        -o-filter: grayscale(100%); 
        filter: grayscale(100%);
        filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);  
        _filter:none; 
        filter: gray;
}

后来试验了一下,多少层级关系就要写多少个:not(),例如:

<div class="header">
  <div class="box">
    <div class="logo"></div>
  </div>
</div>

就要写为:

.home  div:not(.header):not(.box):not(.logo)