响应式设计中如何调整含嵌套容器的Div元素排序?
解决方案
方法一:调整HTML结构(简单直接)
把Div 2从right-container中移出,和Div 1、right-container同级,就能通过flex的order属性自由控制移动端的显示顺序。
修改后的HTML
<div class="container"> <div class="div1"> <h2>Div 1</h2> </div> <div class="div2"> <h2>Div 2</h2> </div> <div class="right-container"> <div class="div3"> <h2>Div 3</h2> </div> </div> </div>
对应的CSS
* { margin: 0; padding: 0; } .container { display: flex; flex-wrap: wrap; border: solid; } .div1 { width: 400px; height: 400px; background-color: lightblue; flex: 0 0 auto; } .right-container { flex: 1; } .div2 { width: 300px; height: 200px; background-color: lightgreen; flex: 0 0 auto; } .div3 { width: 200px; height: 100px; background-color: rgb(238, 144, 188); } @media (max-width: 600px) { .container { flex-direction: column; } .div1 { order: 2; width: 100%; } .div2 { order: 1; width: 100%; } .right-container { order: 3; } }
方法二:不修改HTML结构(用Grid布局)
利用Grid的display: contents属性,让right-container的子元素直接成为父级Grid容器的子元素,跳过容器层级调整顺序。
最终CSS
* { margin: 0; padding: 0; } .container { display: grid; grid-template-columns: 400px 1fr; border: solid; } .div1 { height: 400px; background-color: lightblue; grid-row: 1 / 3; } .right-container { display: flex; flex-direction: column; } .div2 { height: 200px; background-color: lightgreen; } .div3 { height: 100px; background-color: rgb(238, 144, 188); } @media (max-width: 600px) { .container { grid-template-columns: 1fr; grid-template-areas: "div2" "div1" "div3"; } .div1 { grid-area: div1; height: auto; } .div2 { grid-area: div2; grid-column: 1 / 2; grid-row: 1 / 2; } .div3 { grid-area: div3; grid-column: 1 / 2; grid-row: 3 / 4; } .right-container { display: contents; } }
说明
display: contents会让容器元素本身“消失”,它的子元素直接被父级容器接管,这样Div 2和Div 3就能像Div 1一样直接参与Grid布局的顺序调整,完美实现移动端的需求。
内容的提问来源于stack exchange,提问作者Philipp Peltz
相关产品推荐
相关产品推荐

