商品卡片布局:别再陷入表格、浮动和绝对定位的泥潭 先抛结论:现代商品卡片布局,直接用 display: grid 或 display: flex,别碰 。 为什么? 在语义上根本不适用于内容展示——它响应式困难、可访问性差,在现代项目里用它做商品布局,纯粹是自找麻烦。 用 display: grid
先抛结论:现代商品卡片布局,直接用 为什么? 长期稳定更新的攒劲资源: >>>点此立即查看<<< Grid 是目前最干净的多列商品布局方案,特别适合固定列数搭配自动换行的场景。关键在于,不要写满 Flex 更适合横向滚动商品,比如“猜你喜欢”那一栏,或者移动端首屏只排一列的极简场景。它的优势是逻辑直白、兼容性好,但跨行控制较弱,这点需要心里有数。 商品图异步加载时, 这两个属性在商品展示页里几乎找不到正当理由使用。用它们的结果通常是:换设备错位、内容重叠、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" height="400"),浏览器会按比例预留空间——这是最简单、兼容性最好的办法。float 和 position: absolute 别乱用
float 已经被 flex 和 grid 全面替代,强行用它做多列,必须配合 clear: both,稍有遗漏就会塌陷。position: absolute 只该用于脱离文档流的浮层,比如价格标签角标、售罄遮罩——绝不能用来排商品主结构。position: relative,绝对定位的元素会相对于 viewport 定位,上线后可能飘到页面外边去,这种情况在测试阶段很难发现。
相关攻略
更多
同类更新
更多
热游推荐
更多
下载
下载
下载
下载
下载