Скажем, у вас есть это:
html, body {margin: 0; padding: 0}
.box {width: 100vw; height: 100vh}
<div class="box">Screen 1</div>
Вы получите то, что заполняет экран, без полос прокрутки. Но добавьте еще:
<div class="box">Screen 1</div>
<div class="box">Screen 2</div>
Вы получаете не только вертикальные полосы прокрутки (как ожидается), но и небольшую горизонтальную прокрутку.
Я понимаю, что вы можете опустить ширину или установить ее на width: 100%, но мне любопытно, почему это происходит. Разве 100vw не должно быть "100% ширины области просмотра"?
Ответы:
Как уже объяснялось в wf4, горизонтальная прокрутка присутствует из-за вертикальной прокрутки. которую вы можете решить, дав
max-width: 100%
..box { width: 100vw; height: 100vh; max-width:100%; /* added */ }
Рабочая скрипка
источник
max-width: 100%
это ширина области просмотра без полос прокрутки, тогда вам100vw
в первую очередь не нужно :-) Вы могли бы просто использовать,width: 100%
потому что элемент не имеет позиционированного предка, поэтому его ссылкой является тело.Полосы прокрутки будут включены в,
vw
поэтому будет добавлена горизонтальная прокрутка, чтобы вы могли видеть под вертикальной прокруткой.Когда у вас всего 1 коробка, она имеет ширину 100% и высоту 100%. Когда вы добавляете 2, его ширина 100% и высота 200%, поэтому срабатывает вертикальная полоса прокрутки. Когда срабатывает вертикальная полоса прокрутки, она затем запускает горизонтальную полосу прокрутки.
Вы можете добавить
overflow-x:hidden
кbody
html, body {margin: 0; padding: 0; overflow-x:hidden;} .box {width: 100vw; height: 100vh; background-color:#ff0000} .box2 {width: 100vw; height: 100vh; background-color:#ffff00}
http://jsfiddle.net/NBzVV/
источник
max-width:100%
к.box
предотвратит это.overflow
даже если вы добавите его к этому,x
ничего неpostition: sticky
будет работать.У меня была аналогичная проблема, и я предложил следующее решение с использованием переменных JS и CSS.
JS:
function setVw() { let vw = document.documentElement.clientWidth / 100; document.documentElement.style.setProperty('--vw', `${vw}px`); } setVw(); window.addEventListener('resize', setVw);
CSS:
width: calc((var(--vw, 1vw) * 100);
1vw - запасное значение.
источник
Обновление: Начиная с версии Chrome 66, я больше не могу воспроизвести поведение, указанное в вопросе. Никакого обходного пути не требуется.
Оригинальный ответ
На самом деле это ошибка, о которой сообщается в этом ответе и комментариях выше.
Хотя обходной путь в принятом ответе (добавление
.box {max-width: 100%;}
) в целом работает, я считаю примечательно, что он в настоящее время не работаетdisplay:table
(проверено в Chrome). В этом случае я нашел единственный обходной путь - использоватьwidth:100%
вместо него.display:table
display:table
иwidth:100%
источник
max-width: 100%
. Я предложил перейтиwidth: 100vw
наwidth: 100%
. Я обновил свой ответ, сделав его самодостаточным.чтобы избавиться от ширины полосы прокрутки, включенной в vw, мне пришлось сделать это:
html, body { overflow-x: hidden; height: 100vh; }
источник
*, html, body { margin: 0; padding: 0; overflow: hidden;/*add This*/ } /*and enjoy ^_^ */
источник