彻底搞懂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 :选择匹配的 ...
随机推荐
- Python编程系列---使用装饰器传参+字典实现动态路由
# 实现一个空路由表,利用装饰器将url和功能函数的对应关系自动存到这个字典中 router_dict = {} # 定义一个装饰器 # 再给一层函数定义,用来传入一个参数,这个参数就是访问的页面地址 ...
- (转载)linux命令-sed
原文地址:https://www.cnblogs.com/zhangzongjian/p/10708222.html
- spark上 spark-shell和java -jar访问hdfs路径问题
部署spark集群 使用spark包 spark-1.0.2-bin-hadoop2.tgz 在spark-shell和java -jar访问hadoop hdfs上的文件写法是有区别的 在spark ...
- OpenvSwitch系列之ovs-ofctl命令使用
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl 命令使用 OpenvSwit ...
- LeetCode刷题笔记(6)按照索引计算int[] 数组中的和([Time Limit Exceeded]问题)
Easy303 Easy633 package easy; public class e303 { private int[] sums; public e303(int[] nums) { sums ...
- Cannot read property 'forEach' of undefined
在singer-detail组件中,有一个_normalizeSongs()方法,遍历数组 _normalizeSongs(list) { let ret = []; list.forEach(ite ...
- .NET手撸2048小游戏
.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...
- Java中 实体类 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了.通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理.可以 ...
- Educational Codeforces Round 71 (Rated for Div. 2)E. XOR Guessing
一道容斥题 如果直接做就是找到所有出现过递减的不同排列,当时硬钢到自闭,然后在凯妹毁人不倦的教导下想到可以容斥做,就是:所有的排列设为a,只考虑第一个非递减设为b,第二个非递减设为c+两个都非递减的情 ...
- CSPS模拟 100
我又挂分了T_T 这么吉利的数字..本来想考的好一点的 T1 没加当前弧优化(其实也不会),若志了 各种低错连篇而且没想到点不联通..没有奇度点就直接从1开始搜了 于是喜提70(犯了这两个若志错误应该 ...