现代 CSS 新增了一些函数和属性,能够替代一整类媒体查询和 JavaScript 的取巧做法。其中最突出的有:
clamp() — 流式、有界的取值
css
h1 { font-size: clamp(1.5rem, 4vw, 3rem); }
/* │ │ └── maximum (never bigger than 3rem) */
clamp(min, preferred, max) 提供流式排版/间距,它随视口平滑缩放但始终保持在边界之内——用一行代码就替代了好几个断点的 font-size 媒体查询。
.video { aspect-ratio: 16 / 9; width: 100%; } /* height auto-computed to keep 16:9 */
.avatar { aspect-ratio: 1; } /* perfect square at any width */
在此之前,要保持一个响应式的 16:9 盒子需要用到臭名昭著的 padding-bottom: 56.25% 取巧做法。现在只需一条声明——而且它会在图片加载前预留空间(有利于 CLS)。
.container { width: min(90%, 1200px); } /* whichever is SMALLER → fluid but capped */
.box { padding: max(1rem, 3vw); } /* whichever is LARGER → a minimum floor */
min()/max() 取多个值中较小/较大的那个,让一个属性无需媒体查询就能响应式(例如"宽 90%,但永不超过 1200px")。
.card { display: grid; grid-template-rows: subgrid; grid-row: span 3; }
subgrid 让嵌套网格继承其父级的轨道线,从而使跨越不同卡片的元素(标题、正文、按钮)能在共享的行上完美对齐——这在以前如果不固定高度是无法实现的。
.flex { display: flex; gap: 1rem; } /* gap now works in flexbox, not just grid */
这些特性消除了长期以来的取巧做法:clamp()/min()/max() 替代了一大堆用于流式尺寸的媒体查询,aspect-ratio 替代了 padding 取巧做法并防止布局偏移,而 subgrid 解决了跨组件对齐的问题。
它们让响应式、按比例的布局变得极大地简化且更加健壮——现代 CSS 以声明式的方式做到了过去需要 JS 或脆弱技巧才能完成的事情。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