本文介绍的内容大多数整理于\@Bramus[1]发表的CSS in 2022[2],有些在其基础上进行了完善,并增加了相应的实践例子。接下来让我们逐个来了解下吧。

容器查询(Container Queries)

image.png

介绍

容器查询@container类似于媒体查询@media,区别在于查询所依据的对象不同。媒体查询依据的是浏览器的视窗大小,容器查询依据的是元素的父元素或者祖先元素的大小。

有关容器查询的属性一共有三个,分别是container-typecontainer-namecontainer

container-type:标识一个作为被查询的容器,取值范围为sizeinline-sizeblock-sizestylestate

container-name:被查询的容器的名字

containercontainer-typecontainer-name的简写

使用方法

首先需要使用container-type或者container属性指定一个元素作为被查询的容器。然后使用@container进行容器查询。

<template><div id="app"><div><button @click="add" id="add">+</button><button @click="sub" id="sub">-</button></div><div class="demo"><a>我的背景色会随着demo元素的宽度而变化</a></div></div>
</template><style>
.demo {width: 200px;height: 200px;background: red;container: inline-size;
}@container (inline-size > 300px) {a {background: green;}
}
</style>
复制代码

当父元素的宽度为200px的时候,背景色是红色的。

image.png

当父元素的宽度增加到400px的时候,@container查询起到了效果,文字的背景色会变成绿色的。

image.png

详细的关于每个属性的取值及具体含义,可以参考这里[3]

浏览器支持情况

image.png

实践

使用chrome浏览器,需要手动在chrome://flags页面开启Enable CSS Container Queries设置。

https://code.juejin.cn/pen/7096467334268715021

级联层(Cascade Layers)

介绍

有时候当我们想要覆盖组件原来的样式来应用我们自定义的样式时,一般情况下我们会采用优先级更高的样式名来进行覆盖(或ID选择器或嵌套很多层),有时候又不得不应用!important ,这样很容易造成样式的混乱,不好管理。

级联层的诞生就是为了解决上述问题,它可以让CSS样式按照我们定义好的级联顺序展示,起到控制不同样式间的优先级的作用。

使用方法

通过@layer可以定义一个级联层。如下我们就定义了一个名字为A的级联层。

<template><div id="app">hello world</div>
</template><style>#app {width:100px;height: 100px;}// 创建一个名为 A 的级联层@layer A {div {background-color: red;}}
</style>
复制代码

当有多个级联层的时候,我们可以先把所有级联层的名字起好,然后再一一补充规则。

@layer A, B, C;@layer A {div {background-color: red;}
}@layer B {#app {background-color: blue;}
}@layer C {div {background-color: green;}
}
复制代码

多个级联层的优先级顺序为越写在后面的优先级越高,所以级联层C拥有最高的优先级,即使我们在级联层B中使用了ID选择器。所以最后div将展示绿色的背景色。

image.png

浏览器支持情况

image.png

实践

https://code.juejin.cn/pen/7093816225150533640

颜色函数(Color Functions)

CSS Color Module Level 5[4]新增了两个有关颜色的函数:color-mix() 和 color-contrast() ,并且扩展了之前存在的其他颜色函数(例如rgb()hsl()hwb()等)的相关语法。

之前我们定义一个颜色,需要明确的指定每一个通道的绝对颜色。新的规范允许我们首先定义一个基础色,然后在它之上进行相对颜色的变换。比如:

--accent: lightseagreen;
--complement: hsl(from var(--accent) calc(h + 180deg) s l);
复制代码

lightseagreenhsl(177deg 70% 41%),因此变换后的hsl(357deg 70% 41%)

color-mix()

color-mix()可以在给定的色彩空间内将两个颜色混合成一个。

它接收3个参数,第一个参数为指定的插值方法,第二个和第三个参数为需要混合的颜色值。

color-mix(in lch, purple 50%, plum 50%)
color-mix(in lch, purple 50%, plum)
复制代码

color-contrast()

