本文详解如何使用 css grid(而非 flexbox)构建 instagram 风格的响应式卡片布局:桌面端 3 列等宽 + 10px 间隙,移动端(≤768px)自动切换为单列流式布局,并保持语义清晰、可维护性强。
要真正复刻 Instagram 的视觉节奏与响应逻辑,推荐优先采用 CSS Grid 而非 Flexbox——它原生支持行列间隙控制、显式轨道定义和更直观的响应式断点管理。原代码中使用 display: flex 搭配 flex-basis: 33.33% 存在精度误差(如四舍五入导致换行)、间隙需手动计算 margin,且移动端切换逻辑冗余(如隐藏 left/right 类)。以下是优化后的专业实现方案:
.cards {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 等宽列 */
gap: 10px; /* 统一列/行间距,无需手动算 margin */
margin-top: 1rem;
}
.card {
border: 1px solid #ccc;
background: #fff;
padding: 16px;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}
/* 移动端:单列全宽,保留 10px 间隙 */
@media (max-width: 768px) {
.cards {
grid-template-columns: 1fr; /* 强制单列 */
}
.card {
width: 100%; /* 显式声明确保填充 */
}
}.cards { align-items: stretch; } /* 默认即生效,可省略 */
.card { display: flex; fl
ex-direction: column; }.card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.12);
}通过以上方案,你将获得一个语义清晰、易扩展、符合现代 CSS 最佳实践的 Instagram 风格网格系统——简洁、可靠,且一次编写,多端适配。