彻底搞懂CSS伪类选择器:is、not
本文介绍一下Css伪类:is和:not,并解释一下is、not、matches、any之前的关系
:not
The :not() CSS pseudo-class represents elements that do not match a list of selectors. Since it prevents specific items from being selected, it is known as the negation pseudo-class.
以上是MDN对not的解释
单从名字上我们应该能对它有大概的认知,非选择,排除括号内的其它元素
最简单的例子,用CSS将div内,在不改变html的前提下,除了P标签,其它的字体颜色变成蓝色,
<div>
<span>我是蓝色</span>
<p>我是黑色</p>
<h1>我是蓝色</h2>
<h2>我是蓝色</h2>
<h3>我是蓝色</h3>
<h4>我是蓝色</h4>
<h5>我是蓝色</h5>
</div>
之前的做法
div span,div h2,div h3, div h4,{
color: blue;
}
not写法
div:not(p){
color: blue;
}
从上面的例子可以明显体会到not伪类选择器的作用
下面升级一下,问:将div内除了span和p,其它字体颜色变蓝色
div:not(p):not(span){
color: blue;
}
还有更为简洁的方法,如下,但是目前兼容不太好,不建议使用
div:not(p,span){
color: blue;
}
兼容
除IE8,目前所有主流浏览器都支持,可以放心使用
:is
The :is() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be selected by one of the selectors in that list. This is useful for writing large selectors in a more compact form.
以上是MDN的解释
在说is前,需要先了解一下matches
matches跟is是什么关系?
matches是is的前世,但是本质上确实一个东西,用法完全一样
matches这个单词意思跟它的作用非常匹配,但是它跟not作用恰好相反,作为not的对立面,matches这个次看起来确实格格不入,而且单词不够简洁,所以它被改名了,这里还有一个issue https://github.com/w3c/csswg-drafts/issues/3258,也就是它改名的源头
好了,现在知道matches和is其实是一个东西,那么is的用法是怎样的呢?
举例:将header和main下的p标签,在鼠标hover时文字变蓝色
<header>
<ul>
<li><p>鼠标放上去变蓝色</p></li>
<li><p>鼠标放上去变蓝色</p></li>
</ul>
<p>正常字体</p>
</header>
<main>
<ul>
<li><p>鼠标放上去变蓝色</p></li>
<li><p>鼠标放上去变蓝色</p></li>
<p>正常字体</p>
</ul>
</main>
<footer>
<ul>
<li><p>正常字体</p></li>
<li><p>正常字体</p></li>
</ul>
</footer>
之前的做法
header ul p:hover,main ul p:hover{
color: blue;
}
is写法
:is(header, main) ul p:hover{
color: blue;
}
从上面的例子大概能看出is的左右,但是并没有完全体现出is的强大之处,但是当选择的内容变多之后,特别是那种层级较多的,会发现is的写法有多简洁,拿MDN的一个例子看下
之前的写法
/* Level 0 */
h1 {
font-size: 30px;
}
/* Level 1 */
section h1, article h1, aside h1, nav h1 {
font-size: 25px;
}
/* Level 2 */
section section h1, section article h1, section aside h1, section nav h1,
article section h1, article article h1, article aside h1, article nav h1,
aside section h1, aside article h1, aside aside h1, aside nav h1,
nav section h1, nav article h1, nav aside h1, nav nav h1 {
font-size: 20px;
}
is写法
/* Level 0 */
h1 {
font-size: 30px;
}
/* Level 1 */
:is(section, article, aside, nav) h1 {
font-size: 25px;
}
/* Level 2 */
:is(section, article, aside, nav)
:is(section, article, aside, nav) h1 {
font-size: 20px;
}
可以看出,随着嵌套层级的增加,is的优势越来越明显
说完了is,那就必须认识一下any,前面说到is是matches的替代者,
any跟is又是什么关系呢?
是的,is也是any的替代品,它解决了any的一些弊端,比如浏览器前缀、选择性能等
any作用跟is完全一样,唯一不同的是它需要加浏览器前缀,用法如下
:-moz-any(.b, .c) {
}
:-webkit-any(.b, .c) {
}
结论
通过上面的介绍大概讲述了css伪类is,not,matches,any它们三者的关系
is+not组合是大势所趋
最后附上我的个人网站 https://www.mofazhuan.com/ ,转载请著名出处
彻底搞懂CSS伪类选择器:is、not的更多相关文章
- CSS伪类选择器
一.CSS伪类选择器用于给某些选择器添加效果语法规则:选择器:伪选择器例:a:link {color: #FF0000} 未访问的链接 a:visited {color: #00FF00} 已访问的链 ...
- 关于CSS伪类选择器
#CSS伪类选择器 ##使用css伪类选择器需要注意的 使用css的伪类选择器来选择某元素时,需要特别注意 :first-child 和 :nth-child(n) 等时, 网页渲染是从语句的后面开始 ...
- CSS伪类选择器 - nth-child(an+b):
CSS伪类选择器 - nth-child(an+b): 第一种:简单数字序号写法:nth-child(number)直接匹配第number个元素.参数number必须为大于0的整数.li:nth-ch ...
- CSS伪类选择器active模拟JavaScript点击事件
一.说明 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式. IE7及更早浏览器只支持a元素的:active,从IE8开始支持其它元素的:active. 另:如果需要给超链接定义:访问前 ...
- css伪类选择器的查找顺序
当伪类选择器last-child.first-child无效时,就是因为不了解css伪类选择器的查找顺序造成选中某一元素失败. 先给出一段dom <body> <div>第一个 ...
- CSS伪类选择器实现三角形
使用css实现常用的三角效果 项目中三角: .breadcrumb{ height: 40px; line-height: 40px; padding: 0 20px; border-top: 1px ...
- css伪类选择器及伪元素选择器
1.类选择器 在css中可以使用类选择器把相同的元素定义成不同的样式.比如: 结果如下: 标题背景未变 2.伪类选择器 类选择器和伪类选择器的区别在于,类选择器我们定义的,而伪类选择器是CSS中已经定 ...
- CSS伪类选择器和伪元素选择器
CSS的伪类选择器常用的是link/visited/hover/active,分别对应未访问.已访问过.鼠标悬停.鼠标按下时的样式,常用于链接,使用时要按此顺序依次写CSS,不能乱 a:link{ba ...
- css伪类选择器详细解析及案例使用-----伪类选择器(1)
动态伪类选择器:E:link :选择匹配的E元素,并且匹配元素被定义了超链接并未被访问过.E:visited :选择匹配的E元素,而且匹配的元素被定义了连接并已被访问过.E:active :选择匹配的 ...
随机推荐
- insert into select 引起的 "子查询返回的值不止一个。当子查询跟随在**之后,或子查询用作表达式时,这种情况是不允许的"
目录 1.事故现场 1.1 在使用 Insert into Table2 select * from Table1 将表1的数据插入到表2时,报错如下: 1.2 sql 语句 2.推测 3.解决方案 ...
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 SPIFFS文件系统
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 小白学 Python(8):基础流程控制(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 利用 Ansiable 自动化部署 Veeam Backup & Replication 9.5U4b
利用 Ansiable 自动化部署 Veeam Backup & Replication 9.5U4b 前言 上周出差期间接到一个做CMP(云管平台)Partner的需求,要在无人值守的安装 ...
- MySQL 字段值为NULL,PHP用json转换,传给js,显示null
这个问题出在php的json_encode环节,这个函数返回的json数据中会把空值写作null. 想通过在js端这样把null转为空字符串是不可以的: JSON.parse(JSON.stringi ...
- MFC部分通用控件
1.StaticText鼠标单击事件 设置Notify属性,添加单击事件处理函数即可 2.Button 设置图标按钮 m_btn.SetIcon(LoadIcon(AfxGetResourceHa ...
- 使用VM虚拟机安装Linux系统详细流程
最近新换了个电脑,所以需要重新安装虚拟机和Linux系统,话不多说,看流程吧 1.安装vm,这个就不说了,打开VM 2.点击安装虚拟机 3.选择自定义安装 4.选择稍后安装 5.选择要安装的系统 6. ...
- 刷题翻车:python 布尔运算操作符的优先级
前两天在 xue.cn 体验答题挑战,我有道题做错了,却不明白错在哪里.题目大概如下,代码运行后将打印什么? if True or False and False: print('1') else: ...
- 通过IDEA快速定位和排除依赖冲突
前言 我们程序员在开发的时候经常会遇到各种各样的 BUG 问题,其中大部分是业务逻辑异常,还有一些是代码书写不规范造成的异常例如:NullPointException(NPE),IndexOutOfB ...
- STL库学习笔记(一)——什么是STL?
小明是一个很牛逼的程序员,在国际标准化组织工作. 他现在正在设计新一代的C++标准,标准中有一个待实现的函数:findMax(),这个函数要求使用者输入任何类型的数据,他都能找到最大的一个. 于是他想 ...