【问题标题】:Why does flex-basis needs a set height? [duplicate]为什么 flex-basis 需要设定高度? [复制]
【发布时间】:2019-02-08 13:55:00
【问题描述】:

我有一个带有非常简单的页眉-正文-页脚布局的聊天系统,除了正文需要可滚动。我一直在尝试提出一个非 hacky(每个视口的固定高度)的解决方案,这是最终结果,这完全是偶然发生的:

  flex-basis: auto;
  overflow-y: scroll;
  height: 1px;

它在所有分辨率下都能完美运行,主体占用尽可能多的空间,其余部分按预期滚动。问题是我不太了解这个解决方案,flex-basis: auto 不应该足以让这个计算发生吗?为什么我必须设置高度?

我将其设置为 1px,因为如果 height 的值高于可用空间,则 height 优先于 flex height。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    [flex-basis] 定义元素在剩余空间分配之前的默认大小。它可以是长度(例如 20%、5rem 等)或关键字。 auto 关键字的意思是“查看我的宽度或高度属性”(在弃用之前由 main-size 关键字临时完成)。 content 关键字的意思是“根据项目的内容调整大小”——这个关键字还没有得到很好的支持,所以很难测试,也很难知道它的兄弟 max-content、min-content 和 fit-content 是做什么的。

    可能是因为设置为自动时,它正在寻找宽度或高度属性,否则未设置。

    有关 flexbox 的更多信息,请参阅https://css-tricks.com/snippets/css/a-guide-to-flexbox/

    如果您希望容器增长到分配的空间而不定义设置的高度/宽度,您可以随时使用flex-grow

    [flex-grow] 定义了弹性项目在必要时增长的能力。它接受用作比例的无单位值。它规定了项目应占用的弹性容器内的可用空间量。

    如果所有项目都将 flex-grow 设置为 1,则 容器将平均分配给所有孩子。如果其中之一 children 的值为 2,剩余空间将占用两倍 和其他人一样多的空间(或者它会尝试,至少)。

    【讨论】:

    • 感谢您花时间回答!我试过 flex-grow,但它没有按预期工作。
    • 使用 flex-grow 需要记住的一点是,元素只会增长到父元素允许的空间,例如,即使没有,也将页面高度设置为 100%足够的内容来填充它。可以在这里看到一个例子:jsfiddle.net/Matthew_/90gLy6nw/6
    • 这是最初的问题,我不想手动设置高度。理想情况下,将计算高度,我无法使用 flex-grow 创建它。高度 100vh 不是一个有效的解决方案,因为我必须考虑页眉和页脚。
    • 如果你看一下我发布的小提琴,内容主体实际上并没有设置任何高度,只有 html 和 body 标签
    猜你喜欢
    • 2022-01-15
    • 2019-08-28
    • 1970-01-01
    • 2020-09-17
    • 2018-03-24
    • 2023-03-20
    相关资源
    最近更新 更多