У меня есть макет с двумя столбцами - слева div
и справа div
.
Справа div
есть серый background-color
, и мне нужно, чтобы он расширялся по вертикали в зависимости от высоты окна браузера пользователя. Сейчасbackground-color
заканчивается последний кусок контента в этом div
.
Я пробовал height:100%
, min-height:100%;
и т.д.
height
свойства CSS с процентными значениями: stackoverflow.com/a/31728799/3597276Ответы:
Существует несколько единиц измерения CSS 3, которые называются:
ВЭкран-проценты (или ВЭкран-Относительные) Длины
Что такое длина просмотра в процентах?
Из приведенной выше рекомендации кандидата W3:
Этими единицами являются
vh
(высота области просмотра),vw
(ширина области просмотра),vmin
(минимальная длина области просмотра) иvmax
(максимальная длина области просмотра).Как это можно использовать, чтобы разделитель заполнил всю высоту браузера?
Для этого вопроса мы можем использовать
vh
:1vh
равно 1% высоты области просмотра. То есть100vh
равна высоте окна браузера независимо от того, где находится элемент в дереве DOM:HTML
CSS
Это буквально все, что нужно. Вот пример использования JSFiddle .
Какие браузеры поддерживают эти новые модули?
В настоящее время это поддерживается во всех современных основных браузерах, кроме Opera Mini. Проверьте Могу ли я использовать ... для дальнейшей поддержки.
Как это можно использовать с несколькими столбцами?
В случае рассматриваемого вопроса с левым и правым делителем, вот пример JSFiddle, показывающий макет с двумя столбцами, включающий оба
vh
иvw
.Чем
100vh
отличается от100%
?Возьмите этот макет например:
p
Тег здесь установлен на 100% высоты, а потому , что она содержитdiv
имеет высоту 200 пикселей, 100% 200 пикселей становится 200 пикселей, а не 100% отbody
высоты. Использование100vh
вместо означает, чтоp
тег будет 100% высотыbody
независимо отdiv
высоты. Взгляните на этот сопровождающий JSFiddle, чтобы легко увидеть разницу!источник
min-height:100vh
кажется, обойти это.Если вы хотите установить высоту элемента
<div>
или любого элемента, вы должны также установить высоту<body>
и<html>
на 100%. Тогда вы можете установить высоту элемента на 100% :)Вот пример:
источник
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Так что, если у вас есть 3 раздела, это будетhtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Если вы в состоянии абсолютно позиционировать свои элементы,
сделал бы это.
источник
position:relative
и его высота не равна 100% области просмотра. Он отрегулирует верх и низ к своему следующему относительному или абсолютному предку.Вы можете использовать модуль view-port в CSS:
HTML:
CSS:
источник
* { box-sizing: border-box; }
чтобы предотвратить это.Вы можете использовать
vh
в этом случае, который составляет 1% от высоты области просмотра ...Это означает, что если вы хотите скрыть высоту, просто используйте
100vh
.Посмотрите на изображение ниже, которое я рисую для вас здесь:
Попробуйте фрагмент, который я создал для вас, как показано ниже:
источник
paddings/margins
Все остальные решения, включая решение с наибольшим количеством голосов,
vh
являются неоптимальными по сравнению с решением для гибкой модели .С появлением гибкой модели CSS решение проблемы 100% высоты становится очень и очень простым: использование
height: 100%; display: flex
для родительских иflex: 1
дочерних элементов. Они автоматически займут все доступное пространство в своем контейнере.Обратите внимание, насколько просты разметка и CSS. Нет таблицы взломов или что-нибудь.
Модель flex поддерживается всеми основными браузерами, а также IE11 +.
Узнайте больше о гибкой модели здесь.
источник
overflow-y: auto;
можно избежать «контейнеров превышает исходную высоту тела».Вы не упоминаете несколько важных деталей, таких как:
Вот одна из возможностей:
Есть много вариантов этого в зависимости от того, какие колонки должны быть зафиксированы, а какие - жидкие. Вы также можете сделать это с абсолютным позиционированием, но я, как правило, нашел лучшие результаты (особенно с точки зрения кросс-браузера), используя вместо этого плавающие.
источник
Вот что сработало для меня:
Используйте
position:fixed
вместо этогоposition:absolute
, даже если вы прокрутите вниз, разделение расширится до конца экрана.источник
Вот исправление для высоты.
В вашем CSS используйте:
Для браузера, который не поддерживает
vh-units
, используйте modernizr.Добавить этот скрипт (для добавления обнаружения
vh-units
)Наконец, используйте эту функцию, чтобы добавить высоту окна просмотра,
#your-object
если браузер не поддерживаетvh-units
:источник
100%
работает по-разному для ширины и высоты.Когда вы указываете
width: 100%
, это означает «занять 100% доступной ширины от родительского элемента или ширины окна».Когда вы указываете
height: 100%
, это означает только «получить 100% доступной высоты от родительского элемента». Это означает, что если вы не укажете высоту в элементе верхнего уровня, высота всех дочерних элементов будет равна0
или высоте родительского элемента, и поэтому вам нужно установить для верхнего элемента значениеmin-height
высоты окна.Я всегда указываю, чтобы тело имело минимальную высоту 100vh, и это облегчает позиционирование и вычисления,
источник
Добавьте
min-height: 100%
и не указывайте высоту (или ставьте ее на авто). Это полностью сделало работу за меня:источник
100vw === 100% ширины области просмотра.
100vh === 100% высоты окна просмотра.
Если вы хотите установить
div
ширину или высоту 100% от размера окна браузера, вы должны использовать:Для ширины:
100vw
Для высоты:
100vh
Или, если вы хотите установить его меньший размер, используйте
calc
функцию CSS . Пример:источник
Есть несколько методов для установки высоты
<div>
до 100%.Метод (А):
Метод (B) с использованием VH:
Метод (с) с использованием гибкой коробки:
источник
Это сработало для меня:
Взято с этой страницы .
источник
Проще всего сделать это так.
источник
Попробуйте установить
height:100%
вhtml
&body
И если вы хотите, чтобы высота 2 div одинакова, используйте или установите
display:flex
свойство родительского элемента .источник
Даже со всеми ответами здесь, я был удивлен, обнаружив, что никто действительно не решил проблему. Если я использовал
100vh
height
/min-height
, макет сломался, когда содержание было длиннее страницы. Если бы я вместо этого использовал100%
height
/min-height
, макет сломался, когда содержимое было меньше, чем высота страницы.Решение, которое я нашел, которое решило оба случая, заключалось в объединении двух лучших ответов:
источник
Просто используйте модуль «vh» вместо «px», что означает высоту порта просмотра.
источник
По умолчанию блочные элементы занимают всю ширину родительского элемента.
Это то, как они отвечают их требованиям к дизайну, а именно, к вертикальной укладке.
Это поведение, однако, не распространяется на высоту.
По умолчанию большинство элементов имеют высоту их содержимого (
height: auto
).В отличие от ширины, вам нужно указать высоту, если вы хотите дополнительное пространство.
Поэтому имейте в виду эти две вещи:
источник
Вот что-то, что не совсем то, что вы имели в предыдущих ответах, но может быть полезно для некоторых:
https://jsfiddle.net/newdark/qyxkk558/10/
источник
Используйте FlexBox CSS
Flexbox идеально подходит для решения подобных задач. Несмотря на то, что Flexbox в основном известен тем, что размещает контент в горизонтальном направлении, он на самом деле работает также и для задач вертикального размещения. Все, что вам нужно сделать, это обернуть вертикальные секции в гибкий контейнер и выбрать, какие из них вы хотите расширить. Они автоматически займут все доступное пространство в своем контейнере.
источник
Одним из вариантов является использование таблицы CSS. Он имеет отличную поддержку браузера и даже работает в Internet Explorer 8.
Пример JSFiddle
источник
Попробуйте это - проверено:
Изменить: 2020 обновление:
Вы можете использовать
vh
сейчас:источник
Вы можете использовать
display: flex
иheight: 100vh
источник
Вам нужно сделать две вещи, одна из них - установить высоту на 100%, что вы уже сделали. Второе - установить абсолютное положение. Это должно делать свое дело.
Источник
источник
vh
вместо этого.vh
если вы планируете использовать адаптивный дизайн на мобильных устройствах.Попробуйте следующий CSS:
источник
На самом деле, то, что работало для меня лучше всего, это использование
vh
собственности.В моем приложении React я хотел, чтобы div соответствовал максимуму страницы даже при изменении размера. Я пытался
height: 100%;
,overflow-y: auto;
но никто из них не работал, когда настройкаheight:(your percent)vh;
работала, как задумано.Примечание: если вы используете отступы, закругленные углы и т. Д., Обязательно вычтите эти значения из
vh
процента вашего свойства, или это добавит дополнительную высоту и заставит появляться полосы прокрутки. Вот мой образец:источник
box-sizing: border-box;
преодолеет это, это означает, что размер границы также учитывается при расчете размера (ширины и высоты) элемента.источник
Если вы используете
position: absolute;
и JQuery, вы можете использоватьисточник
HTML
CSS
источник
widht
(ближе к концу)