纯 HTML 实现图文并排商品卡片|图文布局教程
2026/7/4 3:03:09 网站建设 项目流程

一、写在前面:图文并排布局适用场景

日常做网页、素材展示、游戏道具图鉴、商品清单、藏品相册,都会用到多张图文卡片横向并排、自动换行的布局。 过去老式方案用浮动 float,需要清除浮动、极易出现排版错乱;今天分享一套Flex 弹性布局实现的稳定图文并排方案,无需任何 JS、第三方框架,纯静态代码,零基础复制即用。 本次案例以三角洲高价值回收物资为展示素材,一行 4 张图文卡片,统一图片 + 名称 + 价格三层结构,排版规整、视觉干净,下面从效果、原理、代码逐段拆解讲解。

二、成品页面整体效果预览

  1. 页面整体:浅蓝底色,顶部居中大标题,所有图文卡片整体居中,页面宽度固定 1200px,不会无限拉伸;
  2. 并排规则:同一行横向摆放 4 张图文卡片,卡片之间均匀留白 15px;卡片数量超过 4 张时自动换行,第二行继续 4 列排布;
  3. 单张图文卡片内部结构(从上至下):
    • 统一 160×160 图片框,图片等比例完整展示不变形,背景浅灰填充留白区域;
    • 道具名称文字,固定两行高度,文字过多自动截断隐藏,不会撑开卡片打乱排版;
    • 红色加粗醒目价格,快速区分道具价值高低;
  4. 视觉细节:卡片白色底色 + 圆角,区分区块,柔和不刺眼,整体统一规范。

本次展示图文素材清单(按价值降序)

  1. 海洋之泪|2448.25 万
  2. 非洲之心|1248.42 万
  3. 复苏呼吸机|606.51 万
  4. ECMO|237.33 万
  5. 纵横|221.66 万
  6. 万金泪冠|219.65 万
  7. 坦克模型|214.21 万
  8. 曼德尔超算|202.90 万

三、图文并排核心技术原理(逐行拆解关键 CSS)

整套布局核心依靠Flex 弹性盒 + calc 百分比计算 + object-fit 图片适配三大技术实现稳定多列图文并排,每段代码作用详细说明:

1. 全局通用重置样式(* 选择器)

css

*{ margin:0; padding:0; box-sizing:border-box; font-family:"Microsoft YaHei",sans-serif; }
  • margin:0;padding:0:清除浏览器自带默认内外边距,避免不同浏览器排版差异;
  • box-sizing:border-box图文并排关键属性,元素宽高会包含内边距 padding、边框 border,不会出现卡片宽度溢出、挤掉下一行的 bug;
  • 统一字体:全页面微软雅黑,避免系统默认字体错乱。

2. 外层卡片容器.goods-box:实现横向并排 + 自动换行

css

.goods-box{ width: 1200px; margin: 0 auto; list-style: none; display: flex; flex-wrap: wrap; gap: 15px; }
  1. display: flex:开启弹性布局,容器内所有子 li 卡片默认横向并排,实现图文并排基础;
  2. flex-wrap: wrap:换行开关,一行放不下 4 张卡片时,自动换到下一行,无此属性卡片会全部挤在同一行压缩变形;
  3. gap: 15px:统一设置卡片横向、纵向间距,替代老式 margin,不会出现两端多余空白,排版更整洁;
  4. width:1200px;margin:0 auto:限制整体宽度并居中,不会铺满整个浏览器窗口;
  5. list-style:none:清除 ul 列表自带小黑点。

3. 单张图文卡片.goods-item:精准控制 4 列等分宽度

css

