J'ai une mise en page avec deux colonnes - une gauche div
et une droite div
.
La droite div
a un gris background-color
, et j'en ai besoin pour agrandir verticalement en fonction de la hauteur de la fenêtre du navigateur de l'utilisateur. En ce moment, la background-color
fin de la dernière partie de contenu dans cela div
.
Je l' ai essayé height:100%
, min-height:100%;
etc.
height
propriété CSS avec des valeurs de pourcentage: stackoverflow.com/a/31728799/3597276Réponses:
Il existe quelques unités de mesure CSS 3 appelées:
Longueurs de pourcentage de la fenêtre (ou relatives à la fenêtre )
Quelles sont les longueurs de pourcentage de fenêtre?
De la recommandation du candidat W3 liée ci-dessus:
Ces unités sont
vh
(hauteur de la fenêtre d'affichage),vw
(largeur de la fenêtre d'affichage),vmin
(longueur minimale de la fenêtre d'affichage) etvmax
(longueur maximale de la fenêtre d'affichage).Comment cela peut-il être utilisé pour qu'un diviseur remplisse la hauteur du navigateur?
Pour cette question, nous pouvons utiliser
vh
:1vh
est égal à 1% de la hauteur de la fenêtre. Autrement dit,100vh
est égal à la hauteur de la fenêtre du navigateur, quel que soit l'emplacement de l'élément dans l'arborescence DOM:HTML
CSS
C'est littéralement tout ce qu'il faut. Voici un exemple JSFiddle de cela en cours d'utilisation.
Quels navigateurs prennent en charge ces nouvelles unités?
Ceci est actuellement pris en charge sur tous les principaux navigateurs mis à jour, à l'exception d'Opera Mini. Consultez Puis-je utiliser ... pour plus d'assistance.
Comment cela peut-il être utilisé avec plusieurs colonnes?
Dans le cas de la question en question, comportant un diviseur gauche et un diviseur droit, voici un exemple JSFiddle montrant une disposition en deux colonnes impliquant à la fois
vh
etvw
.En quoi est-ce
100vh
différent de100%
?Prenez cette disposition par exemple:
La
p
balise ici est définie sur 100% de hauteur, mais comme son conteneurdiv
a une hauteur de 200 pixels, 100% de 200 pixels devient 200 pixels, et non 100% de labody
hauteur. Utiliser à la100vh
place signifie que lap
balise aura 100% de hauteurbody
quelle que soit ladiv
hauteur. Jetez un oeil à ce JSFiddle d'accompagnement pour voir facilement la différence!la source
min-height:100vh
semble contourner cela.Si vous souhaitez définir la hauteur d'un
<div>
ou de n'importe quel élément, vous devez également définir la hauteur de<body>
et<html>
à 100%. Ensuite, vous pouvez définir la hauteur de l'élément avec 100% :)Voici un exemple:
la source
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Donc, si vous avez 3 sections, ce serahtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Si vous êtes en mesure de positionner absolument vos éléments,
le ferait.
la source
position:relative
et que sa hauteur n'est pas de 100% de la fenêtre d'affichage. Il ajustera le haut et le bas à son prochain ancêtre relatif ou absolu.Vous pouvez utiliser l'unité view-port en CSS:
HTML:
CSS:
la source
* { 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 ...Cela signifie que si vous souhaitez couvrir la hauteur, utilisez simplement
100vh
.Regardez l'image ci-dessous que je dessine pour vous ici:
Essayez l'extrait que j'ai créé pour vous comme ci-dessous:
la source
paddings/margins
Toutes les autres solutions, y compris celle la mieux notée avec,
vh
sont sous-optimales par rapport à la solution du modèle flexible .Avec l'avènement du modèle CSS flex , la résolution du problème de hauteur à 100% devient très, très facile: utilisation
height: 100%; display: flex
sur le parent etflex: 1
sur les éléments enfants. Ils occuperont automatiquement tout l'espace disponible dans leur conteneur.Notez la simplicité du balisage et du CSS. Pas de piratage de table ou quoi que ce soit.
Le modèle flex est pris en charge par tous les principaux navigateurs ainsi que IE11 +.
En savoir plus sur le modèle flex ici.
la source
overflow-y: auto;
peut éviter que "les conteneurs dépassent la hauteur d'origine du corps".Vous ne mentionnez pas quelques détails importants comme:
Voici une possibilité:
Il existe de nombreuses variantes selon les colonnes à fixer et celles qui sont liquides. Vous pouvez également le faire avec un positionnement absolu, mais j'ai généralement trouvé de meilleurs résultats (en particulier en termes de cross-browser) en utilisant des flotteurs à la place.
la source
C'est ce qui a fonctionné pour moi:
Utilisez
position:fixed
au lieu deposition:absolute
, de cette façon, même si vous faites défiler vers le bas, la division s'étendra jusqu'à la fin de l'écran.la source
Voici un correctif pour la hauteur.
Dans votre utilisation CSS:
Pour les navigateurs qui ne prennent pas en charge
vh-units
, utilisez modernizr.Ajouter ce script (pour ajouter la détection
vh-units
)Enfin, utilisez cette fonction pour ajouter la hauteur de la fenêtre d'affichage
#your-object
si le navigateur ne prend pas en chargevh-units
:la source
100%
fonctionne différemment pour la largeur et la hauteur.Lorsque vous spécifiez
width: 100%
, cela signifie «occuper 100% de la largeur disponible de l'élément parent ou de la largeur de la fenêtre».Lorsque vous spécifiez
height: 100%
, cela signifie uniquement «occuper 100% de la hauteur disponible de l'élément parent». Cela signifie que si vous ne spécifiez pas de hauteur à un élément de niveau supérieur, la hauteur de tous les enfants sera soit la0
hauteur du parent, soit la hauteur, et c'est pourquoi vous devez définir l'élément le plus haut pour avoir unemin-height
hauteur de fenêtre.Je spécifie toujours que le corps doit avoir une hauteur minimale de 100vh et cela facilite le positionnement et les calculs,
la source
Ajoutez
min-height: 100%
et ne spécifiez pas de hauteur (ou mettez-la sur auto). Cela a totalement fait le travail pour moi:la source
100vw === 100% de la largeur de la fenêtre.
100vh === 100% de la hauteur de la fenêtre.
Si vous souhaitez définir la
div
largeur ou la hauteur à 100% de la taille de la fenêtre du navigateur, vous devez utiliser:Pour largeur:
100vw
Pour la hauteur:
100vh
Ou si vous souhaitez lui attribuer une taille plus petite, utilisez la
calc
fonction CSS . Exemple:la source
Il existe plusieurs méthodes pour régler la hauteur de a
<div>
à 100%.Méthode (A):
Méthode (B) utilisant vh:
Méthode (c) utilisant une boîte flexible:
la source
Cela a fonctionné pour moi:
Tiré de cette page .
la source
Le moyen le plus simple est de le faire comme ça.
la source
Essayez de mettre
height:100%
enhtml
&body
Et si vous souhaitez 2 diviser la même hauteur, utilisez ou définissez la
display:flex
propriété de l' élément parent .la source
Même avec toutes les réponses ici, j'ai été surpris de constater qu'aucune n'a vraiment résolu le problème. Si j'ai utilisé
100vh
height
/min-height
, la mise en page s'est cassée lorsque le contenu était plus long qu'une page. Si j'utilisais plutôt100%
height
/min-height
, la mise en page se cassait lorsque le contenu était inférieur à la hauteur de la page.La solution que j'ai trouvée, qui a résolu les deux cas, était de combiner les deux premières réponses:
la source
Utilisez simplement l'unité "vh" au lieu de "px", ce qui signifie la hauteur du port de vue.
la source
Les éléments de bloc consomment la pleine largeur de leur parent, par défaut.
C'est ainsi qu'ils répondent à leur exigence 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 à la largeur, vous devez spécifier une hauteur si vous voulez plus d'espace.
Par conséquent, gardez ces deux choses à l'esprit:
la source
Voici quelque chose qui ne ressemble pas exactement à ce que vous aviez dans les réponses précédentes, mais cela pourrait être utile pour certains:
https://jsfiddle.net/newdark/qyxkk558/10/
la source
Utiliser FlexBox CSS
Flexbox est parfaitement adapté à ce type de problème. Bien que principalement connue pour la disposition du contenu dans le sens horizontal, Flexbox fonctionne aussi bien pour les problèmes de disposition verticale. Tout ce que vous avez à faire est d'envelopper les sections verticales dans un conteneur flexible et de choisir celles que vous souhaitez développer. Ils occuperont automatiquement tout l'espace disponible dans leur conteneur.
la source
L'une des options utilise la table CSS. Il prend en charge un excellent navigateur et fonctionne même dans Internet Explorer 8.
Exemple JSFiddle
la source
Essayez ceci - testé:
Edit: mise à jour 2020:
Vous pouvez utiliser
vh
maintenant:la source
Vous pouvez utiliser
display: flex
etheight: 100vh
la source
Vous devez faire deux choses, l'une consiste à définir la hauteur à 100%, ce que vous avez déjà fait. Deuxièmement, la position est définie sur absolue. Cela devrait faire l'affaire.
La source
la source
vh
plutôt.vh
si vous prévoyez d'utiliser un design réactif sur les appareils mobiles.Essayez le CSS suivant:
la source
En fait, ce qui a fonctionné le mieux pour moi, c'est d'utiliser la
vh
propriété.Dans mon application React, je voulais que le div corresponde à la page haute même lorsqu'il était redimensionné. J'ai essayé
height: 100%;
,overflow-y: auto;
mais aucun d'entre eux n'a fonctionné lors du réglage,height:(your percent)vh;
il a fonctionné comme prévu.Remarque: si vous utilisez un rembourrage, des coins arrondis, etc., assurez-vous de soustraire ces valeurs du
vh
pourcentage de votre propriété ou cela ajoute une hauteur supplémentaire et fait apparaître des barres de défilement. Voici mon échantillon:la source
box-sizing: border-box;
permettrait de surmonter cela, cela signifie que la taille de la bordure est également prise en compte lors du calcul de la taille (largeur et hauteur) de l'élément.la source
Si vous utilisez
position: absolute;
et jQuery, vous pouvez utiliserla source
HTML
CSS
la source
widht
(vers la fin)