十多年来,浏览器新增的css属性哪些能用了?

176 阅读9分钟

盘点一下十来年间,浏览器新增的css属性哪些能用了。

背景

对于浏览器来说,自从html5,css3,es6 增加了许多的标准和api,想当年刚学前端的时候,那时候,h5什么的也都刚开始流行,但工作中对于css其中的新属性用的其实不多,刚开始的时候,甚至连flex布局都不让用,因为需要考虑到用户的旧设备的兼容。只有在做一些动画,缓动的时候用到。这种增加不影响正常功能,并增加一些效果也叫做“渐进式升级”。但是其实大部分属性都没法做到这种“渐进式升级”。只能采用兼容方案,也就是老式的写法。比如flex的替代方案就有各种各样的。

但是对于js来说,我们目前都可以用最新的es标准。因为可以使用 polyfill 或者 编译时做兼容的转移。只有少部分特性转移不了。

但是css恰恰相反,大部分新功能都是没法用类似的方式处理的。

从另一个角度讲,浏览器刚刚增加css某个属性的时候,恰恰是博主争先去写博客介绍的,因为都需要抢一下这个流量“热乎劲”。另外只有先写的才会先被看见,并且搜索引擎的抓取也是最多的,第二个人写的类似的介绍就没啥意思了。这样也导致了一个问题,就是这时候,恰恰是个不同浏览器对它兼容性最差的时候,大部分人都不会去实际使用这个,而选择兼容方案,比如用js各种计算。

这样即使后来新的浏览器版本慢慢普及了,我们也一时想不起来要用新的属性方便的实现。

今天2024,距离css3标准已经十多年了,下面咱们就来盘点一下,这些年来的好用的属性,兼容性都做的咋样了,是不是可以用了。

其实有些属性如果能用起来,无论是对浏览器提高性能,还是对于我们开发人员写代码都有很大帮助的~

浏览器占比只统计了chorme,firefox,safari 及其相同内核的浏览器。所以最高占比也只能达到 88.32 %。手机端的浏览器,qq,uc 等没法拿到版本数据,考虑到手机一般会自动更新 app,所以统一按 chrome 的活跃度最高内核版本来计算了。'

全面支持年份: 如果是全面支持时间在 2020 前,显示的是✅

当前列表中只选择了笔者自认为比较有用的属性,如果你还有更多的需要可以查看:脚本跑出的结果 caniuse-now ,里面的数据中更全面的。


常用 css 支持程度表格

