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.
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".
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.