it-swarm.com.ru

Bootstrap 4, делает прокручиваемый список-группу, в ряд, с flexbox, с или без прокрутки тела

Я использую Bootstrap 4 (сейчас я на альфа-6).

У меня такая ситуация:

<body>

  <!-- HERE I HAVE one div automatically generated with randomly ID and class -->

  <div class="bigone">

    <div class="container-fluid">

      <div class="header">
        My header
      </div>

    </div>

    <div class="mybar">
      Nav bar
    </div>

    <div class="main">
      <div class="container-fluid">
        <div class="row">

          <div class="col-6">
            <div class="card">
              <div class="card-header">
                Card Header
              </div>
              <div class="list-group list-group-flush">
                <a href="#" class="list-group-item list-group-item-action"><b>FIRST LINK</b></a>
                <a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>                    
                <a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
                <a href="#" class="list-group-item list-group-item-action">Morbi leo risus</a>

                <a href="#" class="list-group-item list-group-item-action disabled"><b>LAST LINK</b></a>
              </div>
              <div class="card-footer">
                Card Footer
              </div>
            </div>
          </div>

          <div class="col-6">
            <h1>FIRST LINE</h1> So many words, so many words. So many words, so many words. So many words, so many words.
            <br> So many words, so many words. So many words, so many words. So many words, so many words.
            <br> So many words, so many words. So many words, so many words. So many words, so many words.
            <br>
            <h1>LAST LINE</h1>
          </div>

        </div>
      </div>
    </div>

    <div class="footer">
      Footer
    </div>

  </div>

  <!-- HERE THAT DIV CLOSED -->

</body>

Это css:

.bigone {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

.main {
  flex: 1;
}

Существует DEMO на plnkr: https://plnkr.co/edit/Q9PQIj8uDFY80bxJGks3

Мне нужно, чтобы нижний колонтитул был внизу, когда содержимое страницы пусто, поэтому я использую: .bigone { height: 100vh; } и Bootstrap Flexbox утилиты выравнивания, такие как: <div class="bigone d-flex flex-column">

Теперь мне нужно прокручивать list-group в card и col-6 с «таким количеством слов», чтобы иметь высоту как для max, так и для нижней части нижнего колонтитула.

В двух словах: BODY не должно иметь полосы прокрутки.

Мой верхний и нижний колонтитулы не фиксированы, они меняются.

Как? Я не эксперт по флексбоксам.

Мне не нужен IE, только Chrome.

ВАЖНЫЙ:

Я не могу зафиксировать высоту моей карты примерно так:

height: calc(100vh - header.height - footer.height - etc...);

потому что мой верхний и нижний колонтитулы и т.д. высоты меняются динамически.

Изображение проблемы:

 WHAT I NEED

9
user4412054

Согласно spec настройка flex: 1 (для элемента .main) эквивалентна flex: 1 1 0, сокращенно для:

  • flex-grow: 1
  • flex-shrink: 1
  • flex-basis: 0

Однако по какой-то причине flex: 1 не работает должным образом в вашем коде. (Я проверяю только в Chrome, на ваш вопрос).

Однако, если вы дадите .main полный сокращенный текст - и сделаете его гибким контейнером и добавите overflow - ваш макет будет работать.

.main {
    flex: 1 1 0; /* flex: 1, which you had before, is equivalent but doesn't work */
    display: flex;
    flex-direction: column;
    overflow-y: scroll;
}

исправлен plunkr

Ссылка:


EDIT (на основании изменений в вопросе)

Мой ответ выше удаляет полосы прокрутки из body и предоставляет вертикальную полосу прокрутки для раздела .main.

Чтобы сделать вертикальные полосы прокрутки доступными для каждого столбца в разделе .main, сделайте эту настройку:

.main {
    flex: 1 1 0;
    display: flex;
}
.container-fluid {
    display: flex;
}
.col-6 {
    overflow-y: auto;
}

исправлен plunkr

4
Michael_B

Я имею 

<div class="fixed-top collapse show wrapper">
 <ul class="list-group bg-white menu">
 </ul>
</div>

Я исправил это

.wrapper {
    margin-top: 48px; /* place it under navbar */
    height: 100vh;
    overflow: scroll;
    padding-bottom: 48px; /* compensate margin top */
}
0
luky