序号属性名属性值简要说明链接浏览器占比全面支持年份
1all重置几乎所有属性MDN,规范188.24%
2animation-composition动画组合MDN,规范180.20%2023
3aspect-ratio让元素保持一定的宽高比MDN,规范184.76%2021
4auto规范184.76%2021
5backdrop-filter背景滤镜MDN,规范174.29%2024
6background-clip控制背景的绘制区域,可绘制到边框内MDN,规范1,规范288.28%
7text规范180.05%2023
8block-size根据元素的书写模式定义了元素块的横向或纵向尺寸。根据 writing-mode 的值,此属性对应于 width 或 height 属性。可以直接用于设置多行文字垂直居中效果MDN,规范1,规范287.81%
9fit-content87.71%2021
10max-content87.73%2019
11min-content87.73%2019
12color-scheme控制网页的颜色方案,light darkMDN,规范185.62%2022
13dark85.62%2022
14light85.62%2022
15normal85.62%2022
16only dark keyword84.54%2022
17only light keyword84.54%2022
18contain指示元素及其内容尽可能独立于文档树的其余部分。渲染计算限制为 DOM 子树而不是整个页面从而提供性能优势MDN,规范187.17%2022
19content规范187.17%2022
20inline-sizeMDN,规范182.08%2022
21layout规范187.17%2022
22none规范187.17%2022
23paint规范187.17%2022
24size规范187.17%2022
25strict规范187.17%2022
26styleMDN,规范187.15%2022
27content-visibility用于控制元素的内容是否应该被渲染,以及在渲染时是否应该预先生成。这可以用于提高性能, 原生的虚拟列表MDN,规范173.54%2024
28auto规范173.54%2024
29hidden规范173.54%2024
30visible规范173.54%2024
31dominant-baseline用于设置行内元素的基线对齐方式。如果 ui 设计师给了你不同字号的文字,要求他们的特定对齐,可以使用这个属性MDN,规范1,规范285.62%2020
32alphabetic规范185.62%2020
33auto规范185.62%2020
34central规范185.62%2020
35hanging规范185.62%2020
36ideographic规范185.62%2020
37mathematical规范185.62%2020
38middle规范185.62%2020
39filter滤镜, 实现模糊、颜色变化、阴影等效果MDN,规范188.05%
40gapflex, grid, 多列布局的间距MDN,规范187.90%
41Supported in Flex Layout规范185.37%2021
42Supported in Grid Layout规范187.67%2018
43Supported in Multi-column Layout规范187.34%2021
44grid网格布局MDN,规范187.90%
45image-orientation控制图片的方向。可以用于矫正手机相机横屏拍摄的图片方向MDN,规范185.67%2020
46from-image规范185.67%2020
47none规范185.67%2020
48inline-size同 block-size,但是是行内元素的宽高。可以用于多行文字的垂直居中效果MDN,规范1,规范287.81%
49fit-content87.71%2021
50max-content87.73%2019
51min-content87.73%2019
52line-break控制文本的换行方式。更好的控制中文的换行MDN,规范187.85%
53anywhere规范185.56%2020
54auto规范185.56%2020
55loose规范185.56%2020
56strict规范185.56%2020
57mask通过在特定点遮罩或剪切图像来隐藏元素(部分或全部)。可以用于实现弹幕效果,如果加上前缀 -webkit- 其实各个浏览器很早就支持了。MDN,规范179.72%2023
58object-fit控制img元素的填充方式MDN,规范188.21%
59contain规范188.21%2016
60cover规范188.21%2016
61fill规范188.21%2016
62none规范188.21%2016
63scale-down规范188.21%2016
64object-position控制img元素内部图片的位置MDN,规范188.21%
65offset沿定义路径对元素进行动画处理所需的所有属性MDN,规范186.31%2022
66outline轮廓线,不占用空间。可以用于实现点击高亮效果MDN,规范182.67%2023
67overscroll-behavior控制滚动到边界时的行为,根元素是不是要继续滚动MDN,规范186.24%2022
68auto规范186.24%2022
69contain规范186.24%2022
70none规范186.24%2022
71scroll-snap-type通过在对齐端口中设置对齐点强制的方向和严格性来选择将其加入滚动对齐。原生的轮播图效果MDN,规范187.77%2022
72block规范187.45%2020
73both规范187.45%2020
74inline规范187.45%2020
75none规范187.54%2020
76x规范187.45%2020
77y规范187.45%2020
78text-wrap控制文本的换行方式。有更多的换行方式MDN,规范177.49%2024
79balanceMDN,规范177.12%2024
80nowrapMDN,规范177.48%2024
81wrapMDN,规范177.48%2024
82transform变形MDN,规范1,规范288.25%
83has伪类选择器 has() 用于检查元素是否具有指定的选择器的特征。可以用于实现父元素的样式控制,或兄弟元素的样式控制MDN,规范182.73%2023
84not伪类选择器 not() 用于命中不匹配指定选择器的元素。MDN,规范188.29%
85Selector list argument85.46%2021
86is伪类选择器 is() 用于检查元素是否匹配指定的选择器。MDN,规范184.99%2021
87Support for forgiving selector listMDN,84.98%2021
88@container容器查询 @container,可以用于精细设置媒体查询下某些容器的样式MDN,规范182.06%2023

总结

总结一下,有几个很好用的我们业务开发过程中 或者 开发ui框架的时候真的可以用起来啦,比如:

  1. block-size 可以实现多行文本垂直居中width: fit-content配合 margin: auto实现水平居中。以前要设置父元素的样式才能实现的功能,现在在当前元素一行就搞定啦,写法更解耦了,也不用硬多一个元素来配合,提高性能。
  2. content-visibility 元素的虚拟列表,相比js 实现的,代码量更少,也能更好的支持每个元素高度不一致的情况。同时这个也支持渐进式升级。一些底层的表格库真的可以用起来了。
  3. contain 实现dom 独立渲染计算。在复杂的弹窗情景下能提高一些性能。

数据来源:

browser-compat-data

caniuse