html - Ridimensionamento Flexbox e overflow scorrevole



css css3 (1)

Aggiungi min-height: 0 a .flexGrowWrapper - vedi la demo di seguito:

$("button").click(function() {
  $(".resize").toggleClass("small");
});
.resize {
  height: 200px;
  display: flex;
  flex-direction: column;
  overflow-y: hidden;
  width: 300px;
}

.resize.small {
  height: 100px;
}

.heading {
  flex: 0 0 auto;
}

.flexGrowWrapper {
  border: 2px solid red;
  flex-grow: 1;
  min-height: 0; /* ADDED */
}

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

.content {
  display: flex;
  flex-direction: row;
  clear: both;
}
<button>
Resize
</button>
<div class="resize">
  <div class="heading">
    <label>Some heading that wont scroll</label>
  </div>
  <div class="flexGrowWrapper">
    <div class="wrapper">
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
    </div>
  </div>
</div>
<div>
  Something else here
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Perché questo funziona

Si noti che ciò è dovuto al fatto che per un flexbox a colonna il valore min-height predefinito è auto (lungo l' asse flessibile ). Di seguito puoi vedere alcuni esempi di questo comportamento:

Ho dei contenuti che sto ridimensionando e desidero avere un'intestazione fissa che non cresca / riduca e non faccia parte del contenuto scorrevole. Con il contenuto sottostante diventa scorrevole se non c'è abbastanza spazio.

Il wrapper esterno di contenuto ( flexGrowWrapper ) ha un flex-grow: 1 e il wrapper interno ha height: 100%; overflow-y: auto height: 100%; overflow-y: auto . Il processo di pensiero qui è che flexGrowWrapper riempirà tutto lo spazio rimanente all'interno del div resize , l'involucro interno prenderà quindi l'intera altezza di flexGrowWrapper e se c'è troppo pieno, dovrebbe scorrere.

Quello che sta succedendo è che flexGrowWrapper cresce per riempire l'area di resize , ma sembra che il suo contenuto stia determinando la sua altezza minima.

Come posso fare in modo che flexGrowWrapper non vada mai oltre l'altezza dell'area di resize ?

$("button").click(function() {
	$(".resize").toggleClass("small");
});
.resize {
  height: 200px;
  display: flex;
  flex-direction: column;
  overflow-y: hidden;
  width: 300px;
}

.resize.small {
  height: 100px;
}

.heading {
  flex: 0 0 auto;
}

.flexGrowWrapper {
  border: 2px solid red;
  flex-grow: 1;
}

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

.content {
  display: flex;
  flex-direction: row;
  clear: both;
}
<button>
Resize
</button>
<div class="resize">
  <div class="heading">
  <label>Some heading that wont scroll</label>
  </div>
  <div class="flexGrowWrapper">
    <div class="wrapper">
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
      <div class="content">
        content
      </div>
    </div>
  </div>
</div>
<div>
 Something else here
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Nota: ho esaminato questa domanda simile , ma sembra avere alcune differenze e non sono riuscito a far funzionare le soluzioni per me.





flexbox