如何实现每行4个flex box容器?调整products-box布局
解决Flex布局每行4个项目且均匀分布的问题
要实现每行固定4个products-box,且数量不足一行时保持均匀分布,调整核心CSS属性即可达成需求:
修改后的完整代码
CSS部分
*{ box-sizing: border-box; padding: 0; margin: 0; } body{ min-height: 100vh; } header{ height: 80px; display: flex; background-color: lightblue; } .products-container{ width: 100%; height: auto; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-evenly; gap: 16px; /* 控制项目间的间距,可自定义数值 */ padding: 16px; /* 避免项目贴容器边缘 */ } .products-box{ flex: 0 0 calc(25% - 12px); /* 25%确保每行4个,减去gap分摊值防止溢出 */ max-width: calc(25% - 12px); /* 固定最大宽度,配合flex属性 */ height: 200px; background-color: lightpink; color: white; font-size: 20px; text-align: center; line-height: 200px; } .main-container{ display: flex; min-height: 100vh; } .nav-sidebar{ min-width: 150px; background-color: lightgray; } .inner-text{ font-weight: 600; font-size: 24px; margin: auto; }
HTML部分(无需修改)
<header> <span class="inner-text">Header</span> </header> <div class="main-container"> <aside class="nav-sidebar" id="nav-container"> <span class="inner-text">Sidebar</span> </aside> <div class="products-container"> <div class="products-box"> Item1 </div> <div class="products-box"> Item2 </div> <div class="products-box"> Item3 </div> <div class="products-box"> Item4 </div> <div class="products-box"> Item5 </div> <div class="products-box"> Item6 </div> <div class="products-box"> Item7 </div> <div class="products-box"> Item8 </div> </div> </div>
关键修改说明
- 固定每行4个项目:通过
calc(25% - 12px)计算项目宽度,25%对应容器的1/4宽度,减去的12px是gap属性的分摊值(每行4个项目有3个间隙,总gap16px时每个项目分摊12px),避免容器宽度溢出。 - 均匀分布处理:保留
justify-content: space-evenly,当最后一行项目数量不足4个时,会自动在项目之间和两侧分配均等空间,实现均匀分布。 - 简洁间距控制:用
gap属性替代手动设置margin,统一管理项目间的水平、垂直间距。
内容的提问来源于stack exchange,提问作者Thomas Eddington III
相关产品推荐
相关产品推荐

