J'ai trouvé un moyen de créer un conteneur div pour occuper au moins toute la hauteur d'une page, en définissant min-height: 100%;
. Cependant, lorsque j'ajoute un div imbriqué et un ensemble height: 100%;
, il ne s'étire pas à la hauteur du conteneur. Y a-t-il un moyen de le réparer?
html, body {
height: 100%;
margin: 0;
}
#containment {
min-height: 100%;
background: pink;
}
#containment-shadow-left {
height: 100%;
background: aqua;
}
<div id="containment">
<div id="containment-shadow-left">
Hello World!
</div>
</div>
display:flex
etflex-direction:column
et donner à l'enfantflex:1
.Réponses:
Il s'agit d'un bug Webkit (chrome / safari) signalé, les enfants de parents avec min-height ne peuvent pas hériter de la propriété height: https://bugs.webkit.org/show_bug.cgi?id=26559
Apparemment, Firefox est également affecté (impossible de tester dans IE pour le moment)
Solution de contournement possible:
Le bogue ne s'affiche pas lorsque l'élément interne a un positionnement absolu.
Voir http://jsfiddle.net/xrebB/
Edit le 10 avril 2014
Comme je travaille actuellement sur un projet pour lequel j'ai vraiment besoin de conteneurs parents
min-height
et d'éléments enfants héritant de la hauteur du conteneur, j'ai fait quelques recherches supplémentaires.Premièrement: je ne sais plus si le comportement actuel du navigateur est vraiment un bogue. Les spécifications CSS2.1 disent:
Si je mets une hauteur min sur mon conteneur, je ne spécifie pas explicitement sa hauteur - donc mon élément devrait avoir une
auto
hauteur. Et c'est exactement ce que Webkit - et tous les autres navigateurs - font.Deuxièmement, la solution de contournement que j'ai trouvée:
Si je règle mon élément conteneur
display:table
avec,height:inherit
il agit exactement de la même manière que si je lui donnais unmin-height
100%. Et - plus important encore - si j'ydisplay:table-cell
attribue l' élément enfant, il héritera parfaitement de la hauteur de l'élément conteneur - qu'il soit de 100% ou plus.CSS complet:
Le balisage:
Voir http://jsfiddle.net/xrebB/54/ .
la source
Ajouter
height: 1px
au conteneur parent. Fonctionne dans Chrome, FF, Safari.la source
height: 1px;
ne remplacera pas la hauteur min. Plutôt l'inverse. C'est la meilleure solution ici ... démo: jsbin.com/mosaboyo/1/editheight: 1px;
fonctionne stackoverflow.com/questions/2341821/height100-vs-min-height100min-height
. Par exemple, s'il y a suffisamment de texte, il débordera. Voir jsbin.com/vuyapitizo/1J'ai pensé que je partagerais ceci, car je ne l'ai vu nulle part, et c'est ce que j'ai utilisé pour résoudre ma solution.
SOLUTION :
min-height: inherit;
J'avais un parent avec une taille minimale spécifiée, et j'avais besoin d'un enfant qui soit également de cette taille.
De cette façon, l'enfant agit maintenant comme hauteur 100% de la hauteur min.
J'espère que certaines personnes trouveront cela utile :)
la source
min-height
. Lorsque la taille des parents est plus grande, l'enfant ne se développe pas.Cela a été ajouté dans un commentaire de @jackocnr mais je l'ai manqué. Pour les navigateurs modernes, je pense que c'est la meilleure approche.
Cela oblige l'élément interne à remplir tout le conteneur s'il est trop petit, mais augmente la hauteur du conteneur s'il est trop grand.
la source
La solution de Kushagra Gour fonctionne (au moins dans Chrome et IE) et résout le problème d'origine sans avoir à utiliser
display: table;
etdisplay: table-cell;
. Voir plunker: http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWULe réglage
min-height: 100%; height: 1px;
sur le div externe entraîne sa hauteur réelle à au moins 100%, selon les besoins. Cela permet également au div interne d'hériter correctement de la hauteur.la source
En plus des réponses existantes, il existe également des unités de fenêtre
vh
à utiliser. Extrait simple ci-dessous. Bien sûr, il peut également être utilisé aveccalc()
, par exemple,min-height: calc(100vh - 200px);
lorsque l'en-tête et le pied de page ont une200px
hauteur ensemble.la source
Je ne pense pas que ce soit un bug avec les navigateurs. Tous se comportent de la même manière - c'est-à-dire qu'une fois que vous arrêtez de spécifier des hauteurs explicites, min-height est fondamentalement une "dernière étape".
Il semble que ce soit exactement ce que suggère la spécification CSS 2.1: http://www.w3.org/TR/CSS2/visudet.html#the-height-property
Par conséquent, comme le
min-height
parent n'a pas deheight
jeu de propriétés explicite , la valeur par défaut est auto.Il existe des moyens de contourner ce
display: table-cell
problème, éventuellement en utilisant des styles plus récents tels que flexbox, si cela est possible pour les navigateurs de votre public cible. Vous pouvez également contourner ce dans certaines situations en utilisant letop
etbottom
propriétés sur un élément intérieur positionné de manière absolue, ce qui vous donne une hauteur de 100% sans le spécifier.la source
Bien que cela
display: flex;
ait été suggéré ici, pensez à l'utiliserdisplay: grid;
maintenant qu'il est largement pris en charge . Par défaut, le seul enfant d'une grille remplira entièrement son parent.la source
Pour les googleurs:
Cette solution de contournement jquery permet à #containment d'obtenir une hauteur automatiquement (par, height: auto), puis obtient la hauteur réelle affectée en tant que valeur de pixel.
la source
Le meilleur moyen d'y parvenir de nos jours est d'utiliser
display: flex;
. Cependant, vous pourriez rencontrer un problème en essayant de prendre en charge IE11. Selon https://caniuse.com utilisant flexbox:Solution compatible Internet Explorer
La solution consiste à utiliser
display: table;
sur le parent etdisplay: table-row;
sur l'enfant à la foisheight: 100%;
en remplacement demin-height: 100%;
.La plupart des solutions présentées ici utilisent
display:
table
,table-row
et / outable-cell
, mais ils ne se reproduisent pas le même comportement quemin-height: 100%;
, ce qui est la suivante :height
propriété);min-height
;Lors de l'utilisation de cette solution, le comportement est le même et la propriété
min-height
n'est pas nécessaire ce qui permet de contourner le bogue.Explication
La raison pour laquelle cela fonctionne est que, contrairement à la plupart des éléments, les éléments utilisent
display:
table
ettable-row
seront toujours aussi hauts que leur contenu. Cela fait que leurheight
propriété se comporte de la même manière quemin-height
.Solution en action
la source
Une autre solution JS, qui est facile et peut être utilisée pour éviter une solution CSS uniquement non facile ou une solution de balisage / piratage supplémentaire.
W / jQuery:
Directive angulaire:
A utiliser comme ceci:
la source
Cela fonctionne généralement pour moi: