【问题标题】:Prevent CSS3 flex-shrink from crushing content防止 CSS3 flex-shrink 压缩内容
【发布时间】:2013-11-16 08:14:09
【问题描述】:

我正在尝试在 CSS3 中创建一个灵活的布局,其中 3 个盒子相互堆叠。这些盒子是兄弟姐妹,因此具有相同的父元素。第一个框的高度必须适合其内容。以下两个框的高度应增长以适合其各自的内容,直到它们即将溢出其父级。在这种情况下,它们将收缩以免溢出。

问题在于,如果其中一个收缩框的内容相对于另一个收缩框而言较小,我无法弄清楚如何防止其中一个收缩框被压碎。我希望这些框缩小到不再缩小的某个点——例如,相当于两行文本。设置min-width 不是一个选项,因为我不希望框比它们的内容高,以防内容只有一行。如果任何一个盒子已经到了不再收缩的程度,并且父级无法容纳它们而不溢出,则父级将获得一个滚动条。

我事先不知道内容,所以布局必须是动态的。如果可能的话,我只想用 CSS 来解决这个问题。

下面是一个box3太小问题的例子:

p {
    margin: 0;
}
.container, .box {
    border: 1px solid black;
}
.box {
    background-color: white;
    margin: 1em;
    overflow: auto;
}
#container {
    background-color: yellow;
    display: flex;
    flex-direction: column;
    height: 15em;
    overflow: auto;
}
#box1 {
    flex: 0 0 auto;
}
#box2 {
}
#box3 {
}
<div id="container" class="container">
    <div id="box1" class="box">
        <p>◼</p>
    </div>
    <div id="box2" class="box">
        <p>◼◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◻◻◻◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◻◻◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◻◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◻◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◻◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◻◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◻◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◻◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◻◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◻◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◻◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◼◻◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◻◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◻◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◻</p>
        <p>◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼</p>
    </div>
    <div id="box3" class="box">
        <p>◼◻◻</p>
        <p>◼◼◻</p>
        <p>◼◼◼</p>
    </div>
</div>

【问题讨论】:

    标签: css flexbox


    【解决方案1】:

    如果我正确理解了您的问题,则 flex-shrink 属性应该是您正在寻找的。

    将#box1 设置为flex-shrink: 0

    将#box2 设置为flex-shrink: 1

    将#box3 设置为flex-shrink: 1

    【讨论】:

    • 我目前无法访问支持弹性盒的浏览器,但我认为 box2box3flex-shrink默认设置为1。这意味着它们会缩小直到它们的高度达到0,这就是问题所在。
    • 在推测之前先测试一下。 Flexbox 一开始是相当棘手的。
    • 它可能在示例中有效,但这只是一个示例。它在一般情况下不起作用,因为我事先不知道盒子的内容。澄清;我需要对缩小进行限制,以免框变得太窄。
    • 不,flex-shrink 不限制 flex 项目可以收缩的数量。这是一个决定它所应用的元素相对于其兄弟元素应该缩小多少的因素。我提供的问题示例只是为了说明我要解决的一般情况。我不能自然地为每个案例都提供一个例子。
    • Chromium 38 它对我有用——flex-grow 正在压碎另一个(固定)元素并将flex-shrink 设置为0 起到防止压碎的作用。谢谢你的提示!
    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多