Прокрутка в глубоко вложенном гибком контейнере - минимальная высота не работает - PullRequest
1 голос
/ 22 марта 2019

У меня есть следующий гибкий макет. Мне нужно переполнение в div.stretchy. Я бы хотел, чтобы div.stretchy достигал границы страницы, а затем переполнял ее содержимое. В этом сообщении stackoverflow я пробовал много комбинаций min-height: 0 и overflow: 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>

1 Ответ

1 голос
/ 23 марта 2019

Это тяжелая битва.Враг хитрый, лживый и беспощадный.Я говорю, что мы запускаем масштабную кампанию по бомбардировке ковров, осыпая всю территорию минимальными размерами.Это должно устранить 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

...