.goods-item{ width: calc(25% - 12px); background: #fff; border-radius: 6px; padding: 15px; text-align: center; }

重点讲解calc(25% - 12px)4 列等分计算公式:

  • 25%:一行 4 张卡片,每张理论占容器总宽度 1/4;
  • 减去 12px:容器 gap 卡片间距 15px,4 张卡片中间存在 3 个间隙,单张卡片分摊间隙宽度15*3/4≈12px
  • 作用:完美均分 4 列,卡片之间间隙均匀,不会出现最后一列卡片挤到下一行的排版崩坏问题; 其余样式:白色卡片底色、圆角柔和、内部 15px 内边距、所有图文居中对齐。

4. 图片适配样式:解决图文并排最常见痛点 —— 图片拉伸变形

css

.goods-item img{ width:160px; height:160px; object-fit:contain; background:#f9f9f9; border-radius:4px; }
  • 固定宽高 160px:统一所有图片展示尺寸,保证所有图文卡片高度一致;
  • object-fit:contain:图文展示必备属性,图片按原始比例缩放,完整显示全部内容,不会拉伸扭曲;图片比例和方框不匹配时,会在上下 / 左右留白,浅灰色背景填充留白区域,视觉统一;
  • 对比:默认 fill 会强行拉伸图片,cover 会裁切图片,展示道具图鉴优先使用 contain。

5. 文字防溢出样式:保证所有图文卡片高度统一

css

.goods-name{ font-size: 14px; color: #333; margin: 10px 0; height: 40px; line-height:20px; overflow:hidden; text-align:center; }
  • 固定高度 40px、行高 20px:强制名称最多显示两行文字;
  • overflow:hidden:文字超过两行直接隐藏,不会拉长卡片,破坏并排整齐度; 价格模块单独设置红色加粗,突出重点数据,区分图文层级。

四、完整可运行源码(复制保存 html 文件直接打开)

html

预览

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>商品列表</title> <style type="text/css"> *{ margin:0; padding:0; box-sizing:border-box; font-family:"Microsoft YaHei",sans-serif; } body{ background-color: aliceblue; padding: 30px; } .title{ text-align: center; font-size: 24px; margin-bottom: 20px; color: #333; } .goods-box{ width: 1200px; margin: 0 auto; list-style: none; display: flex; flex-wrap: wrap; gap: 15px; } .goods-item{ width: calc(25% - 12px); background: #fff; border-radius: 6px; padding: 15px; text-align: center; } .goods-item img{ width:160px; height:160px; object-fit:contain; background:#f9f9f9; border-radius:4px; } .goods-name{ font-size: 14px; color: #333; margin: 10px 0; height: 40px; line-height:20px; overflow:hidden; text-align:center; } .goods-price{ font-size:18px; color:#e2231a; font-weight:bold; text-align:center; } </style> </head> <body> <h2 class="title">三角洲回收物</h2> <ul class="goods-box"> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-14-51-065_com.ss.android.ugc.aweme_1774934214372edit.jpg"> <div class="goods-name">海洋之泪</div> <div class="goods-price">2448.25万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-14-48-676_com.ss.android.ugc.aweme_1774934224767edit.jpg"> <div class="goods-name">非洲之心</div> <div class="goods-price">1248.42万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-14-59-093_com.ss.android.ugc.aweme_1774934180519edit.jpg"> <div class="goods-name">复苏呼吸机</div> <div class="goods-price">606.51万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-15-11-088_com.ss.android.ugc.aweme_1774934134717edit.jpg"> <div class="goods-name">ECMO</div> <div class="goods-price">237.33万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-14-53-693_com.ss.android.ugc.aweme_1774934202803edit.jpg"> <div class="goods-name">纵横</div> <div class="goods-price">221.66万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-14-56-519_com.ss.android.ugc.aweme_1774934192052edit.jpg"> <div class="goods-name">万金泪冠</div> <div class="goods-price">219.65万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-15-05-155_com.ss.android.ugc.aweme_1774934158545edit.jpg"> <div class="goods-name">坦克模型</div> <div class="goods-price">214.21万</div> </li> <li class="goods-item"> <img src ="img/Screenshot_2026-03-31-13-15-07-541_com.ss.android.ugc.aweme_1774934145534edit.jpg"> <div class="goods-name">曼德尔超算</div> <div class="goods-price">202.90万</div> </li> </ul> </body> </html>

五、自定义修改教程(图文并排灵活调整)

1. 增减图文卡片

复制 / 删除完整<li class="goods-item">...</li>整块代码,新增素材直接复制模板,布局自动适配,无需修改样式。

2. 修改并排列数(核心修改 calc 宽度)

  • 3 列并排:.goods-item宽度改为calc(33.3% - 10px)
  • 2 列并排:.goods-item宽度改为calc(50% - 8px)
  • 1 列单列图文:.goods-item宽度改为100%

3. 图片相关调整

  1. 修改图片尺寸:调整 img 内 width、height 数值;
  2. 图片铺满裁切:把object-fit:contain替换为object-fit:cover
  3. 更换图片:修改 img 标签内 src 路径,本地图片放入 img 文件夹对应路径即可。

4. 配色与页面美化

  • 页面背景:修改 body 内background-color色值;
  • 卡片底色:修改.goods-item的 background;
  • 价格颜色:修改.goods-price内 color,可自定义蓝色、黑色等。

5. 卡片间距调整

修改.goods-boxgap数值,数值越大卡片间隙越宽。

六、方案优势总结(对比老式图文布局)

  1. 兼容性强:所有现代浏览器完美支持,无浮动清除、排版错乱问题;
  2. 拓展性高:无限新增图文卡片,自动换行,列数一键切换;
  3. 图片处理完善:统一尺寸 + 等比例显示,彻底解决图文排版图片变形;
  4. 轻量化:纯 HTML + 内嵌 CSS,无外部依赖,本地保存即可打开,适合做素材图鉴、博客展示页面;
  5. 结构清晰:图文分层规范,文字防溢出,所有卡片高度统一,视觉整齐。

七、结尾

这套 Flex 图文并排卡片布局是前端最通用的素材展示方案,不管是游戏道具、商品、摄影图集、藏品清单都能直接套用。代码注释清晰、修改门槛极低,新手可以按照上文分段讲解逐行理解布局逻辑,也可以直接复制源码修改素材快速产出图文展示页面。 如果需要适配手机端、增加 hover 悬浮效果、价格排序功能,都可以在此基础上二次拓展。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询