【问题标题】:How does a flexbox expand to it's child on overflow?flexbox如何在溢出时扩展到它的孩子?
【发布时间】:2016-03-17 12:29:33
【问题描述】:

我有一个 flexbox 布局。

html如下:

<div class="grid">
  <div class="row">
    <div class="column">Content</div>
    <div class="column">Content2</div>
    <div class="column">Content2</div>
  </div>
  <div class="row">
    <div class="column">Content</div>
    <div class="column">Content2</div>
    <div class="column">Content2</div>
  </div>
</div>

和css:

.grid {
  overflow: auto;
  width: 500px;
  height: 400px;
  background-color: #eee;

  display: flex;
  flex-direction: column;
}

.row {
  background-color: #ddd;
  align-items: stretch;
  display: flex;
  border: 2px solid black;
}

.column {
  flex: 1 0 20em;
  padding: 0.2em;
  border: 2px solid lightblue;
  /*background-color: hsla(0, 100%, 80%, 50%);*/
}

(见https://jsfiddle.net/bz71qptu/1/

在前面的代码中,.box 元素不会扩展到其子元素的宽度。我怎样才能做到这一点?

编辑

我在 jsfiddle 中添加了一个我希望在视觉上实现的示例

编辑 2

我需要稍微更改问题以适应我的特定问题。父元素与flex-direction: column 对齐,这意味着使用min-width 似乎不起作用。如果没有这个,min-width 解决方案将是完美的。

编辑 3

我非常感谢大家的帮助,但我不确定我在示例中是否准确捕捉到了我想要的行为,即使得到了所有建议,我似乎也无法做到让它做我想做的事。这是一个更好的jsfiddle,如果你看这个,我已经设置了边框以显示所有内容。我已经通读了答案,看看我是否可以根据我的情况调整它们,但我不太明白。如果这个小提琴已经得到回答,我深表歉意。

【问题讨论】:

  • 检查浏览器对content 值的支持。
  • 根据mdn 没有浏览器支持内容。还有其他方法吗?
  • 可能是当前的浏览器无法处理我的要求 - 在这种情况下,我可以使用额外的包装元素吗?
  • 经过大量努力,我相信当前的 css/浏览器无法做到这一点
  • 解决方案 不是问题的答案,但我的解决方案是允许 flex 调整子元素的大小,然后调整父元素的大小以匹配每次绘制。显然,布局引擎会更好地处理这件事(可能快一个数量级),但由于我的代码没有动画,所以我可以摆脱它。

标签: html css overflow flexbox


【解决方案1】:

修改后的答案

您修改后的问题将flex-directionrow 更改为column

通过此调整,应用于.boxflex 属性不再适合您的用途,因为它现在可以处理垂直尺寸。换句话说,column flex 属性控制高度而不是宽度。

然而,正如我在 cmets 中提到的,将 overflow: auto 添加到 .box 似乎效果很好(在 Chrome、FF 和 IE11 中测试)。

DEMO

您在 cmets 中提到它破坏了布局引擎。布局对我来说很糟糕,在 jsFiddle 中也是如此。只需再次点击 [RUN] 即可。

自从 jsFiddle 几天/几周前(?)启动升级以来,它一直在引起一些混乱,因为它现在缓存代码。您可能需要清除 jsFiddle cookie(转到浏览器中的 chrome://settings/cookies)或在加载后再次运行修改后的代码。


原始答案

flex-basis 值不是content,而是auto0

The content value isn't supported yet.

事实上,也许只是flex: 1 对你有用。

看这里:

【讨论】:

  • 我删除了令人困惑的flex-basis: content 并将其替换为“自动”。如您所见,问题仍然存在 - 孩子溢出,但父母没有。
  • 尝试将overflow: auto;添加到.box
  • 这确实打破了 chromium 的布局引擎 :)(试试看)
【解决方案2】:
  • class .box 是一个 flexbox 容器和一个 flexed 子类 .container

display: flex 使其充当 flexbox 容器

flex: 1 0 auto 定义了它作为孩子的行为方式(.container

  • .element 类是 .box 类的弹性子类

display: flex 使 .element 充当 flexbox 容器并且在您的 fidde 中没有任何效果(仅当 .element 有孩子时)

flex: 1 0 auto 定义了它作为孩子的行为方式(.box

由于您没有为类.element 定义任何大小,但1000em 为类.containerflex-shrink: 0(在flex: 1 0 auto 中)为类.box.element 所有元素对定义的1000em 做出反应,并且只能增长到1000em

flex: 1 0 auto 都更改为flex: 1(默认为flex: 1 1 auto),您的问题已得到解答!

小更新.element 更改为 flex: 1; min-width: 1000em

Fiddle

【讨论】:

  • 我不想让孩子缩水。我希望它溢出并创建滚动条,但我希望父背景与孩子的大小相匹配。
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2021-03-11
  • 2019-07-26
  • 2017-09-25
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多