Как сделать прокрутку для внутреннего блока?

#html #css

Вопрос:

У меня есть дочерний блок .body , мне нужно сделать вертикальную прокрутку, если содержимое не подходит для родителя #container . Просто прокручивайте содержимое внутри .body и не прокручивайте .header .

 #container {
  min-height: fit-content;
  max-height: 50%;
  overflow-y: auto;
  border: 1px solid red;
  overflow: hidden;
}

.body {
  overflow-y: scroll;
  height: inherit;
}

.item {
  padding: 20px;
  height: 70px;
  border-bottom: 1px solid #ccc
} 
 <div id="container">
  <div>
    Header
  </div>
  <div class="body">
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
  </div>
</div> 

Мой полный код таков:

Ответ №1:

Чтобы сделать .body его прокручиваемым, вы должны присвоить ему определенную высоту.

Это, в свою очередь, означает, что вы должны назначить #container определенную высоту:

 #container {
  height: 50vh;
  border: 1px solid red;
  overflow: hidden;
}

.body {
  overflow-y: scroll;
  height: inherit;
}

.item {
  padding: 20px;
  height: 70px;
  border-bottom: 1px solid #ccc
} 
 <div id="container">
  <div>
    Header
  </div>
  <div class="body">
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
  </div>
</div> 

Комментарии:

1. Вы изменили только высоту: 50vh;? Что делать, если мне нужен родительский контейнер с 80% полной высоты?

2. В полный рост чего? 🙂 Я предположил, что вы собираетесь использовать 50% высоты окна, поэтому, если вы хотите 80%, просто используйте 80vh

Ответ №2:

Привет,

Просто дайте заданную высоту конатайнеру, а не fit-content

подобный этому

 #container {
  min-height: fit-content;
  max-height: 50%;
  overflow-y: auto;
  border: 1px solid red;
  overflow:hidden;
  height: 200px;
}
 

Смотрите Фрагмент ниже

 #container {
  min-height: fit-content;
  max-height: 50%;
  overflow-y: auto;
  border: 1px solid red;
  overflow:hidden;
  height: 200px;
  
}

.body {
  overflow-y:scroll;
  height: inherit;
}

.item {
  padding: 20px;
  height: 70px;
  border-bottom: 1px solid #ccc
} 
 <div id="container">
  <div>
  Header
  </div>
  <div class="body">
      <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
            <div class="item">
      Item
      </div>
  </div>
</div> 

Ответ №3:

Вот ты где

 #container {
  height: 50vh;
  border: 1px solid red;
  display: flex;
  flex-direction: column;
}

.body {
  overflow-y: auto;
}

.item {
  padding: 20px;
  height: 70px;
  border-bottom: 1px solid #ccc;
} 
 <div id="container">
  <div>
    Header
  </div>
  <div class="body">
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
    <div class="item">
      Item
    </div>
  </div>
</div>