color-contrast() 用来查找颜色列表中与给定的颜色(一般为背景色)相比较,对比度最高的颜色并将其输出。

在语法上,通过关键字vs来区分需要进行对比的基础颜色与颜色列表,如果有目标对比度阈值设置,则通过关键字to与颜色列表进行分隔。(目标对比度阈值用来控制对比值的最小范围,如果存在,会选取第一个超出该阈值的颜色输出,即使它不是列表中对比度最高的那个。)

在计算对比度时,会把所有的颜色都转换到CIE XYZ[5]色彩空间。然后通过以下公式来计算最终的对比度:

contrast = (Yl + 0.05) / (Yd + 0.05),其中Yl为列表中颜色的明度,Yd为基础色的明度
复制代码

举例

讲了这么多概念,下面我们来举个例子:

color-contrast(wheat vs tan, sienna, #d2691e, darkgreen, maroon to AA-large)
复制代码

上述代码将wheattansienna#d2691edarkgreenmaroon进行对比度的比较,输出第一个超出AA-large(常量3)的颜色。

具体的比较方法如下:

wheat (#f5deb3), the background, has relative luminance 0.749
tan (#d2b48c) has relative luminance 0.482 and contrast ratio 1.501
sienna (#a0522d) has relative luminance 0.137 and contrast ratio 4.273
#d2691e has relative luminance 0.305 and contrast ratio 2.249
darkgreen (#006400) has relative luminance 0.091 and contrast ratio 5.662
复制代码

通过计算可以看出,darkgreen是对比度最高的颜色,但是我们有to AA-large的限制,所以会输出sienna,因为sienna是第一个超出AA-large(常量3)的。

浏览器支持情况

image.png

image.png

伪类选择器:has()

介绍

:has()选择器也可以叫做父类选择器,它接受一个选择器组作为参数。有了它,我们可以给有匹配子元素的父类应用一些样式。例如:

a:has(span) // 只会匹配包含 span 子元素的 a 元素:
复制代码

浏览器支持情况

image.png

实践

使用chrome浏览器,需要手动在chrome://flags页面开启Experimental Web Platform features设置。

https://code.juejin.cn/pen/7094638836466221069

accent-color

介绍

accent-color属性可以在不改变浏览器默认表单组件基本样式的前提下重置表单组件的颜色。目前支持的HTML元素有:

  • <input type=”checkbox”>

  • <input type=”radio”>

  • <input type=”range”>

  • <progress>

浏览器支持情况

image.png

实践

https://code.juejin.cn/pen/7085562391907270690

媒体查询(Media Query Ranges)

介绍

媒体查询不是一个新概念,这次在语法上进行了优化。原来通过max-widthmin-width来实现的现在可以通过数学运算符>=<=来实现。相比与原来的写法,新的语法更容易理解一些。比如要实现750px以下屏幕的样式,原来需要应用@media (max-width: 750px),现在可以直接写成@media (width <= 750px)

同样,数学运算符的写法也适用于上面介绍的容器查询@container中。

举例

// 原写法
@media (max-width: 750px) {…
}
@media (min-width: 750px) { …
}
@media (min-width: 375px) and (max-width: 750px) { …
}
// 新写法
@media (width <= 750px) {…
}
@media (width >= 750px) { …
}
@media (375px <= width <= 750px) { …
}
复制代码

结语

以上就是2022年已经新增或者即将新增的CSS新特性,小伙伴们对哪个最感兴趣呢?快去自己实践一下吧~

关于本文

来自:阳呀呀

https://segmentfault.com/a/1190000041926813

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

【CSS】1447- 2022年你不知道的CSS新特性相关推荐

  1. ECMAScript 2022 会有哪些新特性?

    点击下方星标本公众号,实用前端技术文章及时了解 ECMAScript 规范每年都会更新一次,正式标准化 JavaScript 语言的 ECMAScript 的下一次年度更新将在 2022 年 6 月左 ...

  2. 【HTML/CSS】HTML5和CSS3的新特性

    目录 1 HTML5 1.1 语义化标签 1.2 画布canvas 1.3 新增API 1.3.1 拖拽 1.3.2 地理定位 1.4 音视频Audio/Video 1.5 Web存储 1.6 Web ...

  3. 2022 年最受瞩目的新特性 CSS @layer 到底是个啥?

    步入 2022,CSS 的新特性层出不穷,而最近在 CSS 圈最受瞩目的新特性,非 CSS @layer 莫属. 本文,将用最简洁的语言,快速让读者们搞懂,到底什么是 CSS @layer 新规范. ...

  4. 大漠老师:2022 年的 CSS,到底有哪些特性

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 关于2022年的CSS新特性,自己之前也有篇原创,CSS 的未来:Cascade Layers (CSS @layer),专门是在介绍@l ...

  5. 【CSS】1258- 2022年你不应该错过的CSS新特性

    对于CSS来说,2022年是非常值得期待的一年,大量的新功能即将出现,有些已经开始登录浏览器,有些可能会在2022年获得浏览器的广泛支持.下面就来看看2022年有哪些值得期待的 CSS 新特性吧! 一 ...

  6. 2017年要学习的三个CSS新特性

    这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东西要学习.尽管CSS有很多新的特性, ...

  7. css grid 自动高度_2020年你不应该错过的CSS新特性(二)

    茫茫人海中与你相遇 相信未来的你不会很差 作者:阿里巴巴淘系技术 来源:https://juejin.im/post/6886258269137043464 Web排版 先看布局上将会有的一些新特性: ...

  8. css怎么设置圆角背景,CSS新特性:圆角边框多栏Gird布局背景设置

    到现在为止,只有一些已经工作的CSS3特性. 到现在为止,只有一些已经工作的特性,他们中的一些如下: 圆角 从web2.0开始,开始流行使用圆角,如果你不使用圆角,你的网站可能不会被列入web2.0网 ...

  9. css之“css3的新特性”

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

最新文章

  1. C语言求随机两个向量乘积,用C语言生成2个随机的矩阵并进行乘法运算
  2. Toad Oracle 本地/远程数据库导入/导出 数据库备份
  3. vue 请求多个api_vue 一个input同时请求两个接口
  4. swift x输入流_Swift 中不同窗体的切换和传递数据 (segue 的用法)
  5. 把网站图片和php程序分离,我的图片服务器和WEB应用服务器相分离的简单方案
  6. BW报表igs服务配置解决中文显示问题
  7. python支付宝蚂蚁森林_Python教你迅速成为“蚂蚁森林排行榜”第一名
  8. 为个人博客添加文章评论功能
  9. 电子凸轮应用追剪算法详细图解(附PLC完整源代码)
  10. 有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
  11. 关于C#如何引用Microsoft.Office.Interop.Excel
  12. codeforces 300B切题记录
  13. nvim 的编译与安装
  14. 《提问的智慧》读后感
  15. 最新联系腾讯客服人工方法
  16. 离散数学_九章:关系(2)
  17. mybatis批量入库
  18. Linux无线网络已经禁用,无线网络启用后还显示已禁用怎么办
  19. 家有妙招-Dropbox网络硬盘
  20. 逆变电路之单极性调制与双极性调制

热门文章

  1. Java8 Signature探秘
  2. 【附源码】计算机毕业设计java智能导诊系统设计与实现
  3. 计算机毕业设计(附源码)python智能导诊系统
  4. 15款音视频开发工具,拒绝加班熬夜
  5. http://you.video.sina.com.cn/b/9405481-1342156411.html
  6. `QStyle`自定义重绘`QSlider`控件
  7. 暑假训练-义乌(7.8-7.15)
  8. 使用js生成登录验证码
  9. 上海交大计算机科学技术导师介绍,上海交大电子信息与电气工程学院研究生导师介绍:申丽萍(计算机应用研究所)...
  10. 前端设计师常用的一些基础工具素材合集