【问题标题】:Flex items expanding to content heightFlex 项目扩展到内容高度
【发布时间】:2015-08-08 07:29:26
【问题描述】:

我正在使用 flexbox 布局在一列中放置三个 div,以便每个 div 具有相同的高度。如果内容太大,每个 div 都会显示一个滚动条。我希望每个部分只扩展到其内容的高度,但目前发生的情况是,无论其中的内容如何,​​每个部分始终是相同的高度。

如果容器是900px,每个section应该是300px,如果一个section的内容超过300px高,应该会出现一个滚动条。但是,如果假设中间部分的内容只有 100px 高,那么该部分应该只有 100px,其余部分应该填充剩余空间,因此它们每个都是 400px 高。

示例:http://jsfiddle.net/x6puccbh/2/

正如您在此示例中所见,中间部分与其他部分的高度相同,但我希望它仅与内容一样高。这可以使用 flex 布局吗?

<div class="container">
    <div class="panel">
        <div class="section">
            <div class="header">HEADER</div>
            <div class="content">content<br>content<br>content<br>content
                <br>content<br>content<br>content<br>content
                <br>content<br>content<br>content<br>content</div>
        </div>
        <div class="section">
            <div class="header">HEADER</div>
            <div class="content">content</div>
        </div>
        <div class="section">
            <div class="header">HEADER</div>
            <div class="content">content<br>content<br>content<br>content
                <br>content<br>content<br>content<br>content
                <br>content<br>content<br>content<br>content
            </div>
        </div>
    </div>
 </div>

.container {
    height: 300px;
}

.panel {
    display:flex;
    flex-direction: column;
    height: 100%;
}

.header {
    height: 15px;
    text-align: center;
    flex-shrink: 0;
}

.section {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: auto;
    height: 100%;
    border: 1px solid red;
    display: flex;
    flex-direction: column;
}

.content {
    overflow-y: auto;
    height: 100%;
}

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    如果您将高度更改为自动,我认为它可以满足您的要求。下面的示例和当前代码。如果这不是你想要的,请告诉我

    http://plnkr.co/edit/MMjXmANacvZvHofXzYoL

        .container {
        height: 300px;
    }
    
    .panel {
        max-height: 100%;
        display:flex;
        flex-direction: column;
    }
    
    .header {
        height: 15px;
        text-align: center;
        flex-shrink: 0;
    }
    
    .section {
        border: 1px solid red;
        display: flex;
        flex-direction: column;
        max-height: 33%;
        flex-grow: 1;
    }
    
    .content {
        overflow-y: auto;
    }
    

    【讨论】:

    • 这就是我要找的,但是如果内容太大,我需要每个部分都显示一个滚动条。在您的代码中,容器为 300px,但总内容高度为 500px,但仍然没有滚动条。
    • 如果您将 max-height 添加到面板,它仍将保持相对尺寸,同时将整个容器保持在 300 像素。您可以向内容添加最小高度,以便它也显示最少的内容
    • 实际上不应该有面板的最大高度,我希望面板伸展到其容器的整个高度。此外,内容也不应该有最小高度。
    • 我想我不确定你在找什么。第一个示例让面板增长到任意大小,部分的大小仅与其内容一样高。如果没有某种设定的高度,内容将继续增长。因此,如果不设置高度,我不确定您希望滚动条何时出现。
    • 每个section的高度应该是等分的,比如容器是900px,每个section应该是300px,如果一个section的内容超过300px高,滚动条应该出现。但是,如果让我们说中间部分的内容只有 100px 高,那么该部分应该只有 100px,其余部分应该填充剩余空间,所以它们每个都是 400px 高。
    【解决方案2】:

    尝试在您不想变得太大但使用 vh 而不是 % 的容器上设置 max-height 属性(如 75vh 而不是 75%)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多