2025 年 CSS 年度调查报告亮点速览

257 阅读5分钟

近日,「State of CSS 2025」年度调查报告公布。

这份报告收集了全球数万名开发者的真实使用经验和反馈,堪称是 Web 开发领域的“年度风向标”。

本篇我们盘点下这份报告的亮点部分。

1. 使用率最高的功能是 :has()

在调查的所有功能中,**:has()**是使用率最高也是最受欢迎的功能。

想必大家已经很熟悉了,它是一个功能非常强大的伪类,可以实现类似“父选择器”和“前面兄弟选择器”的功能。

举个简单的例子,下面的 CSS 代码表示如果 <a> 元素里面有 <img> 元素,则这个 <a> 元素就会匹配。

:has(img) {
  display: block;
}

我们可以使用这个选择器轻松区分是文字链接还是图像链接,并设置不同的 CSS 样式。

2. 使用率第二高的功能是 aspect-ratio

这个 CSS 属性允许你定义元素盒子的宽高比。

这意味着即使父容器或视口大小发生变化,浏览器也会调整元素的尺寸以保持指定的宽高比。

比如我们将一张图片设置为 3/2 宽高比:

img {
  aspect-ratio: 3/2;
}

3. 使用率最低的是 sibling-count 和 sibling-index

记得以前实现列表项交错动画时,要手动给每个元素设置不同的延迟吗?

现在,用 sibling-index() 一行代码就能搞定!

li {
  transition: opacity 0.3s ease;
  transition-delay: calc((sibling-index() - 1) * 100ms);
}

这个函数会自动获取元素在兄弟节点中的位置(从 1 开始计数),通过简单的计算就能实现流畅的交错动画效果

如果再搭配 @starting-style,连入场动画都能轻松搞定:

li {
  transition: opacity 0.3s ease;
  transition-delay: calc((sibling-index() - 1) * 100ms);

  @starting-style {
    opacity: 0;
  }
}

实现效果如下:

之所以使用率最低,可以理解,因为浏览器支持还比较新。

4. 受欢迎程度第二高的功能是 Subgrid

Subgrid 表示子网格,它并不是一个 CSS 属性,而是 grid-template-columns 和 grid-template-rows 属性支持的关键字,其使用的场景需要外面已经有个 Grid 布局。

什么时候会用到 Subgrid 呢?

举个例子,这是一个布局效果:

你会发现,标题字数不一样,内容字数不一样,导致底部很难对齐。

然而我们想要的效果是这样的:

此时就可以用到 Subgrid,使用示例如下:

.wrapper {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

.item {
  grid-row: 1 / 4;
  display: grid;
  grid-template-rows: subgrid;
}

5. 认知度增长最高的是 light-dark()

不知道你是否实现过网站的浅色和深色主题:

:root {
  /* 默认浅色主题 */
  --text-heading: #000;
  --text-body: #212121;
  --surface: #efefef;

  @media (prefers-color-scheme: dark) {
    /* 暗色主题 - 第一遍 */
    --text-heading: #fff;
    --text-body: #efefef;
    --surface: #212121;
  }
}

.dark-theme {
  /* 暗色主题 - 又写一遍! */
  --text-heading: #fff;
  --text-body: #efefef;
  --surface: #212121;
}

同样的颜色写两遍,一个给媒体查询(自动切换),一个给切换按钮。

改一次要改两个地方,烦死了!

现在使用 light-dark() 轻松实现!

:root {
  /* 跟随系统偏好 */
  color-scheme: light dark;

  /* 一次定义,自动切换 */
  --text-heading: light-dark(#000, #fff);
  --text-body: light-dark(#212121, #efefef);
  --surface: light-dark(#efefef, #212121);
}

就这么简单!系统是浅色就用第一个,暗色就用第二个。

6. 评论最多的功能是 line-clamp,多是负面评价

CSS 属性 line-clamp 用于将容器的内容限制为指定的行数,也就是我们常实现的内容多时显示省略号的效果。

举个例子:

p {
  width: 300px;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

效果如下:

之所以被大家吐槽,多是因为技术局限性问题,比如:

  • 能限制行数,无法精确控制高度
  • 浏览器兼容性还不够好
  • 与动态内容配合困难:当文本内容长度不确定时,难以准确控制显示效果

当我们实际使用 line-clamp 的时候,还要配合一系列属性比如 display、-webkit-box-orient、overflow、text-overflow,这种组合方案既复杂又不够语义化。

7. 结论

CSS 这些年无疑在快速的发展中,而人们对 CSS 的满意度也在持续攀升。

引用报告中的一句话:

“如果说 2025 年的主题是稳定不可能之事,那么 2026 年或许是实现期待已久的梦想之年。”

对于热爱 CSS 的人来说,现在正是尝试、学习并参与塑造未来发展方向的最佳时机。

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的“网页版朋友圈”,关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

新的一年,如果你想快速改变自己,欢迎加入我的知识星球:“冴羽·前端大佬成长之路”,10 年工作总结、100+ 篇精华主题、70W 字原创内容,带你升级认知、重构生活、建立知识管理系统、通关面试、引领职场。用一年时间,实现十倍成长,一鸣惊人。