264 votes

Un enfant dans un parent avec une hauteur minimale de 100% n'hérite pas de la hauteur.

J'ai trouvé un moyen de faire en sorte qu'un conteneur div occupe au moins toute la hauteur d'une page, en définissant les paramètres suivants min-height: 100%; . Toutefois, lorsque j'ajoute un div imbriqué et que je définis le paramètre height: 100%; il ne s'étire pas à la hauteur du conteneur. Existe-t-il un moyen de le corriger ?

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>

10voto

Jeremy Hewett Points 103

La solution de Kushagra Gour fonctionne (du moins dans Chrome et IE) et résout le problème original sans avoir à utiliser display: table; y display: table-cell; . Voir plunker : http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWU

Réglage de min-height: 100%; height: 1px; sur la div extérieure fait en sorte que sa hauteur réelle soit d'au moins 100 %, comme il se doit. Cela permet également à la division intérieure d'hériter correctement de la hauteur.

7voto

Pangloss Points 19560

En plus des réponses existantes, il existe également des unités de visualisation. vh à utiliser. Un extrait simple est présenté ci-dessous. Bien sûr, il peut être utilisé avec calc() également, par exemple min-height: calc(100vh - 200px); lorsque l'en-tête et le pied de page ont 200px hauteur ensemble.

body {
  margin: 0;
}

.child {
  min-height: 100vh;
  background: pink;
}

<div class="parent">
  <div class="child"></div>
</div>

6voto

zyrup Points 507

Cela fonctionne généralement pour moi :

.parent {
  min-height: 100px;
  background-color: green;
  display: flex;
}
.child {
  height: inherit;
  width: 100%;
  background-color: red;
}

<!DOCTYPE html>
<html>
  <body>
    <div class="parent">
      <div class="child">
      </div>
    </div>
  </body>
</html>

5voto

Mike Hopkins Points 303

Je ne pense pas qu'il s'agisse d'un bug des navigateurs. Tous se comportent de la même manière - c'est-à-dire qu'une fois que vous avez cessé de spécifier des hauteurs explicites, la hauteur minimale est essentiellement une "dernière étape".

Il semble que ce soit exactement comme le suggère la spécification CSS 2.1 : http://www.w3.org/TR/CSS2/visudet.html#the-height-property

Le pourcentage est calculé par rapport à la hauteur du bloc contenant la boîte générée. Si la hauteur du bloc contenant n'est pas spécifiée explicitement (c'est-à-dire qu'elle dépend de la hauteur du contenu) et que cet élément n'est pas positionné de manière absolue, la valeur est égale à "auto".

Par conséquent, comme le min-height Le parent ne dispose pas d'une height définie, la valeur par défaut est auto.

Il existe quelques moyens de contourner ce problème, notamment en utilisant display: table-cell ou des styles plus récents comme le flexbox, si cela est possible pour les navigateurs de votre public cible. Vous pouvez également contourner cette règle dans certaines situations en utilisant l'attribut top y bottom sur un élément interne absolument positionné, ce qui vous donne une hauteur de 100 % sans le spécifier.

1voto

Jonas Stensved Points 2803

Pour les googleurs :

Cette solution de contournement jquery fait en sorte que #containment obtienne une hauteur automatiquement (by, height : auto), puis se voit attribuer la hauteur réelle en tant que valeur de pixel.

<script type="text/javascript">
<!--
    $(function () {

        // workaround for webkit-bug http://stackoverflow.com/a/8468131/348841

        var rz = function () {
            $('#containment')
            .css('height', 'auto')
            .css('height', $('#containment').height() + 'px');
        };

        $(window).resize(function () {
            rz();
        });

        rz();

    })
-->
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X