现代商品卡片布局应优先使用 display: grid 或 display: flex,禁用 table;Grid 适合等宽自适应栅格,用 repeat(auto-fill, minmax(280px, 1fr)) + gap 实现响应式;Flex 适合横向滚动,需配合 overflow-x: auto 和 flex: 0 0 240px;图片需占位防抖动,aspect-ratio 或伪元素 fallback;避免 float 和 absolute 布局商品主结构。

直接用 Grid 是目前最干净的多列商品布局方案,尤其适合固定列数+自动换行的场景。关键不是写满 Flex 更适合横向滚动商品(比如“猜你喜欢”栏),或移动端首屏只排一列的极简场景。它的优势是逻辑直白、兼容性好,但跨行控制弱。 商品图异步加载时, 将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。 这两个属性在商品展示页里几乎没正当理由出现。用它们的结果通常是:换设备错位、内容重叠、SEO 抓取失败、屏幕阅读器读序混乱。 真正容易被忽略的是图片加载占位和 Grid 的 IE 兼容断点——很多团队测完 Chrome 就上线,结果 Windows 7 用户看到的是一堆堆叠的卡片。别假设用户都用新浏览器,降级方案得写进代码里,而不是靠“他们应该升级”。display: grid 或 display: flex 布局商品卡片,别碰 ——它语义错、响应式难、可访问性差,现代项目里纯属自找麻烦。
用
display: 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
用
display: 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%"),浏览器会按比例预留空间
float 和 position: absolute 别乱用
float 已被 flex 和 grid 全面替代;强行用它做多列,必须配 clear: both,稍有遗漏就塌陷position: absolute 只该用于脱离文档流的浮层(比如价格标签角标、售罄遮罩),绝不能用来排商品主结构position: relative,绝对定位的元素会相对于 viewport 定位,上线后可能飘到页面外边去
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










