Проблемы CSS при использовании vh и vw с FlexBox

Я хочу создать панель с ее основным содержимым (PAGE CONTENT) и расположенным справа списком командных кнопок с заголовком. Вся страница должна уменьшаться или увеличиваться в зависимости от области просмотра (это будет использоваться на сенсорном планшете, поэтому в альбомной / книжной ориентации необходимо пропорционально изменить размер всех элементов).

Вот мой фрагмент кода HTML:

.panel-container {
  width: 100%;
  display: flex;
  flex-direction: row;
  padding: 0px;
  margin: 0px;
}

.panel-container-left {
  flex-grow: 1;
  flex-shrink: 0;
}

.panel-container-right {
  justify-self: flex-end;
}

.title {
    background-color: grey;
    color: white;
    margin: 5px;
    width: 25vw;
    height: 10vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

.stacked {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100vh;
    overflow-y: scroll;
}

.button {
  background-color: blue;
  color: white;
  margin: 5px;
  width: 25vw;
  height: 10vh;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class = "panel-container">
  <div class = "panel-container-left">
    PAGE CONTENT
    <div class = "button">
      Button Page
    </div>
  </div>
  <div class = "panel-container-right">
    <div class = "title">
      TITLE
    </div>
    <div class = "stacked">
    <div class = "button">
      Button 1
    </div>
    <div class = "button">
      Button 2
    </div>
    <div class = "button">
      Button 3
    </div>
    <div class = "button">
      Button 4
    </div>
    <div class = "button">
      Button 5
    </div>
    <div class = "button">
      Button 6
    </div>
    <div class = "button">
      Button 7
    </div>
    <div class = "button">
      Button 8
    </div>
    <div class = "button">
      Button 9
    </div>
    <div class = "button">
      Button 10
    </div>
    </div>
  </div>
</div>

Я не могу заставить работать правильную панель. Что мне нужно, так это сохранить все кнопки одинакового размера и одинакового размера заголовка панели и кнопки панели. Если высота уложенных кнопок увеличивается, мне нужно прокрутить по оси Y, но никогда не выходить за границы экрана и не терять пропорциональный размер по сравнению с заголовком и кнопкой панели.

В настоящее время кнопки панели сжимаются, чтобы держать в поле зрения все 10 кнопок, где я хотел прокрутку по оси Y с кнопками того же размера, что и кнопка панели.

Можете ли вы создать фрагмент кода прямо здесь, в своем вопросе? Это предпочтительный способ. Сайты с внешним кодом следует использовать только в том случае, если необходимые функции фрагмента недоступны в самом StackOverflow.

connexo 30.08.2018 13:17

@connexo: Готово. Я забыл об этой новой функции ...

Mendes 30.08.2018 13:20

Это не совсем новое ...

connexo 30.08.2018 13:22

«Вся страница должна уменьшаться или увеличиваться в зависимости от области просмотра (это будет использоваться на сенсорном планшете, поэтому в альбомной / книжной ориентации необходимо пропорционально изменить размер всех элементов)». Есть ощущение, что для этого вам нужно пройти медиа-запросы ..

Raymond Nijland 30.08.2018 13:23
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
2 331
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я понял это правильно, вы должны попытаться установить максимальную ширину правой панели на 100vh, а затем добавить overflow-y для прокрутки.

.panel-container-right {
  max-height: 100vh;
  overflow-y: scroll;
}
Ответ принят как подходящий

Я задокументировал все изменения в CSS. Надеюсь это поможет.

.panel-container {
  width: 100%;
  display: flex;
  /* flex-direction: row; NOT NECESSARY, IS THE DEFAULT */
  padding: 0px;
  margin: 0px;
}

/* NOT NECESSARY
.panel-container-left {
  flex-grow: 1;
  flex-shrink: 0;
}
*/

.panel-container-right {
  /* justify-self: flex-end; THIS DOES NOT EXIST */
}

.title {
    background-color: grey;
    color: white;
    margin: 5px;
    width: 25vw;
    height: 10vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

.stacked {
    /* display: flex; 
    flex-direction: column; */
    width: 100%;
    height: 80vh; /* TITLE IS 10VH + A BIT EXTRA FOR THE EFFECT */
    overflow-y: scroll;
}

.button {
  background-color: blue;
  color: white;
  margin: 5px;
  width: 25vw;
  height: 10vh;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class = "panel-container">
  <div class = "panel-container-left">
    PAGE CONTENT
    <div class = "button">
      Button Page
    </div>
  </div>
  <div class = "panel-container-right">
    <div class = "title">
      TITLE
    </div>
    <div class = "stacked">
    <div class = "button">
      Button 1
    </div>
    <div class = "button">
      Button 2
    </div>
    <div class = "button">
      Button 3
    </div>
    <div class = "button">
      Button 4
    </div>
    <div class = "button">
      Button 5
    </div>
    <div class = "button">
      Button 6
    </div>
    <div class = "button">
      Button 7
    </div>
    <div class = "button">
      Button 8
    </div>
    <div class = "button">
      Button 9
    </div>
    <div class = "button">
      Button 10
    </div>
    </div>
  </div>
</div>

Что решило проблему, так это удаление display: flex из штабеля ... Я не могу понять почему, поскольку я открываю новый div section в качестве родительского раздела ...

Mendes 30.08.2018 13:42

@Mendes Взгляните сюда: stackoverflow.com/questions/14962468/…

Gerard 30.08.2018 13:46

Другие вопросы по теме