CSS新特性:四个让你少写一半JS的功能

更新日期: 2026-05-03 阅读: 14 标签: 特性

2026年,CSS已经不是那个“只能改颜色”的工具了。下面这几个特性能让你少写很多JS,而且性能更好。


1. :has() — 终于能选中父元素了

以前想根据子元素状态改变父元素的样式,只能靠JS。现在不用了。

场景:表单校验时,输入框的父容器变红

/* 子元素input不合法,父元素边框变红 */
.form-item:has(input:invalid) {
  border: 1px solid red;
}

不需要监听事件,不需要操作classList,CSS自己就能搞定。

浏览器支持:Chrome、Firefox、Safari都已支持。


2. Container Queries — 组件级响应式

以前响应式靠@media,是根据屏幕宽度决定样式。但组件可能被放在不同的容器里,屏幕宽不一定等于组件宽。

现在用@container,根据父容器宽度来决定样式:

.card-wrap {
  container-type: inline-size;
}

@container (min-width: 400px) {
  .card {
    display: flex; /* 容器够宽就变横排 */
  }
}

同一个组件,放在宽容器里是横排,放在窄容器里自动变竖排,完全不用改代码。


3. Subgrid — 嵌套布局对齐不再靠猜

做卡片列表时经常遇到这个问题:每张卡片的标题、图片、价格高度不一样,排成一行后参差不齐。

.product-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto auto auto; /* 三行:图片、标题、价格 */
}

.product-card {
  display: grid;
  grid-row: span 3;
  grid-template-rows: subgrid; /* 继承父网格的行定义 */
}

加了subgrid,所有卡片的标题行、价格行会自动对齐,不用写任何JS,也不用hack式的min-height。


4. Scroll-Driven Animations — 滚动动画不卡了

以前做“滚动到某个元素时淡入”的效果,要监听scroll事件加上IntersectionObserver,代码一大堆,还容易卡顿。

@keyframes fade-up {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}

.section {
  animation: fade-up 0.6s ease both;
  animation-timeline: view(); /* 绑定到滚动视口 */
  animation-range: entry 0% entry 60%; /* 进入视口时触发 */
}

这个动画运行在合成器线程上,不占主线程,比JS方案流畅很多。

Chrome 115以上支持,Safari和Firefox正在跟进。


各特性支持情况

特性解决的问题可用性
:has()父元素响应子元素状态全浏览器 ✅
Container Queries组件级响应式全浏览器 ✅
Subgrid嵌套网格对齐全浏览器 ✅
Scroll-Driven Animations滚动动画Chrome ✅

前三个现在就可以在生产环境直接用,最后一个可以在新项目里尝试。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13747

相关推荐

Html5、Css3、ES6的新特性

Html5的新特性语义化标签:有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重。表单新特性,多媒体视频(video)和音频(audio)

Js的用途和特性

JavaScript 最初的目的是为了“赋予网页生命”。这种编程语言我们称之为脚本。它们可以写在 HTML 中,在页面加载的时候会自动执行。脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。

Angular 8的新特性介绍

在今天早些时候Angular团队发布了8.0.0稳定版。其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能。下面是我对8.0.0一些新功能的简单介绍,希望可以帮助大家快速了解新版本

Js即将到来的3个新特性

Optional Chaining(可选链式调用);Nullish coalescing(空值合并);Pipeline operator(管道运算符)通过三个函数对字符串进行处理;

CSS新特性contain,控制页面的重绘与重排

contain 属性允许我们指定特定的 DOM 元素和它的子元素,让它们能够独立于整个 DOM 树结构之外。目的是能够让浏览器有能力只对部分元素进行重绘、重排,而不必每次都针对整个页面。

ES2019 新特性汇总

最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~另外之前也整理了 《ES6/ES7/ES8/ES9系列》,可以一起看哈。

ES9(2018)新特性:异步迭代、Promise.finally、Rest/Spread等

ES9是ECMA协会在2018年6月发行的一个版本,因为是ECMAScript的第九个版本,所以也称为ES9。本篇文章介绍ES2018(ES9)的新特性,来看看怎么使用它们。

解密HTTP/2与HTTP/3 的新特性

HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。

十个超级实用的 JS 特性

你可能刚上手 JavaScript,或者只是曾经偶尔用过。不管怎样,JavaScript 改变了很多,有些特性非常值得一用。 这篇文章介绍了一些特性,在我看来,一个严肃的 JavaScript 开发者每天都多多少少会用到这些特性

ES6新特性--var、let、const

var不存在块级作用域,具有变量提升机制。 let和const存在块级作用域,不存在变量提升。在同一作用域内只能声明一次。const在声明时需要赋值且无法修改,但如果常量是对象,则对象的属性可以修改。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!