如何将9个带独立样式的div卡片排成两行并保证合理间距?
问题描述
我有9个带有独特间距与内边距样式的div容器,需要将它们排列为两行,确保每个div卡片拥有充足间距以提升可读性。当前布局为一行div容器,换行后间距不一致,以下是我的CSS及Bootstrap HTML代码。
原CSS代码
.cards-container { display: flex; flex-wrap: wrap; justify-content: center; } .card { width: 100px; height: 100px; } .card img { max-width: 60px; max-height: 60px; } .card h3 { font-size: 16px; margin-top: 10px; } .card-container > .card { width: 120px; height: 120px; } .card-body { display: flex; flex-direction: row; align-items: center; height: 50px; padding: 10px; } .icon { font-size: 24px; margin-right: 5px; } h3 { margin: 0; font-size: 14px; }
原Bootstrap HTML代码
<!-- 按品类购物模块开始 --> <div id="hot"> <div class="box py-4"> <div class="container"> <div class="row"> <div class="col-md-9"> <h2 class="mb-0"> Shop by Categories </h2> <!-- 健康美妆图标 --> <a href="category-full.html"> <div class="cards-container d-flex justify-content-between"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/NewBeauty.png.png"> <h3>Health and Beauty</h3> </div> </div> </div> </div> </div> </div> </a> <!-- 服饰配饰图标--> <a href="category-full.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/clothes_accessories.png.png"> <h3>Clothing & Accessories</h3> </div> </div> </div> </div> </div> </a> <!-- 玩具爱好图标--> <a href="category-right.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/toys_hobbies.png.png"> <h3>Toys & Hobbies</h3> </div> </div> </div> </div> </div> </a> <!-- 家居家电图标--> <a href="category-full.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/home_improvement.png.png"> <h3>Home & Appliances</h3> </div> </div> </div> </div> </div> </a> <!-- 运动户外图标--> <a href="category-right.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/sport_outdoor.png.png" style="width: 56px;"> <h3>Sport & Outdoor</h3> </div> </div> </div> </div> </div> </a> <!-- 电脑平板图标--> <a href="category-right.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/computers_hardware.png.png" style="width: 56px;"> <h3>Computer & Tablets</h3> </div> </div> </div> </div> </div> </a> <!-- 电子游戏图标--> <a href="category-right.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/video_games.png.png" style="width: 56px;"> <h3>Video Games</h3> </div> </div> </div> </div> </div> </a> <!-- 亲子家庭图标--> <a href="category-right.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/kids_family.png.png" style="width: 56px;"> <h3>Kids & Family</h3> </div> </div> </div> </div> </div> </a> <!-- 办公设备图标 --> <a href="category.html"> <div class="card-container"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12"> <img src="img/eShop-Images/office_equipment.png.png" style="width: 56px;"> <h3>Office equipment</h3> </div> </div> </div> </div> </div> </a> </div> </div> </div> </div> </div>
解决方案
1. 修复核心结构错误
原代码第一个分类的<a>标签错误包裹了cards-container,导致其余8个卡片不在Flex容器内,这是布局混乱的根本原因。需要将所有卡片统一放入同一个cards-container,并把<a>嵌套在card-container内部:
<!-- 按品类购物模块开始 --> <div id="hot"> <div class="box py-4"> <div class="container"> <div class="row"> <div class="col-md-9"> <h2 class="mb-0">按品类购物</h2> <!-- 统一控制所有卡片的Flex容器 --> <div class="cards-container d-flex flex-wrap justify-content-center gap-4 py-3"> <!-- 健康美妆图标 --> <div class="card-container"> <a href="category-full.html"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12 text-center"> <img src="img/eShop-Images/NewBeauty.png.png"> <h3>健康美妆</h3> </div> </div> </div> </div> </a> </div> <!-- 服饰配饰图标 --> <div class="card-container"> <a href="category-full.html"> <div class="card"> <div class="card-body"> <div class="row flex-wrap"> <div class="col-12 text-center"> <img src="img/eShop-Images/clothes_accessories.png.png"> <h3>服饰配饰</h3> </div> </div> </div> </div> </a> </div> <!-- 剩余7个卡片按照上述结构依次添加 --> </div> </div> </div> </div> </div> </div>
2. 优化CSS样式
调整样式确保卡片间距统一,排版更美观:
/* 全局卡片容器,用gap统一控制水平/垂直间距 */ .cards-container { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; /* 卡片间的统一间距 */ } .card-container > .card { width: 120px; height: 120px; padding: 10px; box-sizing: border-box; /* 内边距不撑开卡片尺寸 */ } .card-body { display: flex; flex-direction: column; /* 图标与文字垂直排列 */ align-items: center; justify-content: center; height: 100%; padding: 0; } .card img { max-width: 60px; max-height: 60px; object-fit: contain; } .card h3 { font-size: 14px; margin-top: 8px; text-align: center; margin: 0; } h3 { margin: 0; font-size: 14px; }
关键说明
- 所有卡片纳入同一Flex容器后,
flex-wrap: wrap会自动按容器宽度换行,gap属性确保每行卡片水平、垂直间距完全一致。 - 将
card-body改为垂直排列,更符合分类卡片的视觉逻辑,同时添加text-center让文字居中对齐。
内容的提问来源于stack exchange,提问作者Themba2023 Bhele
相关产品推荐
相关产品推荐

