Почему vw включает полосу прокрутки как часть окна просмотра?

Я пытаюсь создать веб-сайт, который имеет множество ящиков одинаковой ширины и высоты. Например, у меня есть страница, которая имеет 2 одинаковых размера бок о бок.

простым решением было установить ширину и высоту до 50vw. Это отлично работает, пока не появится полоса прокрутки. Я гуглил часами и не могу понять, почему vw и vh включают полосы прокрутки как часть окна просмотра.

вот образец моего выпуск

HTML-код

<div class="container">
    <div class="box red"></div>
    <div class="box green"></div>
</div>
<div class="lotta-content"></div>

в CSS

body {
    margin: 0;
    padding: 0;
}

.container {
    width: 100vw;
}

.box {
    float: left;
    width: 50vw;
    height: 50vw;
}

.red {
    background-color: red;
}

.green {
    background-color: green;   
}

.lotta-content {
    height: 10000px;   
}

обратите внимание на нежелательную горизонтальную полосу прокрутки

https://jsfiddle.net/3z887swo/

одним из возможных решений было бы использовать проценты для ширины, но vw для высоты, но это никогда не будет идеальной коробкой, которая не является худшей вещью в мире, но все еще не идеальна. Вот образец

https://jsfiddle.net/3z887swo/1/

кто-нибудь знает, почему vw/vh включает полосы прокрутки как часть окна просмотра? Кроме того, если у кого-то есть лучшее решение, чем мое, я хотел бы его услышать. Я ищу чистое решение CSS. Я скорее не содержать JavaScript.

3 ответов


было бы удобно, если бы блоки просмотра не включали полосы прокрутки, но это размер дисплея (экран) в конце концов. Посмотреть на это решение с псевдо-элемента:

http://www.mademyday.de/css-height-equals-width-with-pure-css.html

также делает квадрат в вашем примере:

https://jsfiddle.net/3z887swo/4/

.box {
    float: left;
    width: 50%;
}

.box::before {
    content: "";
    display: block;
    padding-top: 100%;
}

Edit - если кому-то интересно, почему это работает (вертикальное заполнение отвечая на ширину исходного элемента)... это в основном, как это определено в спецификации:

процент рассчитывается относительно ширины блока, содержащего сгенерированный блок, даже для "padding-top" и "padding-bottom".

http://www.w3.org/TR/CSS2/box.html#padding-properties


у меня есть другой ответ, и чувствую необходимость поделиться своим разочарование

ПОТОМУ ЧТО ПРОИЗВОДИТЕЛИ СТАНДАРТОВ ГЛУПЫ

(комитеты, в общем, всегда)

один простой обходной путь держит полосу прокрутки всегда вокруг и иметь дело с ним

html,body {margin:0;padding:0}
html{overflow-y:scroll}

(использовать overflow-x для макета, который использует vh)

Я считаю, что они серьезно облажался на этом.


html { overflow-x: hidden; }

Кажется, что работает