如何在Flexbox布局中实现中间两个元素上下排列
解决方案
要实现第2、3个元素上下排列,同时保持第1、4个元素位置不变,只需对结构和样式做以下调整:
1. 修改HTML结构
把第2、3个flex-items包裹进一个新的中间容器,让中间区域成为独立的垂直Flex容器:
<div class="flex-container"> <div class="flex-items"></div> <div class="flex-middle"> <div class="flex-items"></div> <div class="flex-items"></div> </div> <div class="flex-items"></div> </div>
2. 调整CSS样式
原水平Flex容器保持不变,给中间容器设置垂直布局并让它占据中间可用空间:
.flex-container { display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: center; align-items: stretch; align-content: stretch; } /* 中间容器:垂直排列内部元素,占据剩余空间 */ .flex-middle { display: flex; flex-direction: column; flex-grow: 1; /* 和原第2、3元素的flex-grow总和一致,保证中间区域宽度不变 */ } .flex-items:nth-child(1) { flex-grow: 0; flex-shrink: 1; flex-basis: auto; } /* 中间容器内的子元素保持原有伸缩属性 */ .flex-middle .flex-items { flex-grow: 1; flex-shrink: 1; flex-basis: auto; } .flex-items:nth-child(3) { flex-grow: 0; flex-shrink: 1; flex-basis: auto; }
关键说明
- 新增的
flex-middle容器通过flex-direction: column让内部第2、3元素垂直排列; flex-grow:1保证中间区域宽度和原布局一致,替代原第2、3元素的flex-grow总和;- 第1、4元素保持
flex-grow:0,固定在左右两侧。
内容的提问来源于stack exchange,提问作者1zz0
相关产品推荐
相关产品推荐

