1. :is

解释::is() CSS伪类函数将选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素。

例如

  • 对于多个不同父容器的同个子元素的一些共性样式设置,传统写法如下
  header p:hover,
main p:hover,
footer p:hover {
color: red;
cursor: pointer;
}

有了:is之后可以这么写

:is(header, main, footer) p:hover {
color: red;
cursor: pointer;
}

2. :where 伪类选择器

解释:与:is类似,:where 同样是将选择器列表作为其参数,并选择可以由该列表中的选择器之一选择的任何元素。与:is的区别就是 :where优先级总为0

例如

  • html代码如下
<div>
<p>where & is test</p>
</div>
  • css代码如下
:is(div) p {
color: red;
}
:where(div) p {
color: green;
}

正常按我们的理解而言,:is(div) p 和 :where(div) p 都可以转化为 div p,由于 :where(div) p 后定义,所以文字的颜色,应该是 green 绿色,但是,实际的颜色表现为 color: red 红色:

这是因为,:where() 和 :is() 的不同之处在于,:where() 的优先级总是为 0 ,但是 :is() 的优先级是由它的选择器列表中优先级最高的选择器决定的。

3.:not 伪类选择器

解释::not 伪类选择器用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中,它也被称为反选伪类(negation pseudo-class)。

例如:

  • html如下
<div class="a">div.a</div>
<div class="b">div.b</div>
<div class="c">div.c</div>
<div class="d">div.d</div>
div:not(.b) {
color: red;
}

div:not(.b) 它可以选择除了 class 为 .b 元素之外的所有 div 元素:

tips:继承性属性可能会失效 注意!!!!

4.:has 伪类选择器

解释::has 伪类接受一个选择器组作为参数,该参数相对于该元素的 :scope 至少匹配一个元素。

例如

div>
<p>div -- p</p>
</div>
<div>
<p class="g-test-has">div -- p.has</p>
</div>
<div>
<p>div -- p</p>
</div> div:has(.g-test-has) {
border: 1px solid #000;
}

我们通过 div:has(.g-test-has) 选择器,意思是,选择 div 下存在 class 为 .g-test-has 的 div 元素。

  • :has() 父选择器 -- 嵌套结构的父元素选择
<div>
<span>div span</span>
</div> <div>
<ul>
<li>
<h2><span>div ul li h2 span</span></h2>
</li>
</ul>
</div> <div>
<h2><span>div h2 span</span></h2>
</div> div:has(>h2>span) {
margin-left: 24px;
border: 1px solid #000;
}

这里,要求准确选择 div 下直接子元素是 h2,且 h2 下直接子元素有 span 的 div 元素。注意,选择的最上层使用 :has() 的父元素 div。

  • :has() 父选择器 -- 同级结构的兄元素选择
<div class="has-test">div + p</div>
<p>p</p> <div class="has-test">div + h1</div>
<h1>h1</h1> <div class="has-test">div + h2</div>
<h2>h2</h2> <div class="has-test">div + ul</div>
<ul>ul</ul>

我们想找到兄弟层级关系中,后面接了h2元素的 .has-test 元素,可以这样写:

.has-test:has(+ h2) {
margin-left: 24px;
border: 1px solid #000;
}

tips::has() 兼容性不太好,给时间一点时间

更多例子可以参考:https://zhuanlan.zhihu.com/p/516155516

