Pourquoi vw inclut-il la barre de défilement dans le viewport?

j'essaye de construire un site web qui a beaucoup de boîtes qui sont de même largeur et hauteur. Par exemple, j'ai une page qui a 2 boîtes de taille égale côte à côte.

la solution simple était de régler la largeur et la hauteur à 50vw. Cela fonctionne bien jusqu'à ce qu'il y ait une barre de rouleau. J'ai cherché sur Google pendant des heures et je ne comprends pas pourquoi sur terre vw et vh incluaient les barres de défilement dans le viewport.

voici un échantillon de mon numéro

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

Avis indésirables barre de défilement horizontale

https://jsfiddle.net/3z887swo/

Une solution possible serait d'utiliser des pourcentages pour les largeurs, mais vw pour la hauteur, mais il ne sera jamais parfait boîte qui n'est pas la pire chose dans le monde, mais pas encore idéal. Voici un échantillon

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

est-ce que quelqu'un sait pourquoi vw/vh inclut les barres de défilement dans le viewport? Aussi, si quelqu'un a une meilleure solution que la mienne, j'aimerais l'entendre. Je cherche une solution CSS pure. Je préfère ne pas avoir javascript.

15
demandé sur Kevin 2015-04-10 03:59:18

3 réponses

ce serait pratique si les unités de viewport n'incluaient pas de barres de défilement mais c'est la taille d'affichage (écran) après tout. Regardez cette solution avec un pseudo-élément cependant:

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

fait pour un carré dans votre exemple aussi bien:

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

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

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

éditer-si quelqu'un se demande pourquoi cela fonctionne (rembourrage vertical répondant à la largeur de l'élément d'origine)... c'est en gros comme ça qu'il est défini dans la spécification:

le pourcentage est calculé en fonction de la largeur de la boîte générée contenant le bloc, même pour les "dessus de rembourrage" et les "dessous de rembourrage".

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

7
répondu Shikkediel 2016-02-22 23:38:54

j'ai une réponse différente, et ressentent le besoin de partager ma frustration

BECAUSE STANDARD-MAKERS ARE STUPID

(les commissions, en général, sont toujours)

une solution simple est de garder le scrollbar toujours autour et être traitée avec elle

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

(utilisez overflow-x pour un layout qui utilise vh )

je crois qu'ils sont sérieux vissé le pooch sur celui-ci.

24
répondu ZJR 2015-10-09 18:50:52
html { overflow-x: hidden; }

semble fonctionner

0
répondu Yleaxeman 2016-09-13 08:30:30