IT *_*Man 5 css css3 media-queries flexbox css-grid
有没有一种方法可以将2列布局转换为带有媒体查询的1列布局?
2列布局的条件:
1列布局的条件:
我一直在考虑为列使用两个单独的容器-但当布局变为1列时,该构造会阻止我在列之间重新排序(混合)元素。我似乎应该将所有元素放置在一个容器中-然后对于1列布局,可以将flex用于重新排序,但是在那种情况下如何实现2列布局?
要模拟媒体查询行为,请从主容器中删除类“一栏”。
<div id="container" class="one-column"> -> <div id="container" class="">
Run Code Online (Sandbox Code Playgroud)
在此概念中,主要问题在于,列(2列布局)中的项目不会直接一个接一个地流动(右列中的项目之间存在间隙)。
这是我到目前为止所取得的成就:
<div id="container" class="one-column"> -> <div id="container" class="">
Run Code Online (Sandbox Code Playgroud)
* {
box-sizing: border-box;
}
div {
width: 100%;
height: 100px;
float: left;
}
#container.one-column {
display: flex;
flex-direction: column;
height: auto;
}
#container {
display: block;
}
.col1 {
width: 60%;
background-color: red;
height:300px;
float: left;
}
.col2 {
width: 40%;
background-color: blue;
border: 1px solid white;
float: right;
}
.one-column > div {
width: 100%;
}Run Code Online (Sandbox Code Playgroud)
JSFiddle:https ://jsfiddle.net/3b6htt1d/40/
2 列布局的条件:
- 项目应该在列中一个接一个地流动
- 列内的项目将具有不同的高度
- 项目位置(顺序)可以通过 html 标记元素位置来施加
这正是 CSS Columns 的作用。
1 列布局的条件:
- 物品应该一个接一个地流动
- 列内的项目将具有不同的高度
- 项目位置 (!) 不能由 html 标记强加(应通过 css 控制)
这正是 Flexbox 和column方向可以做的事情。
因此,如果将两者结合起来,对于 2 列,它们将从上到下流动,如左图示例所示,对于 1 列,您可以使用 控制它们的位置order。
这样您就可以避免固定高度并获得动态/灵活尺寸的物品。
堆栈片段
* {
box-sizing: border-box;
}
div {
width: 100%;
height: 100px;
}
#container.one-column {
display: flex;
flex-direction: column;
height: auto;
}
.col1 {
width: 60%;
background-color: red;
height:300px;
}
.col2 {
width: 40%;
background-color: blue;
border: 1px solid white;
}
.one-column > div {
width: 100%;
}
@media (min-width: 500px) {
#container.one-column {
display: block;
columns: 2;
}
#container.one-column > div {
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
}
.zcol1 ~ .col1 {
background-color: yellow;
height:100px;
}
}Run Code Online (Sandbox Code Playgroud)
<div id="container" class="one-column">
<div class="col1" style="order:2;">
ONE
</div>
<div class="col2" style="order:1;">
TWO
</div>
<div class="col1" style="order:4;">
THREE
</div>
<div class="col2" style="order:3;">
FOUR
</div>
</div>Run Code Online (Sandbox Code Playgroud)
这是我的另一个答案,这可能是另一种选择,将 Flexbox 与float.
根据评论更新
这是一个结合 Flexbox 和 的版本float,它生成屏幕截图显示的布局: