我有一个flex
项目,其中有三个divs
。
┌────────────────────────────────────────┐
| WRAPPER |
| ┌─────────┬───────────┬──────────┐ |
| | LEFT | CENTER | RIGHT | |
| | | | | |
| └─────────┴───────────┴──────────┘ |
└────────────────────────────────────────┘
而且我想在小屏幕(小于600 px)中将center
列移动到下一行。它应该占据屏幕宽度的100%。
我遇到的问题是,当center
列到达下一行时,right
列不适合 Package 器。
下面是我的HTML
代码:
<div id="wrapper">
<div class="block left">Left</div>
<div class="block center">Center</div>
<div class="block right">Right</div>
</div>
下面是我的CSS
代码:
html, body{
height: 100%;
}
body{
margin: 0;
}
#wrapper{
display: flex;
width: 100%;
height: 50px;
align-items: center;
text-align: center;
}
.block{
height: 50px;
}
.left{
width: 20%;
background-color: red;
order: 1;
}
.center{
width: 60%;
background-color: green;
order: 2;
}
.right{
width: 20%;
background-color: blue;
order: 3;
}
@media all and (max-width: 600px) {
#wrapper{
flex-flow:column wrap;
height: 100px;
}
.center {
width: 100%;
order: 3;
}
.left{
width: 50%;
}
}
JSFiddle在这里你可以看到它是如何显示的。
是否可以使用flexbox
将中间列移动到下一行,占用屏幕的100%宽度?如果是,我错过了什么?
先谢谢你了!
3条答案
按热度按时间i34xakig1#
像这样的吗
https://jsfiddle.net/wqLezyfe/2/
rsl1atfo2#
这几乎是我所需要的,但不完全是。我的问题是我有一个设置集合,所有这些设置都有一个标签,一个选定的选项和一个按钮。当没有空间的所有3个我需要的选项,以 Package 到下一行。由于标签和选项可以是各种各样的值和组合,我需要解决方案来对文本的长度做出React。我也真的希望它只在必要的时候 Package 。响应式的重点是让它更适合小屏幕,而不是让它们一直滚动!
我发现的解决方案是将前2个项目 Package 在一个内部 Package 器中,使用
flex-direction: row;
,以便在 Package 时,项目将垂直堆叠。然后,内部 Package 和按钮需要拒绝使用flex-wrap: nowrap;
Package ,以便它们始终水平对齐。结果是一行中有3个项目,中间的项目换行。
Alt 1如果您需要第1项占据所有剩余空间,只需将
flex-grow: 1;
移动到.left
JSFiddle Example
Alt 2如果您需要将中间项包在
.right
项下面,在我的例子中是按钮,那么您需要将.center
和.right
项放在inner-wrapper
中,并以相反的顺序。为了克服顺序颠倒的问题,我们需要将flex-direction: row-reverse
添加到inner-wrapper
中,并且需要为.right
类给予一个margin-left: auto;
,以便它位于右侧。Right-align JSFiddle example
velaa5lx3#
当您想使用
flex-flow: row wrap
时,您正在使用flex-flow:column wrap;
。而且div的顺序也乱了--您希望.center
div排在最后。Flexbox根据升序值对div进行排序。