在屏幕宽度为 1400px 或以上时,我在一行中显示 4 个 Flexbox 元素。 在较低的屏幕宽度下,我想连续显示 2 个 Flexbox 元素,而在更小的设备上,每行仅显示一个元素。
默认的 flex-wrap 行为是逐一包裹(从 4 到 3 到 2 到 1)。
是否有一种简单的方法可以使用 Flexbox 实现这种换行行为?
这是一个具有默认换行行为的代码笔:https://codepen.io/anon/pen/dVOVaG
CSS
.outerDiv {
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: 0rem;
margin-left: 0rem;
}
.innerDiv {
margin-top: 1rem;
margin-bottom: 1rem;
}
.imageDiv {
position: relative;
overflow: hidden;
z-index: 1;
}
HTML
<div class="outerDiv">
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/fcbarcelona_431_1_1_20160908181513.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/bethhart_1880_1_3_20161201140946.jpg">
</div>
</div>
</div>
最佳答案
Is there an easy way to achieve this wrap behaviour using flexbox?
不,Flexbox 没有属性告诉它们一次将元素换行 2 个。
在这种情况下,最简单的方法是将它们 2 × 2 包装在标记中,这里已删除两个 innerDiv
,然后将剩余的 innerDiv
也设为 Flex 容器(嵌套 Flexbox 容器/元素)。
.outerDiv, .innerDiv {
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.innerDiv {
margin-top: 1rem;
margin-bottom: 1rem;
}
.imageDiv {
position: relative;
overflow: hidden;
z-index: 1;
}
<div class="outerDiv">
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/fcbarcelona_431_1_1_20160908181513.jpg">
</div>
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/bethhart_1880_1_3_20161201140946.jpg">
</div>
</div>
</div>
要保留现有标记,请使用媒体查询并将 innerDiv
设置为 min-width: 50%
在断点 < 1400px (max-宽度:1399px
)
.outerDiv {
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.innerDiv {
margin-top: 1rem;
margin-bottom: 1rem;
}
.imageDiv {
position: relative;
overflow: hidden;
z-index: 1;
}
@media (max-width: 1399px) {
.innerDiv {
min-width: 50%;
}
}
<div class="outerDiv">
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/harrypotterandthecursedchild_58482_1_1_20160804105944.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/fcbarcelona_431_1_1_20160908181513.jpg">
</div>
</div>
<div class="innerDiv">
<div class="imageDiv">
<img src="http://stwv-s3.global.ssl.fastly.net/filestore/season/image/bethhart_1880_1_3_20161201140946.jpg">
</div>
</div>
</div>
关于html - 自动以半步包裹 Flexbox 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391238/