如何用CSS Grid或Flexbox实现指定响应式布局?
可行:用CSS Grid实现目标响应式布局
完全可以通过CSS Grid实现你的需求,无需嵌套额外div,以下是具体实现方案:
HTML结构
保持原始的div序列即可,不需要额外嵌套:
<div class="grid-container"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> <div>9</div> <div>10</div> </div>
CSS样式
采用移动端优先的思路,默认小屏为单列布局,大屏通过媒体查询切换为4列并实现迷你网格:
/* 小屏默认样式:单列顺序排列 */ .grid-container { display: grid; grid-template-columns: 1fr; gap: 1rem; padding: 1rem; } .grid-container div { padding: 1.5rem; background: #f0f0f0; border: 1px solid #ddd; border-radius: 4px; } /* 大屏布局(宽度≥768px时生效) */ @media (min-width: 768px) { .grid-container { grid-template-columns: repeat(4, 1fr); /* 定义网格区域,清晰划分布局结构 */ grid-template-areas: "item1 item2 item3 ." ". . item4 item5" ". . item6 item7"; } /* 给对应div分配网格区域 */ .grid-container div:nth-child(1) { grid-area: item1; } .grid-container div:nth-child(2) { grid-area: item2; } .grid-container div:nth-child(3) { grid-area: item3; } .grid-container div:nth-child(4) { grid-area: item4; } .grid-container div:nth-child(5) { grid-area: item5; } .grid-container div:nth-child(6) { grid-area: item6; } .grid-container div:nth-child(7) { grid-area: item7; } /* 隐藏第8个及以后的div */ .grid-container div:nth-child(n+8) { display: none; } }
实现说明
- 小屏模式:所有div按原始顺序单列排列,全部内容可见。
- 大屏模式:
- 整体为4列网格布局。
- 通过
grid-template-areas定义区域,让第4-7个div形成2×2的迷你网格(占据网格右下区域),前3个div排列在第一行前3列。 - 用
:nth-child(n+8)选择器精准隐藏第8个及后续的所有div。
如果需要调整迷你网格的位置,只需修改grid-template-areas中的区域分布即可,灵活性很高。
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