CSS3新特性值逻辑选择器的更多相关文章

  1. css3新增加的选择器

    css3新增加的选择器 一.属性选择器: E[attr] 只要有属性名E[attr=value] 属性名=属性值E[attr~=blue] 包含这个blue整个单词就可以E[attr^=c] 以这个字 ...

  2. CSS3新添加的选择器

    ---条件选择器:--- .ccc[cusid*= value] { backgroud-color:#0094ff; } //表示使用了class="ccc"元素自定义属性cus ...

  3. HTML5新规范和CSS3新特性

    1.HTML5最新规范(HTML5是HTML.XHTML以及HTML.DOM的新标准) ①用于绘画canvas元素 ②用于媒介回放的video和audio元素 ③对本地离线存储的更好支持 ④新的特俗内 ...

  4. css3新的选择器

    CSS3新的选择器 ele[att^="val"] /*属性att的值以val开头的元素*/ ele[att$="val"] /*属性att的值以val结尾的元 ...

  5. 新特性AAtitti css3 新特性attilax总结titti css

    Atitti css3 新特性attilax总结 图片发光效果2 透明渐变效果2 文字描边2 背景拉伸2 CSS3 选择器(Selector)4 @Font-face 特性7 Word-wrap &a ...

  6. Atitti css3 新特性attilax总结

    Atitti css3 新特性attilax总结 图片发光效果2 透明渐变效果2 文字描边2 背景拉伸2 CSS3 选择器(Selector)4 @Font-face 特性7 Word-wrap &a ...

  7. 两点补充——CSS3新属性以及弹性布局

    CSS3 新属性 一.[ CSS3新增属性前缀 ] 1.-webkit-:chrome/safari 2.-moz-:火狐 3.-mo-:IE 4.-o-: Opera 欧朋 二 .[CSS 长度单位 ...

  8. H5 和 CSS3 新特性

    博客地址:https://ainyi.com/52 H5 新特性 语义化标签:header.footer.section.nav.aside.article 增强型表单:input 的多个 type ...

  9. 01-移动端开发教程-CSS3新特性

    1. 移动端开发课程概述 移动互联网的兴起,让移动端的开发迅速蹿红.对于前端开发者来说,移动端的开发已经占据了他们大部分工作时间.接下来老马带大家一起学习移动端开发的相关前端开发技术. 这边课程内容包 ...

  10. [转]深入了解 CSS3 新特性

    简介 CSS 即层叠样式表(Cascading Stylesheet).Web 开发中采用 CSS 技术,可以有效地控制页面的布局.字体.颜色.背景和其它效果.只需要一些简单的修改,就可以改变网页的外 ...

随机推荐

  1. Netty基本编写

    一. public class Server { public static void main(String[] args) throws Exception { //1 创建线两个程组 //一个是 ...

  2. Ubuntu系统运行Steam中VR游戏的相关软件环境配置说明

    ubuntu下的SteamVR(HTCVive)设置教程 贴吧链接     https://tieba.baidu.com/p/5333529880 运行SteamVR出现的一些问题解决方案参考链接  ...

  3. Java 获取【.jar】文件里的资源文件

    获取jar文件里的图片等文件时,会发现使用相对路径不行了. 因为打包后的jar文件,在获取路径时稍有不同. 下面是获取jar文件中图片的例子: 1 Resource[] resources = new ...

  4. 项目自动备份,oracle 自动备份

    1 项目备份      变量的形式 定时任务不执行就都写成了绝对路径 #!/bin/bash # # 项目路径 /usr/local/tomcat-bjkjdx 备份文件路径/usr/local/ba ...

  5. Postgresql统计所有表的基本信息(如行数、大小等)

    目录 pg_class 记录表和几乎所有具有列或者像表的东西.这包括索引(但还要参见 pg_index ).序列.视图.物化视图.组合类型和TOAST表,参见 relkind .下面,当我们提及所有这 ...

  6. 【Leetcode第286场周赛】——周赛总结

    1.5268. 找出两数组的不同 - 力扣(LeetCode) (leetcode-cn.com) 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 a ...

  7. node 版本管理

    32位版本的node,运行较大的项目,会内存溢出.所以建议安装64位的版本,且运行速度比32位快.node14以下的版本支持node-sass,版本node16以上的不再支持node-sass,而sa ...

  8. 修改allure图标和标题

    allure的logo更换步骤 1.找到allure安装目录,进入目录如:D:\Program Files\allure-2.17.3\plugins\custom-logo-plugin\stati ...

  9. jmeter性能测试学习1_配置oracl jdbc连接

    1.导入orcle驱动的jar包 2.添加配置元件选择 JDBC连接配置 3.添加取样器 JDBCrequest 4.添加观察树,运行 配好密码 OK

  10. ubuntu安装软件报依赖关系错误

    1.环境 Distributor ID: UbuntuDescription: Ubuntu 20.04.1 LTSRelease: 20.04Codename: focal 2.安装 报错 3.解决 ...