当前位置: 首页 > news >正文

【你不知道的 CSS】你写的 CSS 太过冗余,以至于我对它下手了

:is()

你是否曾经写过下方这样冗余的CSS选择器:

.active a,
.active button,
.active label {color: steelblue;
}

其实上面这段代码可以这样写:

.active :is(a, button, label) {color: steelblue;
}

看~是不是简洁了很多!

是的,你可以使用 :is() 对选择器的任何部分进行分组,例如,你可以对如下代码:

.section h2,
.aside h2,
.nav h2 {color: steelblue;
}

进行转换:

:is(.section, .aside, .nav) h2 {color: steelblue;
}

但是 :is() 不仅对父选择器和子选择器有用,它也可以选择多个相邻的选择器,比如:

button:is(:focus, :hover, :active) {color: steelblue;
}button:is(.active, .pressed) {color: lightsteelblue;
}

上述代码等价于:

button:focus, button:hover, button:active {color: steelblue;
}button.active, button.pressed {color: lightsteelblue;
}

:where()

:where() 是一个与 :is() 非常相似的伪类,也值得注意。它们看起来非常相似:

:where(.section, .aside, .nav) h2 {color: steelblue;
}

但区别在于 :where 的权重为 0,而:is() 总是会采用列表中最特高的选择器的权重。例如,你知道下面的 CSS 代码中的按钮是什么颜色吗?

:is(html) button {color: red;
}:where(html) button {color: blue;
}

在上面的例子中,虽然以 :where() 开头的块在以 :is() 开头的块下面,但 :is() 块具有更高的权重

:has()

一个相关但非常不同的伪类是:has():has() 允许选择包含匹配选择器(或选择器集)的子元素的父元素

:has() 的一个示例是不显示下划线的情况下包含图像或视频的链接:

a { text-decoration: underline }/* 链接有下划线,除非它们包含图像或视频 */
a:has(img, video) {text-decoration: none;
}

现在,如果默认情况下我们的 a 标记有下划线文本,但其中有图像或视频,则任何匹配的锚元素的下划线将被删除。

你也可以结合 :is() 使用:


:is(a, button):has(img, video) {text-decoration: none;
}

我们还需要预处理器吗?

现在你可能会说“SCSS可以做到这一点!,你甚至可能更喜欢它的语法:

.active {button, label, a {color: steelblue;}
}

说的没错,这很优雅。但是,CSS 似乎现在已经都能获取到我们曾经需要SCSS(或其他预处理器)才能获得的特性。

CSS 变量也是 CSS 本身的另一个不可思议的补充,它回避了一个问题:就是什么时候或者多久你真的需要预处理程序:

.active :is(a, button, label) {--color: steelblue;color: var(--steelblue);
}

这并不是说预处理器没有它们的用例和优点。

但我认为在某个时间点上,它们确实是处理任何重要CSS的强制要求,而现在情况不再如此了。

最后一个惊喜

我想说的是,CSS的未来仍然是光明的。CSS 工作组正积极致力于直接向CSS中添加嵌套选择器。他们正在积极地在3种可能的语法之间进行选择:

/* 1 */
article {font-family: avenir;& aside {font-size: 1rem;}
}/* 2 */
article {font-family: avenir;
} {aside {font-size: 1rem;}
}/* 3 */
@nest article {& {font-family: avenir;}aside {font-size: 1rem;}
}

你最喜欢哪一个?

其实第 1 种已经被官方采纳!所以我们可能很快就会看到一个非常像 scss 的嵌套语法。

浏览器支持

目前所有主流浏览器都支持 :is():where() 伪类:

在这里插入图片描述
但是,需要注意,我们在这里提到的 :has() 伪类没有相同级别的支持,所以使用 :has() 时要小心:

在这里插入图片描述

相关文章:

【你不知道的 CSS】你写的 CSS 太过冗余,以至于我对它下手了

:is() 你是否曾经写过下方这样冗余的CSS选择器: .active a, .active button, .active label {color: steelblue; }其实上面这段代码可以这样写: .active :is(a, button, label) {color: steelblue; }看~是不是简洁了很多! 是的,你可以使用…...

Lesson 8.1 决策树的核心思想与建模流程

文章目录一、借助逻辑回归构建决策树1. 决策树实例2. 决策树知识补充2.1 决策树简单构建2.2 决策树的分类过程2.3 决策树模型本质2.4 决策树的树生长过程2.5 树模型的基本结构二、决策树的分类与流派1. ID3(Iterative Dichotomiser 3) 、C4.5、C5.0 决策树2. CART 决策树3. CHA…...

