我正在尝试设置具有三列的 flexbox 布局,其中左列和右列具有固定宽度,并且中心列弯曲以填充可用空间。
尽管为列设置了尺寸,但它们似乎仍然随着窗口的缩小而缩小。
有谁知道如何做到这一点?
我需要做的另一件事是根据用户交互隐藏右列,在这种情况下,左列仍将保持其固定宽度,但中心列将填充其余空间。
#container { 显示:弹性; justify-content:空间环绕;对齐项目:拉伸;最大宽度:1200px; } .column.left { 宽度:230px; } .column.right { 宽度:230px;左边框:1px 实心#eee; } .column.center { 左边框:1px 实心 #eee; }
Anxiety 是一个博客系列,于 2012 年 1 月至 2013 年 7 月在纽约时报的意见版块上运行。它以散文、小说和艺术为特色由广泛的贡献者从科学、文学和艺术的角度探索焦虑。
这是一个 JSFiddle:http://jsfiddle.net/zDd2g/185/
您可以使用 flex: 0 0 230px;
而不是使用 width
(这是使用 flexbox 时的建议),这意味着:
= 不增长(flex-grow 的简写)
0 = 不收缩(flex-shrink 的简写)
230px = 从 230px 开始(flex-basis 的简写)
这意味着:始终为 230px
。
See fiddle,谢谢@TylerH
哦,这里不需要 justify-content
和 align-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;
}
尽管为列设置了尺寸,但它们似乎仍然随着窗口的缩小而缩小。
弹性容器的初始设置是 flex-shrink: 1
。这就是您的列正在缩小的原因。
您指定的宽度 (it could be width: 10000px
) 无关紧要,使用 flex-shrink
可以忽略指定的宽度并防止弹性项目溢出容器。
我正在尝试设置一个具有 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 简写而不是直接使用其简写属性来控制灵活性,因为简写会正确重置任何未指定的组件以适应常见用途。
更多详细信息:What are the differences between flex-basis and width?
我需要做的另一件事是根据用户交互隐藏右列,在这种情况下,左列仍将保持其固定宽度,但中心列将填充其余空间。
尝试这个:
.center { flex: 1; }
这将允许中心列消耗可用空间,包括其兄弟姐妹被移除时的空间。
flex: 1;
添加到中心 div
就足够了,谢谢。
与旧浏览器的兼容性可能会很麻烦,因此请注意。
如果这不是问题,请继续。运行代码段。转到整页视图并调整大小。 Center 将自行调整大小,而不会更改左侧或右侧 div。
更改左右值以满足您的要求。
谢谢你。
希望这可以帮助。
#container { 显示:弹性; } .column.left { 宽度:100px;弹性:0 0 100 像素; } .column.right { 宽度:100px;弹性:0 0 100 像素; } .column.center { 弹性:1;文本对齐:居中; } .column.left, .column.right { 背景:橙色;文本对齐:居中; }
.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;
}
flex-grow
(如 1)。 Updated fiddle。flex-grow: 1
。否则,它不会占用其余的宽度。我想答案应该考虑这个事实。flex: 0 0 200px
的作用与width: 200px; flex-shrink: 0
相同。