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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
CSS :not伪类可能错误的认识 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2019-07-28 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8808
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

一、特别的你,特别的0优先级

不敢相信 CSS :not伪类常见错误认知之一就是搞不清楚其优先级。

如果对所有CSS伪类的优先级(也就是我们常说的选择器权重)进行分类,你会发现总共只有两个级别,0级和10

① 0级指没有优先级,1级是标签选择器,10级是类选择器,属性选择器,100级是ID选择器。

伪类,伪类,既然带有“类”字,自然其优先级好类选择器一致。

但是,其中有个特殊,那就是逻辑伪类的优先级都是0。例如::not():is():where()等。

逻辑伪类整个选择器语句的优先级是由括号里面内容决定的,不同的逻辑伪类规则不一样,其中:not()伪类的本身没有优先级,最终优先级是由括号里面的选择器决定的。

例如:

:not(.disabled) {}    /* 优先级等同于.disabled选择器 */
:not(a) {}    /* 优先级等同于a选择器 */

二、生的早,不支持复杂选择器

:not()逻辑伪类出身很早,早到IE9浏览器都支持,不像现在的新出来的逻辑选择器,:not()伪类括号里面并不支持复杂的选择器(虽然新的规范已经让支持了,目前还没有浏览器跟进)。

例如,:not()伪类括号里面不能多个选择器:

:not(.disabled, .read-only) {}    /* 无效,不支持 */

需要写作:

:not(.disabled), :not(.read-only) {}

例如,:not()伪类括号里面不支持选择器级联:

:not(a.disabled) {}    /* 无效,不支持 */

需要写作:

:not(a):not(.disabled) {}

三、容易搞不清楚的否定逻辑关系

这是本文的重点。

1. 连续否定的逻辑错误

例如,如果我们想要匹配既不包含.disabled类名,又不包含.read-only类名的<input>元素,我们的选择器该如何书写,很多人会使用下面的CSS代码:

input:not(.disabled),
input:not(.read-only) {}

乍一看好像没问题,实际上,上面的书写是大大的错误。

逗号分隔的选择器,表示的是“或”的关系,而不是“与”的关系。因此input:not(.disabled), input:not(.read-only)表示的含义是:不包含.disabled类名的<input>元素,或者不包含.read-only类名的<input>元素。

最后导致的结果是.disabled类名和.read-only类名元素都会匹配。

例如:

<!-- 均会匹配 -->
<input class="disabled">
<input class="read-only">

因为<input class="disabled">虽然不会匹配input:not(.disabled),但是会匹配input:not(.read-only),导致出现了不希望出现的匹配效果。

这里,正确的书写方法应该是:

/* 正确的书写 */
input:not(.disabled):not(.read-only) {}

2. 全局否定的逻辑错误

例如我们希望除了<article>标签下的<p>元素的margin值都是0,我们代码该怎么写。

很多人会这样书写:

:not(article) p {
    margin: 0;
}

看上去没有问题,实际上问题非常严重,:not(article) p实际语义是,如果<p>元素的祖先元素的标签名不是article,则margin值是0

其中就包括这样的场景:

<article>
    <section>
        <p>margin此时也是0!<p>
    </section>
</article>

此时,虽然<p>元素在<article>元素内,但是,由于同时也在<section>元素内,于是匹配了:not(article) p这个选择器,导致出现意料之外的样式表现。

正确的书写应该是:

p {
    margin: 0;
}
article p {
    margin: 1em 0;
}

咦?不能使用:not伪类实现吗?对的,在这种场景下,:not伪类是无解的。

除非强制层级元素,也就是<p>元素是<article>的相邻子元素元素,此时我们可以使用下面CSS满足我们需求,不过限制很大,建议还是使用传统重置策略:

:not(article) > p {
    margin: 0;
}

四、最后小结一下下

:not伪类是目前唯一一个可以大规模放心使用的逻辑伪类,非常有用,优点也很突出,大家可以多用用。

但是,其中也不乏一些会让人踩坑的地方,本文就介绍这几个大家可能会理解错误或使用错误的地方,至于其优点在那里,限于不是本文重点,以后有机会在详细介绍,总之,好用,大家要多用用。

好了,就说这么多。

小朋友又生病了,连续去了3天医院了,待会儿还要去医院挂水,不扯了,感谢阅读,欢迎分享。

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8808

(本篇完)