Comment faire un div à 100% de la hauteur de la fenêtre du navigateur
J'ai une mise en page à deux colonnes de gauche div
et un droit div
.
Le droit div
a un gris background-color
, et j'en ai besoin pour s'étendre verticalement en fonction de la hauteur de l'utilisateur de la fenêtre du navigateur. Droit maintenant, le background-color
se termine au dernier morceau de contenu que div
.
J'ai essayé height:100%
, min-height:100%;
, etc.
- Peut vous le trouverez à cette question utile stackoverflow.com/questions/1366548/...
- Bon chemin à parcourir, mais vh, vw etc unités sont connus pour être buggy. Il y a ce léger js alternative si vous en avez besoin: joaocunha.github.io/vunit
- Voici une explication simple et efficace de la CSS
height
propriété avec des valeurs en pourcentage: stackoverflow.com/a/31728799/3597276 - vous pouvez utiliser de la hauteur: 100vh; propriété css
Vous devez vous connecter pour publier un commentaire.
Il ya un couple de CSS 3 unités de mesure, appelée:
Fenêtre d'affichage de Pourcentage (ou Fenêtre d'affichage Relatif) Longueurs
Quels sont Viewport Pourcentage des Longueurs?
De la liés W3 Candidat à la Recommandation ci-dessus:
Ces unités sont
vh
(fenêtre d'affichage de la hauteur),vw
(largeur de visualisation),vmin
(viewport longueur minimale) etvmax
(viewport longueur maximale).Comment cela peut-il être utilisé pour faire un diviseur de remplir la hauteur du navigateur?
Pour cette question, nous pouvons faire usage de
vh
:1vh
est égal à 1% de la fenêtre d'affichage de la hauteur. C'est-à-dire,100vh
est égale à la hauteur de la fenêtre du navigateur, indépendamment de l'endroit où l'élément est situé dans l'arborescence DOM:HTML
CSS
C'est littéralement tout ce qui est nécessaire. Voici une JSFiddle exemple de cette utilisation.
Ce que les navigateurs prennent en charge ces nouvelles unités?
C'est actuellement pris en charge sur tous les up-to-date, les principaux navigateurs du marché en dehors de Opera Mini. Découvrez Puis-je utiliser... pour un soutien supplémentaire.
Comment cela peut-il être utilisé avec plusieurs colonnes?
Dans le cas de la question à portée de main, avec un gauche et un droit de diviseur, voici une JSFiddle exemple montrant une disposition en deux colonnes, impliquant à la fois
vh
etvw
.Comment est
100vh
différentes pour100%
?Prendre cette mise en page, par exemple:
La
p
tag ici est défini à 100% de la hauteur, mais parce que son contenantdiv
a 200 pixels de hauteur, 100% de 200 pixels devient 200 pixels, pas 100% de labody
hauteur. À l'aide de100vh
au lieu de cela signifie que lep
balise sera de 100% de la hauteur de labody
quel que soit lediv
hauteur. Jetez un oeil à ce accompagnement JSFiddle facilement voir la différence!min-height:100vh
semble pour contourner ce problème.body { margin: 0 }
car même en cas debox-sizing: border-box
, la marge n'est pas inclus dans la mesure.box-sizing: border-box
contribuerait à éviter, y comprisborder
etpaddings
àheight
etwidth
. à Propos de la boîte de dimensionnement#header {height: 20vw; min-height: 64px; max-height: 128px; transition: 0.4s;}
Si vous souhaitez définir la hauteur d'un
<div>
ou de tout élément, vous devez définir la hauteur de<body>
et<html>
à 100% aussi. Ensuite, vous pouvez régler la hauteur de l'élément à 100% 🙂Voici un exemple:
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Donc, si vous avez 3 sections, il serahtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Si vous en avez la possibilité absolument position de vos éléments,
le ferait.
position:relative
et sa hauteur n'est pas à 100% de la fenêtre d'affichage. Il va ajuster le haut et le bas c'est la prochaine relative ou absolue ancêtre.Vous pouvez utiliser le port de l'unité dans le CSS:
HTML:
CSS:
* { box-sizing: border-box; }
pour empêcher que cela se produise.Vous pouvez utiliser
vh
dans ce cas qui est relatif à 1% de la hauteur de la fenêtre d'affichage...Qui signifie que si vous voulez couvrir la hauteur, tout simplement utiliser
100vh
.Regardez l'image ci-dessous je dessine pour vous ici:
Essayez l'extrait de code que j'ai créé pour vous en tant que ci-dessous:
CSS:
HTML:
paddings/margins
Toutes les autres solutions, y compris le haut-voté un avec
vh
sont sous-optimales, comparativement à la modèle flex solution.Avec l'avènement de la CSS modèle flex, la résolution de l'100% de la hauteur problème devient très, très simple: utiliser
height: 100%; display: flex
sur le parent, etflex: 1
sur les éléments d'enfant. Ils vont automatiquement occuper tout l'espace disponible dans leur conteneur.Remarque comment de simples le balisage et le CSS sont. Pas de table des hacks ou quoi que ce soit.
Le modèle flex est pris en charge par tous les principaux navigateurs ainsi que IE11+.
CSS:
HTML:
En savoir plus sur la modèle flex ici.
overflow-y: auto;
peut éviter les "conteneurs dépasse l'original de la hauteur du corps".Vous n'avez pas de mentionner quelques détails importants comme:
Voici une possibilité:
CSS:
HTML:
Il existe de nombreuses variations de cette fonction sur les colonnes qui doivent être fixés et qui sont liquides. Vous pouvez faire cela avec un positionnement absolu aussi, mais j'ai trouvé généralement de meilleurs résultats (notamment en termes de cross-browser) à l'aide de flotteurs place.
C'est ce qui a fonctionné pour moi:
HTML:
Utilisation
position:fixed
au lieu deposition:absolute
, de cette façon, même si vous faites défiler la division de l'étendre à l'extrémité de l'écran.Voici un correctif pour la hauteur.
Dans votre CSS utilisation:
Pour les navigateurs qui ne supportent pas
vh-units
, l'utilisation de modernizr.Ajouter ce script à ajouter la détection de
vh-units
)Enfin utiliser cette fonction pour ajouter de la hauteur de la fenêtre d'affichage pour
#your-object
si le navigateur ne prend pas en chargevh-units
:100%
fonctionne différemment pour la largeur et la hauteur.Lorsque vous spécifiez
width: 100%
, il signifie "prendre jusqu'à 100% de la largeur de l'élément parent ou la largeur de la fenêtre."Lorsque vous spécifiez
height: 100%
, il signifie seulement "prendre jusqu'à 100% de la hauteur disponible à partir de l'élément parent." Cela signifie que si vous ne spécifiez pas une hauteur à un élément de niveau supérieur, la hauteur de tous les enfants seront soit0
de hauteur ou de la mère, et c'est pourquoi vous devez définir l'élément supérieur d'avoir unmin-height
de la hauteur de la fenêtre.J'ai toujours spécifier le corps pour avoir un min-height de 100vh et il fait de positionnement et de calculs faciles,
Ajouter
min-height: 100%
et de ne pas spécifier une hauteur (ou le mettre sur auto). Il a totalement fait le travail pour moi:100vw === 100% de la largeur de la fenêtre d'affichage.
100vh === 100% de la hauteur de la fenêtre d'affichage.
Si vous souhaitez définir la
div
la largeur ou la hauteur de 100% de navigateur-fenêtre-taille:Pour la largeur:
100vw
À la hauteur:
100vh
Ou si vous voulez en faire plus petite taille, utiliser le CSS
calc
fonction. Exemple:Plusieurs méthodes sont disponibles pour le réglage de la hauteur d'un
<div>
à 100%.Méthode (A):
CSS:
HTML:
Méthode (B) à l'aide de vh:
CSS:
HTML:
Méthode (c) à l'aide de flex zone:
CSS:
HTML:
Cela a fonctionné pour moi:
Prises de cette page.
Essayer de mettre
height:100%
danshtml
&body
Et si vous souhaitez 2 div hauteur même utilisation ou de l'ensemble de l'élément parent
display:flex
propriété.Suffit d'utiliser le "vh" unité au lieu de "px", ce qui signifie vue-port de la hauteur.
Les éléments de bloc de consommer la totalité de la largeur de son parent par défaut.
C'est la façon de répondre à leurs exigences en matière de conception, qui est d'empiler verticalement.
Ce comportement, cependant, ne s'étend pas à la hauteur.
Par défaut, la plupart des éléments sont à la hauteur de leur contenu (
height: auto
).Contrairement à avec la largeur, vous devez spécifier une hauteur si vous voulez plus d'espace.
Par conséquent, de conserver ces deux choses à l'esprit:
CSS:
HTML:
Ici est quelque chose qui n'est pas exactement comme ce qu'on avait dans les précédentes réponses, mais il pourrait être utile pour certains:
https://jsfiddle.net/newdark/qyxkk558/10/
Utilisation FlexBox CSS
Flexbox est un ajustement parfait pour ce type de problème. Bien que surtout connu pour la pose de contenu, dans le sens horizontal, Flexbox en fait, il fonctionne tout aussi bien pour les problèmes de mise en page. Tout ce que vous avez à faire est de conclure les sections verticales dans un conteneur flex et de choisir ceux que vous souhaitez développer. Ils vont automatiquement occuper tout l'espace disponible dans leur conteneur.
L'une des options à l'aide de CSS table. Il a une grande prise en charge du navigateur et fonctionne même dans Internet Explorer 8.
JSFiddle Exemple
CSS:
HTML:
Essayer ce - testé:
Vous pouvez utiliser
display: flex
etheight: 100vh
CSS:
HTML:
Vous avez besoin de faire deux choses, l'une est à la hauteur de 100%, que vous l'avez déjà fait. La deuxième est de définir la position à l'absolu. Cela devrait faire l'affaire.
Source
vh
à la place.vh
si vous prévoyez d'utiliser le responsive design sur des appareils mobiles.Essayer le code CSS suivant:
En fait ce qui a fonctionné pour moi le meilleur est à l'aide de la
vh
propriété.Dans mon Réagir les applications que je voulais la div pour correspondre à la page élevé, même lorsque redimensionnée. J'ai essayé
height: 100%;
,overflow-y: auto;
, mais aucun d'entre eux travaillaient lors de la configuration deheight:(your percent)vh;
cela a fonctionné comme prévu.Remarque: si vous utilisez un rembourrage, coins arrondis, etc., assurez-vous de soustraire les valeurs de votre
vh
propriété pour cent, ou ajoute de la hauteur et de faire des barres de défilement apparaissent. Voici mon exemple:box-sizing: border-box;
permettrait de surmonter cela, cela signifie que la taille de la bordure est également prise en compte pour le calcul de la taille (largeur et hauteur) de l'élément.Si vous utilisez
position: absolute;
et jQuery, vous pouvez utiliserHTML
CSS
widht
(vers la fin)Vous avez à mettre en place seulement
height:100%
.CSS:
HTML:
Plus simple:
CSS:
HTML:
CSS:
HTML:
Même si cette solution est de faire avec jQuery, je même si elle peut être utile pour quiconque fait de colonnes pour les adapter à la taille de l'écran.
Pour les colonnes à partir du haut de la page, cette solution est la plus simple.
Pour les colonnes qui sont pas à partir du haut de la page (par exemple: si on commence en dessous de l'en-tête).
Première méthode s'applique la hauteur du corps et les colonnes, ce qui signifie que c'est starting_pixels +
height100%
.La deuxième méthode est la hauteur de la page affichée à l'utilisateur par l'obtention de la hauteur du corps, puis soustrait la taille d'en-tête de savoir comment beaucoup de hauteur est vers la gauche pour afficher la colonne.
Vous pouvez utiliser les CSS pour faire un div à 100% de la hauteur de la fenêtre du navigateur: