Модель Flexbox и вертикальной прокрутки в полный рост, используя новые приложения на основе API-интерфейса
Я хочу использовать приложение полной высоты с помощью flexbox. Я нашел то, что хочу, используя старый flexbox (display: box; и другие вещи) в этой ссылке: CSS3 Flexbox full-height app и overflow
это правильное решение для старой версии свойств css flexbox.
Если я хочу попробовать использовать новые свойства flexbox, я попытаюсь использовать второе решение в той же ссылке, но "взлом" flexbox используя контейнер с высотой: 0px; это делает, чтобы показать вертикальная прокрутка.
мне это не очень нравится, потому что это вводит другие проблемы и это больше workarround чем решение.
Я подготовил jsfiddle с базовым примером:http://jsfiddle.net/ch7n6/
#container {
display: -webkit-flex;
-webkit-flex-direction: column;
height: 100%;
}
#container article {
-webkit-flex: 1 1 auto;
overflow-y: scroll;
}
это "полноразмерный html-веб", а нижний колонтитул находится внизу из-за flexbox элемента содержимого. Я предлагаю вам переместить панель между кодом css и результатом, чтобы имитировать разную высоту.
3 ответа:
Спасибо https://stackoverflow.com/users/1652962/cimmanon это дало мне ответ.
решение устанавливает высоту для вертикального прокручиваемого элемента. Например:
#container article { -webkit-flex: 1 1 auto; overflow-y: auto; height: 0px; }
элемент будет есть высота, потому что flexbox пересчитывает его, если вы не хотите мин-высота так что вы можете использовать высота: 100px; что это точно так же, как: мин-высота: 100 Пикс;
#container article { -webkit-flex: 1 1 auto; overflow-y: auto; height: 100px; /* == min-height: 100px*/ }
так что лучшее решение, если вы хотите мин-высота в вертикальной прокрутке:
#container article { -webkit-flex: 1 1 auto; overflow-y: auto; min-height: 100px; }
если вы просто хотите полную вертикальную прокрутку в случае, если нет достаточно места, чтобы увидеть статью:
#container article { -webkit-flex: 1 1 auto; overflow-y: auto; min-height: 0px; }
окончательный код:http://jsfiddle.net/ch7n6/867/
редактор спецификаций Flexbox здесь.
это рекомендуется использовать flexbox, но есть несколько вещей, которые вы должны настроить для лучшего поведения.
не используйте префиксы. Без префиксов основе хорошо поддерживается в большинстве браузеров. Всегда начинайте с без префиксов, и только добавить префиксы при необходимости поддержать его.
так как ваш верхний и Нижний колонтитулы не предназначены для сгибания, они оба должны иметь
flex: none;
установить на них. Прямо сейчас у вас есть подобное поведение из-за некоторых перекрывающихся эффектов, но вы не должны полагаться на это, если вы не хотите случайно запутать себя позже. (По умолчанию:flex:0 1 auto
, поэтому они начинаются на своей автоматической высоте и могут уменьшаться, но не расти, но они такжеoverflow:visible
по умолчанию, который запускает их по умолчаниюmin-height:auto
предотвратить их от сжимать на всех. Если вы когда-нибудь установитеoverflow
на них, поведениеmin-height:auto
изменения (переключение на ноль, а не на минимальное содержание), и они внезапно раздавят экстра-высокие<article>
элемент.)вы можете упростить
<article>
flex
тоже - просто наборflex: 1;
и вы будете хорошо идти. Попробуйте придерживаться общих значений в https://drafts.csswg.org/css-flexbox/#flex-common если у вас нет веской причины делать что - то более сложное-они легче читаются и охватывают большинство поведений, которые вы хотите вызвать.
текущая спецификация говорит об этом в отношении
flex: 1 1 auto
:размеры элемента на основании
width
/height
свойства, но делает они полностью гибкие, так что они поглощают любое свободное пространство вдоль основной ось. Если все элементы либоflex: auto
,flex: initial
илиflex: none
, любое положительное свободное пространство после того как детали были определены размер будет распределенный равномерно к деталям сflex: auto
.http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/#flex-common
мне кажется, что если вы говорите, что элемент имеет высоту 100 пикселей, он больше похож на "предложенный" размер, а не на абсолют. Поскольку ему разрешено сжиматься и расти, он занимает столько места, сколько ему разрешено. Вот почему добавление этой строки в ваш" основной " элемент работает:
height: 0
(или любое другое небольшое число).