卡片布局首选 display: flex,因其天然支持对齐、换行与等高;配合 flex-wrap、gap 和分层响应式断点(如480px/768px),可实现多端适配;图片用 object-fit + 容器约束确保不拉伸,阴影圆角宜用相对单位并调低透明度。

卡片布局用 display: flex 而不是 float 或 inline-block
Flexbox 是目前最可控、最简洁的卡片容器方案。用 float 容易塌陷,inline-block 有看不见的空白间隙,而 display: flex 天然支持对齐、换行和等高,尤其适合多卡片网格。
关键点:
- 父容器设
display: flex+flex-wrap: wrap,子卡片设flex: 1 1 calc(33.333% - 2rem)(三列带间距) - 用
gap: 1rem替代手动 margin,更干净且自动处理边缘 - 卡片内部结构也推荐用 flex:比如头图+内容+按钮垂直堆叠,用
flex-direction: column+justify-content: space-between保证底部按钮始终贴底
移动端断点别只写 @media (max-width: 768px)
768px 是 iPad 常见宽度,但很多安卓中屏手机(如 Pixel 5、OnePlus Nord)实际视口只有 412px–428px。只靠一个断点,小屏上卡片会挤成窄条,文字折行混乱,图片被拉伸。
建议分层响应:
立即学习“前端免费学习笔记(深入)”;
-
@media (max-width: 480px):单列,flex-basis: 100%,gap减至0.75rem -
@media (min-width: 481px) and (max-width: 768px):双列,flex-basis: calc(50% - 0.75rem) -
@media (min-width: 769px):默认三列或四列(取决于设计密度)
注意:断点值应基于内容溢出表现来定,而不是设备型号——打开浏览器调试器,拖动窗口看卡片何时开始“难受”,那个宽度就是你的断点。
图片在卡片中不拉伸、不裁切的关键是 object-fit 和容器约束
直接给 设 width: 100%; height: 180px 会导致变形;用 background-image 又不利于可访问性(无 alt)。正确做法是结合语义化 和 CSS 控制。
实操步骤:
- 卡片内图片容器(如
.card__image)设固定高度 +overflow: hidden -
设width: 100%; height: 100%; object-fit: cover;(保持比例居中裁切)或object-fit: contain;(完整显示,留白) - 避免对
直接设max-width: 100%而不设高度——那样无法触发object-fit
卡片阴影和圆角在不同分辨率下要收敛,否则高 DPI 屏幕显得过重
box-shadow 和 border-radius 的像素值在 Retina 屏上会被物理放大,导致阴影浓重、圆角生硬。这不是 bug,是 CSS 像素与设备像素比(dpr)作用的结果。
缓解方式:
- 用相对单位:把
border-radius: 8px改为border-radius: 0.5rem,让缩放更平滑 - 阴影分层控制:主阴影用
box-shadow: 0 2px 8px rgba(0,0,0,0.08),仅在@media (prefers-reduced-motion: reduce)下降级为none - 必要时用
@supports (color: color(display-p3 1 0 0))区分新旧渲染引擎,但日常项目中优先调低透明度和模糊值
真正难的是内容节奏——图片尺寸、字体大小、行高、内边距之间的比例关系,在每轮缩放中都要同步微调,不能只靠 flex 和 media query 一劳永逸。










