Я только что узнал о новом и необычном модуле CSS. vh
и vw
измерьте процент высоты и ширины области просмотра соответственно.
Я посмотрел на этот вопрос из Stack Overflow, но он заставил юниты выглядеть еще более похожими.
Ответ конкретно говорит
vw и vh - это процент от ширины и высоты окна, соответственно: 100vw - это 100% ширины, 80vw - 80% и т. д.
Это похоже на то же самое, что и на %
единицу, что более распространено.
В Developer Tools я попытался изменить значения с vw / vh на% и наоборот и получил тот же результат.
Есть ли разница между ними? Если нет, то почему были введены эти новые подразделения CSS3
?
css
viewport-units
Ричард Гамильтон
источник
источник
Ответы:
100%
может иметь100%
высоту чего угодно. Например, если у меня есть родитель ,div
что это1000px
высокий, и ребенок ,div
который на100%
высоте, то , что ребенокdiv
может теоретически быть гораздо выше , чем высота окна просмотра, или гораздо меньше , чем высота окна просмотра, несмотря на то, чтоdiv
устанавливается на100%
высота .Если я вместо этого
div
установлю для этого потомка значение100vh
, то оно будет только заполнять100%
высоту области просмотра , а не обязательно родителяdiv
.источник
Я знаю, что вопрос очень старый, и @Josh Beam решил самую большую разницу, но есть еще один:
Предположим, у вас есть
<div>
прямой дочерний элемент ,<body>
который вы хотите заполнить весь видовой экран, так что вы используетеwidth: 100vw; height: 100vh;
. Все это работает так же, как иwidth: 100%; height: 100vh;
до тех пор, пока вы не добавите больше контента и не появится вертикальная полоса прокрутки. Посколькуvw
учетная запись для полосы прокрутки как часть области просмотра,width: 100vw;
будет немного больше, чемwidth: 100%;
. Эта небольшая разница в итоге добавляет горизонтальную полосу прокрутки (требуется, чтобы пользователь видел эту небольшую дополнительную ширину), и, как следствие, высота также будет немного отличаться в обоих случаях.Это необходимо учитывать при принятии решения о том, какой из них использовать, даже если размер родительского элемента совпадает с размером области просмотра документа.
Пример:
Использование
width:100vw;
:Использование
width:100%;
:источник
body { overflow: hidden }
приведет к тому, что полосы прокрутки не будут отображаться.Спасибо за ваш ответ и пример кода, @IanC. Это мне очень помогло. Уточнение: я полагаю, что вы имели в виду «полосу прокрутки», когда вы написали «боковую панель».
Вот некоторые связанные обсуждения о единицах просмотра окна подсчета полос прокрутки, которые я также нашел полезными:
Почему vw включает полосу прокрутки как часть области просмотра?
Использование 100vw вызывает горизонтальное обрезание при наличии вертикальных полос прокрутки
Предотвратить 100vw от создания горизонтальной прокрутки
Разница между шириной: 100% и шириной: 100vw?
В спецификации W3C для единиц vw, vh, vmin, vmax («длина в процентах области просмотра») говорится, что «предполагается, что любые полосы прокрутки не существуют».
Очевидно, что Firefox вычитает ширину полосы прокрутки из 100vw, как @ Nolonar комментирует в Разница между шириной: 100% и шириной: 100vw? наблюдает, ссылаясь на «Могу ли я использовать».
Могу ли я использовать , возможно, в связи со спецификацией (?), Говорит, что все браузеры, кроме Firefox, в настоящее время "неправильно" считают 100vw всей шириной страницы, включая вертикальную полосу прокрутки.
источник
единицы vw (view-width) и vh (view-height) относятся к размеру порта просмотра, где 100vw или vh - это 100% ширины / высоты порта просмотра.
Например, если порт просмотра имеет ширину 1600px, и вы указываете что-то как 2vw, это будет эквивалентно 2% ширины порта просмотра, или 32px.
% unit всегда основан на ширине родительского элемента текущего элемента
источник
Есть разница, которая не обязательно была поднята. 100vw включает в себя ширину полосы прокрутки, в то время как 100% не включает ее. Это небольшая разница, но важная при выполнении дизайна.
источник