CSS Units-в чем разница между vh/vw и %?
Я только что узнал о новом и необычном блоке CSS. vh
и vw
измерьте процент высоты и ширины окна просмотра соответственно.
Я посмотрел на этот вопрос из переполнения стека, но это сделало единицы еще более похожими.
ответ, в частности, говорится:
vw и vh-это процент от ширины и высоты окна, соответственно: 100vw-100% за ширина, 80vw 80%, etc.
это похоже на то же самое, что и %
блок, который более общий.
в инструментах разработчика я попытался изменить значения с vw / vh на % и viceversa и получил тот же результат.
есть ли разница между двумя? Если нет, то почему эти новые единицы были введены в CSS3
?
4 ответов
100%
может быть 100%
высоту чего-либо. Например, если у меня есть родитель div
это 1000px
высокий, и ребенок div
это at 100%
высота, тогда этот ребенок div
теоретически может быть намного выше высоты иллюминатора или намного меньше высоты иллюминатора, хотя div
установлен в размере 100%
высота.
если я вместо этого сделаю этого ребенка div
установлена в размере 100vh
, потом только заполнить 100%
высоты окна просмотра, и не обязательно родитель div
.
посмотреть этот jsfiddle:
body,
html {
height: 100%;
}
.parent {
background: lightblue;
float: left;
height: 200px;
padding: 10px;
width: 50px;
}
.child {
background: pink;
height: 100%;
width: 100%;
}
.viewport-height {
background: gray;
float: right;
height: 100vh;
width: 50px;
}
Я знаю, что вопрос очень старый, и @Josh Beam обратился к самой большой разнице, но есть еще один:
Предположим, у вас есть <div>
, прямым потомком <body>
что вы хотите заполнить весь видовой экран, поэтому вы используете width: 100vw; height: 100vh;
. Все это работает так же, как width: 100%; height: 100vh;
пока вы не добавите больше контента и не появится вертикальная боковая панель. С vw
учетная запись боковой панели как часть окна просмотра,width: 100vw;
будет немного больше, чем width: 100%;
. Эта маленькая разница заканчивается добавление горизонтальной боковой панели (требуется, чтобы пользователь видел эту небольшую дополнительную ширину), и, как следствие, высота также будет немного отличаться в обоих случаях.
это необходимо учитывать при принятии решения о том, какой из них использовать, даже если размер родительского элемента совпадает с размером окна просмотра документа.
пример:
используя width:100vw;
:
.fullviewport {
width: 100vw;
height: 100vh;
background-color: red;
}
.extracontent {
width: 100vw;
height: 20vh;
background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
используя width:100%;
:
.fullviewport {
width: 100%;
height: 100vh;
background-color: red;
}
.extracontent {
width: 100%;
height: 20vh;
background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
блоки vw (view-width) и vh (view-height) реляционны к размеру view-port, где 100vw или vh 100% из ширины/высоты view-port.
например, если порт просмотра имеет ширину 1600px, и вы указываете что-то как 2vw, это будет эквивалентно 2% ширины порта просмотра или 32px.
% единица всегда основана на ширине родительского элемента текущего элемента
Спасибо за ваш ответ и пример кода, @IanC. Это мне очень помогло. Пояснение: Я считаю, что вы имели в виду "полосу прокрутки", когда писали "боковая панель"."
вот некоторые связанные обсуждения о единицах просмотра, подсчитывающих полосы прокрутки, которые я также нашел полезными:
почему vw включает полосу прокрутки в качестве части окна просмотра?
использование 100vw вызывает горизонтальное обрезание, когда вертикальные полосы прокрутки настоящее
на W3C spec для блоков vw, vh, vmin, vmax ("процентные длины видового экрана") говорится: "предполагается, что никаких полос прокрутки не существует".
по-видимому, Firefox вычитает ширину полосы прокрутки из 100vw, как комментарий @Nolonar в разница между шириной: 100% и шириной: 100vw? замечает, ссылаясь на "Могу ли я использовать".
Могу Ли Я Использовать, возможно, в напряжении со спецификацией (?), говорит, что все браузеры, кроме Firefox, в настоящее время" неправильно " считают 100vw всей шириной страницы, включая вертикальную полосу прокрутки.