简体   繁体   English

弹性/网格布局。 需要建议如何使用 Flex of Grid CSS model 正确布局块

[英]Flex / grid layout. Need advice how to lay out blocks properly using Flex of Grid CSS model

Hi, community!你好,社区!
I need advice on, is it possible to achieve the following card structure (without additional wrappers)?我需要建议,是否可以实现以下卡片结构(无需额外的包装)?

Desired behavior: the first row should have the 3 cards, the second - 2 cards, the 3-rd - 3 cards and go on... I've attached a simple example for the first 2 rows for a better understanding of the problem.期望的行为:第一行应该有 3 张卡,第二张 - 2 张卡,第 3-rd - 3 张卡和 go 在...我为前 2 行附上了一个简单的例子,以便更好地理解问题.

 * { box-sizing: border-box; }.list { display: flex; flex-wrap: wrap; justify-content: center; }.list.item { display: flex; justify-content: center; width: 33%; padding: 20px; }.list.item.card { width: 80%; height: 200px; background-color: #000; }
 <div class="list"> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> </div>

If you can set static width for cards, you can try something like that:如果您可以为卡片设置 static 宽度,您可以尝试以下操作:

 * { box-sizing: border-box; }.list { display: grid; width: -moz-fit-content; width: fit-content; margin: 0 auto; grid-template-columns: repeat(6, 1fr); justify-content: center; }.list.item { display: flex; justify-content: center; padding: 20px; grid-column: span 2; }.list.item:nth-child(5n - 1) { justify-content: flex-end; }.list.item:nth-child(5n) { justify-content: flex-start; }.list.item:nth-child(5n - 1), .list.item:nth-child(5n) { grid-column: span 3; }.list.item.card { width: 200px; /* static width */ height: 200px; background-color: #000; }
 <div class="list"> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> </div>

You can add a tiny margin to two elements and you can have the same width and also the same distance between elements:您可以为两个元素添加一个微小的边距,并且您可以具有相同的宽度以及元素之间的相同距离:

 * { box-sizing: border-box; }.list { display: flex; flex-wrap: wrap; justify-content: center; }.list.item { display: flex; justify-content: center; width: 33%; padding: 20px; }.list.item.card { width: 80%; height: 200px; background-color: #000; }.list.item:nth-child(5n + 4) { margin-left:1% }.list.item:nth-child(5n + 5) { margin-right:1% }
 <div class="list"> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> <div class="item"> <div class="card"></div> </div> </div>

You could make the 2 items you want in one row slightly bigger so it pushes the 3rd item into the next row.您可以使您想要的 2 个项目在一行中稍大一些,以便将第 3 个项目推入下一行。 the div's are not exacly the same size(.6 % bigger than the 3 items in the row above/below) but it's hard to notice div 的大小不完全相同(比上/下行中的 3 个项目大 0.6%),但很难注意到

 .list.item:nth-child(5n - 1){ width: 33.6%; }.list.item:nth-child(5n) { width: 33.6%; } * { box-sizing: border-box; }.list { display: flex; flex-wrap: wrap; justify-content: center; }.list.item { display: flex; justify-content: center; width: 33%; padding: 20px; }.list.item.card { width: 80%; height: 200px; background-color: #000; }
 <div class="list"> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> <div class="item"><div class="card"></div></div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM