ChatGPT解决这个技术问题 Extra ChatGPT

我怎样才能有两个固定宽度的列,中间有一个灵活的列?

我正在尝试设置具有三列的 flexbox 布局,其中左列和右列具有固定宽度,并且中心列弯曲以填充可用空间。

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

有谁知道如何做到这一点?

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

#container { 显示:弹性; justify-content:空间环绕;对齐项目:拉伸;最大宽度:1200px; } .column.left { 宽度:230px; } .column.right { 宽度:230px;左边框:1px 实心#eee; } .column.center { 左边框:1px 实心 #eee; }

Anxiety 是一个博客系列,于 2012 年 1 月至 2013 年 7 月在纽约时报的意见版块上运行。它以散文、小说和艺术为特色由广泛的贡献者从科学、文学和艺术的角度探索焦虑。

Balint Zsako
有人敲我的门
01.12.13

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


P
Popnoodles

您可以使用 flex: 0 0 230px; 而不是使用 width(这是使用 flexbox 时的建议),这意味着:

= 不增长(flex-grow 的简写)

0 = 不收缩(flex-shrink 的简写)

230px = 从 230px 开始(flex-basis 的简写)

这意味着:始终为 230px

See fiddle,谢谢@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;
}

在当前的实现中(至少在 Chrome 中),您还需要确保中间列已定义 flex-grow(如 1)。 Updated fiddle
为什么只是宽度不起作用?我确实需要 flex: 0 0 230px;?
Chrome 53 中的流体列仍然需要 flex-grow: 1。否则,它不会占用其余的宽度。我想答案应该考虑这个事实。
对于仍然感到困惑的任何人,flex: 0 0 200px 的作用与 width: 200px; flex-shrink: 0 相同。
我在这里复制了 Fiddle 以防 Rudie 丢失它:jsfiddle.net/133rr51u
C
Community

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

弹性容器的初始设置是 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; }

这将允许中心列消耗可用空间,包括其兄弟姐妹被移除时的空间。

Revised Fiddle


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

与旧浏览器的兼容性可能会很麻烦,因此请注意。

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

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

谢谢你。

希望这可以帮助。

#container { 显示:弹性; } .column.left { 宽度:100px;弹性:0 0 100 像素; } .column.right { 宽度:100px;弹性:0 0 100 像素; } .column.center { 弹性:1;文本对齐:居中; } .column.left, .column.right { 背景:橙色;文本对齐:居中; }

这是左边
这是中心
这是对的


H
Hu Cai
.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;
}

请不要发布仅代码的答案,而是实际描述这是如何解决问题的。