Подтвердить что ты не робот

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

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

Простым решением было установить ширину и высоту до 50vw. Это отлично работает, пока не появится полоса прокрутки. Я много раз работал в Googled и не мог понять, почему на земле 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.

4b9b3361

Ответ 1

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

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%;
}

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

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

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


После того, как я наткнулся на мой собственный ответ, я думаю, что он нуждается в некоторой доработке. семантическая неоднозначность - вот почему я заменил слово "включить" на "причина" сверху. Поскольку это больше факт, что единицы vw принимают во внимание только размер области просмотра - не включая полосу прокрутки и не вызывает переполнение и полосу прокрутки в другом направлении, когда его ширина добавляется к 100vw (делая общее пространство, которое необходимо, область просмотра плюс ширина полосы прокрутки, превышающая экран).

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

Я отредактировал идею, включающую переменную CSS, какой бы обнадеживающей она ни казалась.

Ответ 2

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

ПОТОМУ ЧТО СТАНДАРТНЫЕ МАШИНЫ СТУПИДЫ

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

Одним простым способом является сохранение полосы прокрутки всегда вокруг и ее рассмотрение

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

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

Я считаю, что они серьезно напортачили пух на этом.

Ответ 3

html { overflow-x: hidden; }

похоже, работает