如何在中心有两个固定宽度的列和一个柔性列?


315

我正在尝试建立一个具有三列的flexbox布局,其中左列和右列具有固定的宽度,而中间列可以弯曲以填充可用空间。

尽管设置了列的尺寸,但它们似乎仍会随着窗口缩小而缩小。

有人知道如何做到这一点吗?

我需要做的另一件事是基于用户交互隐藏右列,在这种情况下,左列仍将保持其固定宽度,而中间列将填充其余空间。

#container {
    display: flex;
    justify-content: space-around;
    align-items: stretch;
    max-width: 1200px;
}

.column.left {
    width: 230px;
}

.column.right {
    width: 230px;
    border-left: 1px solid #eee;
}

.column.center {
    border-left: 1px solid #eee;
}
<div id="container">
    <div class="column left">
        <p>Anxiety was a blog series that ran in the New York Times Opinion section from January 2012 to July 2013. It featured essays, fiction, and art by a wide range of contributors that explored anxiety from scientific, literary, and artistic perspectives.</p>
    </div>
    <div class="column center">
        <img src="http://i.imgur.com/60PVLis.png" width="100" height="100" alt="">
    </div>
    <div class="column right">
        Balint Zsako
        <br/> Someone’s Knocking at My Door
        <br/> 01.12.13
    </div>
</div>

这是一个JSFiddle:http : //jsfiddle.net/zDd2g/185/


Answers:


631

除了使用width(这是使用flexbox时的建议)之外,您可以使用以下flex: 0 0 230px;方法:

  • 0=不要成长(的简称flex-grow
  • 0=不要缩水(的简写flex-shrink
  • 230px=从230px(的简写形式flex-basis)开始

这意味着:永远是230px

见小提琴,谢谢@TylerH

哦,您不需要justify-contentalign-items

img {
    max-width: 100%;
}
#container {
    display: flex;
    x-justify-content: space-around;
    x-align-items: stretch;
    max-width: 1200px;
}
.column.left {
    width: 230px;
    flex: 0 0 230px;
}
.column.right {
    width: 230px;
    flex: 0 0 230px;
    border-left: 1px solid #eee;
}
.column.center {
    border-left: 1px solid #eee;
}

14
在当前的实现中(至少在Chrome中是这样),您还需要确保已flex-grow定义中间列(例如1)。更新小提琴

2
为什么只是宽度不起作用?并且我确实需要flex:0 0 230px ;?
罗德里戈·鲁伊斯

3
flex-grow: 1Chrome 53中的流体色谱柱仍需要使用它。否则,它将不会占用其余的宽度。我想答案应该考虑这个事实。
thybzi

8
对于仍然感到困惑的人,其flex: 0 0 200px行为与相同width: 200px; flex-shrink: 0
bryc

3
我已将小提琴复制到这里,以防Rudie丢失:jsfiddle.net/133rr51u
TylerH,

53

尽管设置了列的尺寸,但它们似乎仍会随着窗口缩小而缩小。

flex容器的初始设置为flex-shrink: 1。这就是您的专栏缩小的原因。

指定的宽度(可以是width: 10000px)无关紧要,flex-shrink指定的宽度可以忽略,并且可以防止flex项溢出容器。

我正在尝试建立一个3列的flexbox,其中左右两列的宽度都是固定的...

您将需要禁用缩小。以下是一些选项:

.left, .right {
     width: 230px;
     flex-shrink: 0;
 }  

要么

.left, .right {
     flex-basis: 230px;
     flex-shrink: 0;
}

或者,按照规范的建议:

.left, .right {
    flex: 0 0 230px;    /* don't grow, don't shrink, stay fixed at 230px */
}

7.2。灵活性的组成部分

鼓励作者使用flex速记而不是直接使用其速记属性来控制灵活性,因为速记会正确地重置任何未指定的组件以适应常见用途

此处更多详细信息:flex-basis和width有什么区别?

我需要做的另一件事是基于用户交互隐藏右列,在这种情况下,左列仍将保持其固定宽度,而中间列将填充其余空间。

尝试这个:

.center { flex: 1; }

这将允许中心列占用可用空间,包括其同级项在被删除时的空间。

修正的小提琴


谢谢,添加flex: 1;到中心div就足够了。
DIES

4

与旧版浏览器的兼容性可能会拖累,因此建议您。

如果那不是问题,请继续。运行代码段。转到全页面视图并调整大小。Center将调整其自身大小,而不会更改左侧或右侧的div。

更改左右值以满足您的要求。

谢谢。

希望这可以帮助。

#container {
  display: flex;
}

.column.left {
  width: 100px;
  flex: 0 0 100px;
}

.column.right {
  width: 100px;
  flex: 0 0 100px;
}

.column.center {
  flex: 1;
  text-align: center;
}

.column.left,
.column.right {
  background: orange;
  text-align: center;
}
<div id="container">
  <div class="column left">this is left</div>
  <div class="column center">this is center</div>
  <div class="column right">this is right</div>
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.