我正在尝试将flex div堆叠成3行,有时我会有3 div,有时是6或21,依此类推。我弄清楚了宽度和填充,但是我不知道如何让它们开始。每3套之后的新行。
我该如何实现?现在,将它们全部放在一行中。
HTML代码是这样的:
<div id="container">
<div class="sections__container">
<div class="sections__container__a">A-1</div>
<div class="sections__container__b">A-2</div>
<div class="sections__container__c">A-3</div>
<div class="sections__container__a">B-1</div>
<div class="sections__container__b">B-2</div>
<div class="sections__container__c">B-3</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
每个flex div都使用CSS,例如:
width: 33.33%;
height: 100%;
float: left;
flex-grow: 1;
Run Code Online (Sandbox Code Playgroud)
这是一个使事情变得更轻松的jsFiddle:https ://jsfiddle.net/xr746syj/
非常感谢您的任何建议:)
首先,您需要使用,flex-wrap: wrap以便您的行在适当的点中断。
其次,您使用的是边距,需要在width计算中考虑到它们。
所以,如果你说一个块 is 33.33%but has margin-left: 5px,你需要使用width: calc(33.33% - 5px).
最后,我float从您的代码中删除了s,因为它们在应用于 flex 子项时是无用的属性。通过创建一个class包含每个部分之间所有共享值的公共项,您的代码可以得到极大的简化。
这是完整的工作代码:
* {
box-sizing: border-box;
}
#container {
width: 600px;
margin: 0 auto;
background-color: #ececec;
padding: 10px;
margin-bottom: 30px;
}
.sections__container {
margin: 0 auto;
max-width: 600px;
display: flex;
flex-wrap: wrap;
}
.sections__container__a {
margin-right: 5px;
width: calc(33.33% - 5px);
height: 100%;
border-radius: 4px;
flex-grow: 1;
background-color: #FFFFFF;
font-size: 0.80rem;
padding: 15px 0px 10px 0px;
font-weight: 600;
margin-bottom: 10px;
text-align: center;
}
.sections__container__b {
margin: 0 5px;
width: calc(33.33% - 10px);
height: 100%;
border-radius: 4px;
flex-grow: 1;
background-color: #FFFFFF;
font-size: 0.80rem;
padding: 15px 0px 10px 0px;
font-weight: 600;
margin-bottom: 10px;
text-align: center;
}
.sections__container__c {
margin-left: 5px;
width: calc(33.33% - 5px);
height: 100%;
border-radius: 4px;
flex-grow: 1;
background-color: #FFFFFF;
font-size: 0.80rem;
padding: 15px 0px 10px 0px;
font-weight: 600;
margin-bottom: 10px;
text-align: center;
}Run Code Online (Sandbox Code Playgroud)
<div id="container">
<div class="sections__container">
<div class="sections__container__a">A-1</div>
<div class="sections__container__b">A-2</div>
<div class="sections__container__c">A-3</div>
<div class="sections__container__a">B-1</div>
<div class="sections__container__b">B-2</div>
<div class="sections__container__c">B-3</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我希望这将有所帮助。
这是Flex的备忘单,以供将来参考:https : //yoksel.github.io/flex-cheatsheet/
#container{
width:600px;
margin: 0 auto;
background-color:#ececec;
padding:10px;
margin-bottom:30px;
}
.sections__container {
margin: 0 auto;
max-width: 600px;
display: flex;
flex-wrap: wrap;
align-content: stretch;
justify-content: space-between;
}
.sections__container div {
width: 30%;
border-radius: 4px;
flex-grow: 1;
background-color: #FFFFFF;
font-size: 0.80rem;
padding: 15px 0px 10px 0px;
font-weight: 600;
margin:10px;
text-align: center;
}Run Code Online (Sandbox Code Playgroud)
<div id="container">
<div class="sections__container">
<div class="sections__container__a">A-1</div>
<div class="sections__container__b">A-2</div>
<div class="sections__container__c">A-3</div>
<div class="sections__container__a">B-1</div>
<div class="sections__container__b">B-2</div>
<div class="sections__container__c">B-3</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)