011.Grid auto-fill & auto-fit

出处:掘金

原作者:前端九哥


CSS 布局(Flex & Grid)

只用两行 CSS,就能让卡片、图片、内容块自动适应各种屏幕宽度,彻底摆脱复杂的媒体查询!秘诀就是 CSS Grid 的 auto-fill 和 auto-fit

屏幕自适应.webp

基础概念

假设有这样一个需求:

只需在父元素加两行 CSS 就能实现:

/* 父元素 */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

/* 子元素 */
.item {
  height: 200px;
  background-color: rgb(141, 141, 255);
  border-radius: 10px;
}
  1. grid-template-columns
    • 作用:定义网格容器里有多少列,以及每列的宽度。
  2. repeat(auto-fit, ...)
    • repeat 是个重复函数,表示后面的模式会被重复多次。
    • auto-fit 是一个特殊值,意思是:自动根据容器宽度,能放下几个就放几个,每列都用后面的规则
      • 容器宽度足够时,能多放就多放,放不下就自动换行
  3. minmax(200px, 1fr)
    • minmax 也是一个函数,意思是:每列最小 200px,最大可以占 1fr(剩余空间的平分)
    • 具体来说:
      • 当屏幕宽度很窄时,每列最小宽度是 200px,再窄就会换行
      • 当屏幕宽度变宽,卡片会自动拉伸,每列最大可以占据剩余空间的等分(1fr),让内容填满整行

综合起来 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 这行代码的意思就是:

auto-fill Vs. auto-fit

auto-fill

尽可能多地填充列,即使没有内容也会“占位”

auto-fit

自动适应内容,能合并多余空列,不占位

直观对比

假设容器宽度能容纳 10 个 200px 的卡片,但你只放了 5 个卡片:

auto-fill Vs. auto-fit.webp

属性 空轨道 内容拉伸 适用场景
auto-fill 保留 固定列数、占位网格
auto-fit 折叠 流式布局、拉伸填充