aspect-ratio 能防止 CLS,但仅在 iOS Safari 15.4+、Chrome Android 100+、Firefox Android 102+ 等新版浏览器中生效;旧版会忽略该属性导致容器塌缩或内容撑开,引发偏移。
aspect-ratio 能防止布局偏移(CLS),但前提是它真被浏览器执行了——否则元素会塌缩或按内容撑开,偏移照旧。
aspect-ratio?iOS Safari 15.4+、Chrome Android 100+、Firefox Android 102+ 才原生支持。低于这些版本(比如 iOS 15.2 或旧版安卓 WebView)会直接忽略该声明,不报错、也不 fallback,结果就是容器高度为 0 或由子内容撑开,引发明显 CLS。
@supports (aspect-ratio: 1/1) 包裹关键规则,做渐进增强,而不是无条件写死aspect-ratio 还是发生偏移?因为 aspect-ratio 只管「推导高度」,不管「是否溢出」或「是否填满」。它不会阻止子元素(尤其是 <img>)拉伸、撑破、或触发重排。
width: 100% 但没加 object-fit: cover → 图片横向拉伸,高度突破容器overflow: hidden 或 max-width → 子内容溢出后推挤后续元素height: 200px 和 aspect-ratio: 16 / 9 → height 会覆盖 aspect-ratio 计算,后者失效min-height 或 flex: 1 等弹性约束 → 浏览器优先满足 flex 规则,aspect-ratio 被降级为“建议值”单靠 aspect-ratio 不够,得和容器行为、子元素渲染层联动:
立即学习“前端免费学习笔记(深入)”;
width: 100%(或具体值)、aspect-ratio: 16 / 9、overflow: hidden
<img src="..." style="width: 100%; height: 100%; object-fit: cover;">,禁用 height: auto
padding-top: 56.25% + position: absolute 容器,但要额外加 top: 0; left: 0; 防止定位偏移width: max-content + aspect-ratio: 1 / 1 + font-variant-numeric: tabular-nums,比固定宽高更抗偏移最容易被忽略的点是:你写的 aspect-ratio 可能根本没生效——不是逻辑错,是浏览器版本卡在门槛之下。上线前务必查真机 UA 支持表,别信 caniuse 的“部分支持”描述。