推荐用 grid 实现等宽自适应商品栅格,核心是 grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) 配合 gap 控制间距;flex 适用于横向滚动或单列场景,需注意兼容性与 margin 处理;图片抖动须通过 aspect-ratio、伪元素撑高或宽高属性预防。

直接用 Grid 是目前最干净的多列商品布局方案,尤其适合固定列数+自动换行的场景。关键不是写满 Flex 更适合横向滚动商品(比如“猜你喜欢”栏),或移动端首屏只排一列的极简场景。它的优势是逻辑直白、兼容性好,但跨行控制弱。 商品图异步加载时, 真正容易被忽略的是图片占位和 IE11 兼容路径——前者影响用户体验,后者一旦漏掉,上线后可能直接白屏;而 display: grid 或 display: flex 布局商品卡片,别碰 ——它语义错、响应式难、可访问性差,现代项目里纯属自找麻烦。
用
grid 实现等宽自适应商品栅格grid-template-areas,而是靠 repeat(auto-fill, minmax()) 动态生成列。
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)),最小列宽 280px,超出就新增一列gap: 16px,比给每个 .product 加 margin-bottom 更可靠(避免父子 margin 合并).product img { height: 180px; object-fit: cover; },防止拉伸变形auto-fill 和 minmax,如需兼容,得 fallback 到 flex-wrap + flex-basis
用
flex 做横向滚动或单列列表
display: flex + overflow-x: auto + white-space: nowrap(否则换行)flex: 0 0 240px(不缩放、不增长、固定宽),再加 margin-right: 12px
margin-right 会露白边?用 :last-child { margin-right: 0 } 或更稳妥的 gap(但 Safari 14.1 以下不支持 flex gap)scroll-behavior: smooth 提升滚动体验图片加载导致布局抖动怎么防
高度为 0,卡片突然塌陷,用户正在滑动就会跳一下。这不是 CSS 能解决的,得从 HTML 结构入手。
.product 设固定 aspect-ratio,比如 aspect-ratio: 3/4(Chrome 103+、Firefox 98+ 支持).product::before { content: ""; display: block; padding-top: 133%; },再把图片设为 position: absolute
上写 width 和 height 属性(如 width="300" style="max-width:90%"),浏览器会按比例计算占位table 布局看似简单,实际维护成本远高于初期省下的那几行代码。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











