CSS 正在接管交互,前端工程师该怎么看这件事

你有没有过这种感觉:本来该写在 JS 里的交互逻辑,现在 CSS 慢慢都能做了。

不是 CSS 变强了这么简单,而是浏览器把“状态监听”和“动效触发”这两块能力,正式从 JavaScript 往 CSS 迁移了。对 UI 工程师来说,这意味着交互层和表现层正在重新分工。

CSS 已经会“监听”了

以前我们需要 JS 监听 focus、hover、checked、focus-within,现在这些状态 CSS 自己就能接住。:focus-within 和 :has() 组合起来,甚至可以完成原来必须遍历 DOM 才能做的父子联动。

真正值得关注的,不是“能不能写”,而是“值不值得交出去”。如果只是样式切换,交给 CSS;如果状态还要触发接口请求、埋点、权限校验,那 JS 仍然是必要的。

scroll-driven animations 已经能用

如果你还在用 IntersectionObserver + classList 做滚动动画,现在可以考虑换成原生 CSS 方案了。scroll-driven animations 让动画进度和滚动位置直接绑定,而 scroll-triggered animations 则更进一步,允许在进入/离开视口时触发一次有固定时长的动画。

这两者的关键区别是:前者像视频进度条,滚动到哪里动画就到哪里;后者像开关,满足条件就播放一次。搞混这个,很容易写出“滚到底才动一下”的诡异效果。

对 UI 工程的影响

  • 交互状态和样式状态可以合并,减少 class 切换
  • 滚动动画不再需要 JS 计时器,主线程压力更小
  • 但要学会判断浏览器支持:生产环境里 Chrome 146+ 才有 scroll-triggered animations

结论

CSS 不是要替代 JavaScript,而是要把“纯表现层”的状态监听交回给样式层。UI 工程师的核心能力,从“会用 JS 写交互”变成“知道边界在哪里”:什么时候交回 CSS,什么时候必须留在 JS。

评论区

0 条评论

登录后可评论。

查看完整榜单
查看完整榜单
查看完整榜单