【算法】FIFO先来先淘汰算法分析和编码实战

背景 在设计一个系统的时候,由于数据库的读取速度远小于内存的读取速度 为加快读取速度,将一部分数据放到内存中称为缓存,但内存容量是有限的,当要缓存的数据超出容量,就需要删除部分数据 这时候需要设计一种淘汰机制…...

二分查找——我欲修仙(功法篇)

个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 学习名言:临渊羡鱼,不如退而结网——《汉书董仲舒传》 系列文章目录 第一章 ❤️ 二分查找 文章目录系列文章目录前言🚗🚗🚗二分查找&…...

Python 多线程

文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3.1 pool.submit3.2 pool.map四、Lock(线程锁)4.1 无锁导致的线程资源异常4.2 有锁五、Event(事件)5.1 简介5.2 示例六、Queue(队列&a…...

JVM笔记(九)选择合适的垃圾收集器

Epsilon收集器Epsilon收集器由RedHat公司在JEP 318中提出,在此提案里Epsilon被形容成一个无操作的收集器(A No-Op Garbage Collector),而事实上只要Java虚拟机能够工作,垃圾收集器便不可能是真正“无操作”的。原因是“…...

二维图像处理到三维点云处理

一、Opencv和PCL 下面是opencv和pcl的特点、区别和联系的详细对比表格。 特点/区别/联系OpenCVPCL英文全称Open Source Computer Vision LibraryPoint Cloud Library语言C、Python、JavaC功能图像处理(图像处理和分析、特征提取和描述、图像识别和分类、目标检测和跟踪等)、计…...

leetcode 删除有序数组中的重复项

题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一…...

JVM学习.03 类加载机制

1、前言从事Java开发工作的都知道,Java程序提交到JVM运行时,需要编译成Class文件,才能被JVM加载运行。那么这些Class文件进入到虚拟机后会发生什么?以及Class是如何被加载的?这些都是本文要讲解的部分。2、类加载时机所…...

Celery使用:优秀的python异步任务框架

目录Celery 简介介绍安装基本使用Flask使用Celery异步任务定时任务Celery使用Flask上下文进阶使用参考停止Worker后台运行Celery 简介 介绍 Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。 它是一个…...

第十四届蓝桥杯三月真题刷题训练——第 19 天

第 1 题:灌溉_BFS板子题 题目描述 小蓝负责花园的灌溉工作。 花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。 小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。 每经过一分…...

类和对象 - 下

本文已收录至《C语言》专栏! 作者:ARMCSKGT 目录 前言 正文 初始化列表 成员变量的定义与初始化 初始化列表的使用 变量定义顺序 explicit关键字 隐式类型转换 自定义类型隐式转换 explicit 限制转换 关于static static声明类成员 友元 友…...

【云原生】Linux基础IO(文件理解与操作)

✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Great minds discuss ideas. Average minds discuss events. Small minds disc…...

CentOS 7 安装 mysql 8.0 客户端

只想安装 mysql-client 8.0 , 结果发现直接 yum install mysql mysql-client 安装的版本是 mysql Ver 15.1 Distrib 5.5.68-MariaDB ,这个版本太低,连接其他服务器上的 mysql 8.0 时总是失败,因为 mysql 8.0 加密方式改变了&#…...

Ubuntu下载、配置、安装和编译opencv

1 安装相关依赖安装opencv前,需要先准备好编译器、相关依赖sudo apt-get install gcc g cmake vim sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev sudo apt-get install libgtk2.0-…...

第七讲 贪心

文章目录股票买卖 II货仓选址(贪心:排序中位数)糖果传递(❗贪心:中位数)雷达设备(贪心排序)付账问题(平均值排序❓)乘积最大(排序/双指针)后缀表达…...

数字藏品的未来及发展趋势

随着互联网的普及以及数字文化的日益发展,数字藏品作为一种全新的收藏方式正在逐步兴起。数字藏品可以是数字版权、数字艺术品、数字音乐以及数字视频等形式,这些藏品通过数字化技术保存下来,并在互联网上进行传播和交易。数字藏品的发展趋势…...

值得记忆的STL常用算法,分分钟摆脱容器调用的困境,以vector为例,其余容器写法类似

STL常用算法 概述&#xff1a; 算法主要是由头文件<algorithm> <functional> <numeric>组成 <algorithm>是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、交换、查找、遍历操作、复制、修改等等 <nuneric>体积很小&#xff0c;只包括…...

java如何手动导jar包

今天用IDEA&#xff0c;需要导入一个Jar包&#xff0c;因为以前都是用eclipse的&#xff0c;所以对这个idea还不怎么上手&#xff0c;连打个Jar包都是谷歌了一下。 但是发现网上谷歌到的做法一般都是去File –> Project Structure中去设置&#xff0c;有没有如同eclipse一样…...

怎么防止SQL注入?

首先SQL注入是一种常见的安全漏洞&#xff0c;黑客可以通过注入恶意代码来攻击数据库和应用程序。以下是一些防止SQL注入的基本措施&#xff1a; 数据库操作层面 使用参数化查询&#xff1a;参数化查询可以防止SQL注入&#xff0c;因为参数化查询会对用户输入的数据进行过滤和…...

突破安卓视频解析壁垒:LAMDA框架实现流媒体捕获与自动化提取全指南

突破安卓视频解析壁垒&#xff1a;LAMDA框架实现流媒体捕获与自动化提取全指南 【免费下载链接】lamda ⚡️ Android reverse engineering & automation framework | 史上最强安卓抓包/逆向/HOOK & 云手机/远程桌面/自动化辅助框架&#xff0c;你的工作从未如此简单快捷…...

可视化是对比原始数据和填补数据的强大工具。你可以使用箱线图、密度图或散点图来可视化原始数据和填补后的数据

下面的内容摘录自《用R探索医药数据科学》专栏文章的部分内容&#xff08;原文5665字&#xff09;。 2篇2章6节&#xff1a;R的多重填补法中随机回归填补法的应用&#xff0c;MICE包的实际应用和统计与可视化评估-CSDN博客 在数据分析中&#xff0c;缺失数据是常见且具有挑战性…...

C# rtwpriv Wi-Fi定频工具

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、使用简介&#xff0c;说明#前言 对于无线产品&#xff0c;很多需要做CE,FCC,SRRC等认证&#xff0c;需要测试RF&#xff0c;像Realtek方案的Wi-Fi用到rtwpriv工具…...

Qwen2-VL-2B-Instruct模型压缩实战:使用量化工具减小部署体积与加速推理

Qwen2-VL-2B-Instruct模型压缩实战&#xff1a;使用量化工具减小部署体积与加速推理 最近在折腾一个边缘设备上的视觉项目&#xff0c;用上了Qwen2-VL-2B-Instruct这个多模态模型。模型效果确实不错&#xff0c;但原始大小接近8GB&#xff0c;推理速度也慢&#xff0c;在资源有…...

C++的std--ranges缓存性能

C的std::ranges缓存性能探析 在现代C编程中&#xff0c;std::ranges作为C20引入的重要特性&#xff0c;为算法和视图操作提供了更简洁、高效的表达方式。其性能表现&#xff0c;尤其是缓存友好性&#xff0c;直接影响实际应用的效率。本文将从多个角度探讨std::ranges的缓存性…...

别再傻傻分不清!一文讲透华为设备CRU与FRU区别及SmartKit工具的正确打开方式

华为设备维护进阶指南&#xff1a;CRU与FRU的深度解析及SmartKit高效应用 在数据中心运维和IT设备管理领域&#xff0c;华为设备的可靠性和性能一直备受认可。然而&#xff0c;即便是经验丰富的运维团队&#xff0c;在面对设备部件更换决策时&#xff0c;也常常陷入概念混淆和操…...

文墨共鸣模型作为Claude Code的替代或补充:代码生成与解释能力对比

文墨共鸣模型作为Claude Code的替代或补充&#xff1a;代码生成与解释能力对比 最近和几个做开发的朋友聊天&#xff0c;大家不约而同地提到了一个话题&#xff1a;现在AI写代码的工具这么多&#xff0c;到底哪个更靠谱&#xff1f;有人习惯用GitHub Copilot&#xff0c;有人偏…...

如何用OpenRocket实现专业火箭仿真?从设计到发射的全流程指南

如何用OpenRocket实现专业火箭仿真&#xff1f;从设计到发射的全流程指南 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 在航空航天工程领域&#xff0c;…...

如何用res-downloader解决多平台资源下载难题:从入门到精通

如何用res-downloader解决多平台资源下载难题&#xff1a;从入门到精通 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcod…...

GLM-4V-9B Streamlit交互设计解析:侧边栏上传+实时渲染+历史回溯实现

GLM-4V-9B Streamlit交互设计解析&#xff1a;侧边栏上传实时渲染历史回溯实现 1. 引言 你有没有遇到过这样的情况&#xff1a;拿到一个功能强大的AI模型&#xff0c;官方给的示例代码却在自己的电脑上跑不起来&#xff0c;要么是显存不够&#xff0c;要么是各种奇怪的报错&a…...