Почему flex-basis нуждается в заданной высоте?

У меня есть система чата с очень простым макетом заголовка, тела и нижнего колонтитула, за исключением того, что тело должно быть прокручиваемым. Я пытался придумать не хакерское (фиксированная высота для каждого окна просмотра) решение, и это был окончательный результат, который получился совершенно случайно:

  flex-basis: auto;
  overflow-y: scroll;
  height: 1px;

Он отлично работает во всех разрешениях, тело занимает столько места, сколько может, а остальная часть прокручивается, как задумано. Проблема в том, что я не очень понимаю это решение, разве flex-basis: auto не должно быть достаточно для этого расчета? почему я должен установить высоту?

Я установил его равным 1px, потому что, если высота больше, чем доступное пространство, высота имеет приоритет над высотой гибкости.

Улучшение производительности загрузки с помощью 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
0
1 484
1

Ответы 1

[flex-basis] defines the default size of an element before the remaining space is distributed. It can be a length (e.g. 20%, 5rem, etc.) or a keyword. The auto keyword means "look at my width or height property" (which was temporarily done by the main-size keyword until deprecated). The content keyword means "size it based on the item's content" - this keyword isn't well supported yet, so it's hard to test and harder to know what its brethren max-content, min-content, and fit-content do.

Вероятно, это связано с тем, что при установке для него значения auto он ищет свойство ширины или высоты, которое в противном случае не установлено.

Дополнительные сведения о flexbox см. в статье https://css-tricks.com/snippets/css/a-guide-to-flexbox/.

Если вы хотите, чтобы контейнер увеличивался до выделенного пространства без определения заданной высоты/ширины, вы всегда можете использовать flex-grow.

[flex-grow] defines the ability for a flex item to grow if necessary. It accepts a unitless value that serves as a proportion. It dictates what amount of the available space inside the flex container the item should take up.

If all items have flex-grow set to 1, the remaining space in the container will be distributed equally to all children. If one of the children has a value of 2, the remaining space would take up twice as much space as the others (or it will try to, at least).

Спасибо, что нашли время ответить! Я пробовал flex-grow, однако это не сработало, как предполагалось.

Selhar 08.02.2019 18:14

Одна вещь, которую следует иметь в виду при использовании flex-grow, заключается в том, что элемент будет расти только до того места, которое позволяет родительский элемент, например, если для высоты страницы установлено значение 100%, даже если содержимого недостаточно для его заполнения. Пример можно увидеть здесь: jsfiddle.net/Мэттью_/90gLy6nw/6

Matthew Varga 08.02.2019 19:07

Это первоначальная проблема, я не хочу устанавливать высоту вручную. В идеале высота будет рассчитана, я не мог создать это с помощью flex-grow. Высота 100vh не является допустимым решением, так как я должен учитывать верхний и нижний колонтитулы.

Selhar 08.02.2019 19:21

если вы посмотрите на скрипт, который я разместил, тело контента на самом деле не имеет никакой высоты, только тег html и body

Matthew Varga 08.02.2019 19:26

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