Unités CSS - Quelle est la différence entre vh/vw et %?

je viens d'apprendre à propos d'une nouvelle unité CSS peu commune. vh et vw mesurent respectivement le pourcentage de hauteur et de largeur du support.

j'ai regardé cette question de Stack Overflow, mais il a fait les unités paraître encore plus similaire.

Comment fonctionne l'unité vw et vh

la réponse dit spécifiquement

vw et vh sont un pourcentage de la largeur de la fenêtre et de la hauteur, respectivement: 100vw est 100% de la largeur, 80vw est 80%, etc.

cela ressemble exactement à l'unité % , qui est plus courante.

dans Developer Tools, j'ai essayé de changer les valeurs de vw/vh à % et viceversa et j'ai obtenu le même résultat.

Est-il une différence entre les deux? Dans la négative, pourquoi ces nouvelles unités ont-elles été introduites dans CSS3 ?

58
demandé sur Community 2015-06-25 04:58:43

4 réponses

100% peut être 100% de la hauteur de n'importe quoi. Par exemple, si j'ai un parent div qui est 1000px de haut, et un enfant div qui est à 100% hauteur, alors cet enfant div pourrait théoriquement être beaucoup plus haut que la hauteur du viewport, ou beaucoup plus petit que la hauteur du viewport, même si ce div est fixé à 100% hauteur .

si je fais plutôt que enfant div fixé à 100vh , puis il sera seulement remplir 100% de la hauteur du viewport , et pas nécessairement le parent div .

voir ce jsfiddle :

output

body,
html {
    height: 100%;
}

.parent {
    background: lightblue;
    float: left;
    height: 200px;
    padding: 10px;
    width: 50px;
}

.child {
    background: pink;
    height: 100%;
    width: 100%;
}

.viewport-height {
    background: gray;
    float: right;
    height: 100vh;
    width: 50px;
}
82
répondu Josh Beam 2015-06-25 02:07:42

je sais que la question est très ancienne et @Josh Beam a abordé la plus grande différence, mais il y en a encore une autre:

supposons que vous ayez un <div> , enfant direct de <body> que vous voulez remplir l'ensemble du viewport, donc vous utilisez width: 100vw; height: 100vh; . Tout fonctionne exactement comme width: 100%; height: 100vh; jusqu'à ce que vous ajoutiez plus de contenu et qu'une barre latérale verticale apparaisse. Comme le vw compte pour la barre latérale dans le cadre du viewport, width: 100vw; sera légèrement plus grand que width: 100%; . Cette petite différence finit par ajouter une barre latérale horizontale (nécessaire pour que l'utilisateur voit cette petite largeur supplémentaire) et par conséquent, la hauteur serait également un peu différent sur les deux cas.

qui doit être pris en considération au moment de décider lequel utiliser, même si la taille de l'élément parent est la même que la taille du viewport de document.

exemple:

par width:100vw; :

.fullviewport {
  width: 100vw;
  height: 100vh;
  background-color: red;
}

.extracontent {
  width: 100vw;
  height: 20vh;
  background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>

utilisant width:100%; :

.fullviewport {
  width: 100%;
  height: 100vh;
  background-color: red;
}

.extracontent {
  width: 100%;
  height: 20vh;
  background-color: blue;
}
<html>
<body>
<div class="fullviewport"></div>
<div class="extracontent"></div>
</body>
</html>
6
répondu IanC 2017-12-05 11:43:31

les unités vw (view-width) et vh (view-height) sont relationnelles par rapport à la taille du port de vue, où 100vw ou vh représente 100% de la largeur/hauteur du port de vue.

par exemple, si un port de vue a une largeur de 1600px, et que vous spécifiez quelque chose comme étant 2vw, ce sera l'équivalent de 2% de la largeur du port de vue, ou 32px.

% unité est toujours basée sur la largeur de l'élément parent de l'élément courant

0
répondu Sreenu Bodanapati 2018-04-26 09:57:25

Merci pour votre réponse et votre exemple de code, @IanC. Il m'a beaucoup aidé. Une clarification: je crois que vous vouliez dire " scrollbar "quand vous avez écrit" sidebar."

voici quelques discussions connexes sur le comptage des unités de viewport scrollbars que j'ai aussi trouvé utiles:

Le W3C spec pour les vw, vh, vmin, vmax parts (la "fenêtre d'affichage de pourcentage longueurs"), dit "des barres de défilement sont censés ne pas exister".

apparemment Firefox soustrait la largeur du scrollbar de 100vw, comme le commentaire de @Nolonar à différence entre la largeur: 100% et la largeur: 100vw? observe, citant "puis-je utiliser".

puis-je utiliser , peut-être en tension avec le spec (?), dit tous les navigateurs autres que Firefox actuellement" incorrectement " considèrent 100vw pour être la largeur de la page entière, y compris la barre de défilement verticale.

0
répondu Slack Undertow 2018-05-19 00:18:30