响应式产品卡片需用语义化html(article、img、h3、button)与纯css flex布局,固定4:3图片宽高比、object-fit:cover、rem/em间距、white-space:nowrap按钮,并通过srcset/sizes适配多屏。

用纯 HTML + CSS 实现响应式产品卡片,不需要框架
直接上手就能用,不依赖 Bootstrap 或 Tailwind,适合嵌入现有页面或快速原型。核心是语义化结构 + 简洁 flex 布局,避免用 <table> 或绝对定位硬凑。
<p>关键点:卡片容器用 <code><article></article>(比 <div> 更语义),图片用 <code><img> 并设 loading="lazy",价格和按钮用 <span></span> 和 <button></button> 而非 <p></p> 堆砌。
- 图片宽高比固定为 4:3,用
object-fit: cover防止拉伸变形 - 文字行高设为
1.4,避免移动端挤成一团 - 按钮加
type="button",防止表单意外提交
HTML 结构必须包含的 4 个部分
少一个都可能影响可访问性或 SEO。不是“能显示就行”,而是“机器和人都能正确理解”:
-
<article class="product-card"></article>—— 外层语义容器,别用<div> <li> <code><img src="..." alt="无线降噪耳机 黑色款" style="max-width:90%" style="max-width:90%">—— 必须带alt和显式width/height,防布局偏移(CLS) -
<h3 class="product-title">QuietAir Pro</h3>—— 用<h3></h3>,不是<div> 加 font-size 模拟 <li> <code><button class="add-to-cart" data-sku="QA-PRO-BLK">加入购物车</button>—— 带data-属性方便 JS 绑定,别只写“点击” - 没设
max-width: 100%在img上 → 图片溢出卡片 - 用
px写内边距(如padding: 16px)→ 小屏文字被切掉,改用rem或em - 按钮没写
white-space: nowrap→ “加入购物车”在窄屏断成两行,破坏按钮识别性
CSS 样式里最容易被忽略的 3 个细节
很多人卡在“看起来差不多”,但一缩放、一换设备就错位。问题常出在这些地方:
示例最小可用样式:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
.product-card {
display: flex;
flex-direction: column;
border: 1px solid #e0e0e0;
border-radius: 8px;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
}
.product-card img {
width: 100%;
height: 180px;
object-fit: cover;
display: block;
}
.product-title {
margin: 0.75rem 1rem 0.5rem;
font-size: 1.125rem;
line-height: 1.4;
}
.add-to-cart {
margin: 0 1rem 1rem;
padding: 0.5rem 1rem;
white-space: nowrap;
}
移动端适配时最常踩的坑:图片加载与交互反馈
不是加个 @media 就算适配完成。真实场景下,用户会滑动、点击、放大,这些行为会暴露隐藏问题:
- 没加
touch-action: manipulation在按钮上 → iOS 点击延迟 300ms - 图片没设
srcset和sizes→ 高清屏加载小图,模糊;4G 网络加载大图,卡顿 - 卡片没设
min-height→ 文字少时卡片高度塌缩,网格布局错乱
简单补救方式(不引入 JS):
@@##@@
复杂点在于图片资源管理,容易被忽略的是 sizes 值必须和实际布局宽度匹配,否则 srcset 形同虚设。










