【问题标题】:Scroll in a deeply nested flex container - min-height not working在深度嵌套的 flex 容器中滚动 - 最小高度不起作用
【发布时间】:2019-08-13 20:43:57
【问题描述】:

我有以下弹性布局。我需要在 div.stretchy 中发生溢出。我希望 div.stretchy 到达页面的边界,然后溢出它的内容。根据这个stackoverflow post,我尝试了很多min-height: 0overflow: hidden的组合,但是div.stretchy不会缩小。

body {
  margin: 0;
}

.page-wrapper {
  display: flex;
  height: 100vh;
  width: 100vw;
  overflow: hidden;
}

.sidebar {
  background: blue;
  flex: 0 0 40px;
}

.main {
  background: green;
  display: flex;
  flex-direction: column;
  flex: 1;
  min-width: 0;
}

.topbar {
  display: flex;
  flex: 0 0 40px;
  background-color: red;
}

.content {
  display: flex;
  overflow: auto;
}

.row {
  display: flex;
}

.column {
  display: flex;
  flex-direction: column;
}

.grow {
  flex-grow: 1;
}

.card {
  height: 300px;
  border: solid 1px;
  min-width: 600px;
}

.card .row {
  justify-content: space-between;
}

.wrapper {
  padding: 16px;
  height: fit-content;
}

.stats {
  padding: 8px;
  background-color: pink;
}

.overflow-hidden {
  overflow: hidden;
}

.body .column {
  background-color: indigo;
}

.wide-content {
  background-color: yellow;
  height: 50px;
  width: 800px;
}

.block {
  flex: none;
  width: 300px;
  height: 200px;
  &:nth-of-type(odd) {
    background: darken(green, 10%);
  }
}
<div class="page-wrapper">
  <div class="sidebar">sidebar</div>
  <div class="main">
    <div class="topbar">topbar</div>
    <div class="content">
      <div class="wrapper">
        <div class="card column grow">
          <div class="stats row">
            <span>12345</span>
            <span>12345</span>
            <span>12345</span>
          </div>
          <div class="body row grow">
            <div class="column">
              <span>Dynamic Width Content</span>
            </div>
            <div class="stretchy column grow overflow-hidden">
              <div class="wide-content grow"></div>
            </div>
            <div class="column">
              <span>Dynamic Width Content</span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: html css flexbox overflow


    【解决方案1】:

    这是一场艰苦的战斗。敌人狡猾、诡诈、无情。我说我们发起了一场大规模的地毯式轰炸活动,用最小尺寸覆盖整个区域。这应该可以解决 80% 的问题。然后我们派地面部队完成工作:-)

    * {
      min-width: 0 !important;
      min-height: 0 !important;
    }
    
    .page-wrapper {
      display: flex;
      height: 100vh;
      /* width: 100vw; */
      /* overflow: hidden; */
    }
    
    .sidebar {
      background: cornflowerblue;
      /* flex: 0 0 40px; */
      flex: 0 0 100px; /* changed for demo purposes */
    }
    
    .main {
      background: lightgreen;
      display: flex;
      flex-direction: column;
      flex: 1;
    }
    
    .topbar {
      display: flex;
      flex: 0 0 40px;
      background-color: orangered;
    }
    
    .content {
      display: flex;
      /* overflow: auto; */ 
      flex: 1; /* added */
    }
    
    .row {
      display: flex;
    }
    
    .column {
      display: flex;
      flex-direction: column;
    }
    
    .grow {
      flex-grow: 1;
    }
    
    .card {
      /* height: 300px; */
      border: solid 1px;
      min-width: 600px;
    }
    
    .stretchy {
      overflow: auto;
    }
    
    .card .row {
      justify-content: space-between;
    }
    
    .wrapper {
      padding: 16px;
      /* height: fit-content; */
      display: flex; /* added */
    }
    
    .stats {
      padding: 8px;
      background-color: pink;
    }
    
    .overflow-hidden {
      /* overflow: hidden; */
    }
    
    .body .column {
      background-color: violet;
    }
    
    .wide-content {
      background-color: yellow;
      height: 50px;
      width: 800px;
    }
    
    body {
      margin: 0;
    }
    
    
    /* 
    .block {
      flex: none;
      width: 300px;
      height: 200px;
      &:nth-of-type(odd) {
        background: darken(green, 10%);
      }
    }
    */
    <div class="page-wrapper">
      <div class="sidebar">sidebar</div>
      <div class="main">
        <div class="topbar">topbar</div>
        <div class="content">
          <div class="wrapper">
            <div class="card column grow">
              <div class="stats row">
                <span>12345</span>
                <span>12345</span>
                <span>12345</span>
              </div>
              <div class="body row grow">
                <div class="column">
                  <span>Dynamic Width Content</span>
                </div>
                <div class="stretchy column grow overflow-hidden">
                  <div class="wide-content grow">test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br></div>
                </div>
                <div class="column">
                  <span>Dynamic Width Content</span>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    jsFiddle demo

    【讨论】:

    • 我喜欢这个答案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2017-10-06
    • 2023-03-11
    • 2013-11-27
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多