FAQ CSS

FAQ CSSConsultez toutes les FAQ
Nombre d'auteurs : 17, nombre de questions : 59, dernière mise à jour : 14 juin 2021
Sommaire→Techniques→StructureUn élément flottant (doté de la propriété float avec les valeurs left ou right) est partiellement retiré du flux normal vis-à-vis de son bloc conteneur.
Quelques solutions permettant à un conteneur d'englober ses enfants flottants :
Contexte de formatage bloc (spécifications CSS 2.1) :
#parent {
  border : 1px solid red;
  overflow : hidden; /* établir un nouveau contexte de formatage */
}
 
#enfant {
  float : left;
  background : green;
}<div id="parent">
  <div id="enfant">
    Un enfant flottant
  </div>
</div>
          Internet Explorer 6 n'établit pas de contexte de formatage mais reproduit un comportement similaire si l'élément est
          doté de Layout.
          
Sinon, on peut attribuer la propriété zoom avec la valeur 1 entre commentaires conditionnels :
        
<!--[if lte IE 6]>
  <style type="text/css" media="screen">
    #parent {
      zoom : 1; /* Confère le Layout */
    }    
  </style> 
<![endif]-->La propriété clear appliquée via le pseudo-élément after (ne fonctionne pas sous Internet Explorer 7 et 6):
#parent {
  border : 1px solid red;
}
 
#parent:after {
  content : ""; /* On génère une chaine vide */
  display : block;
  clear : both;
}
 
#enfant {
  float : left;
  background : green;
}La propriété clear appliquée à un élément block vide :
#parent {
  border : 1px solid red;
}
 
#enfant {
  float : left;
  background : green;
}
.clear {
  clear : both;  
}Pour cela, nous allons avoir recours au positionnement absolu.
Il faut commencer par attribuer une hauteur de 100% aux éléments html et body, afin d'occuper toute la hauteur de la zone de visualisation.
html, body {
  margin : 0;
  padding : 0;
  height : 100%;
}
          Ensuite, on crée un conteneur global qui occupe une hauteur minimale de 100%. 
          Ce conteneur sera le référent du footer positionné en absolu.
        
#wrapper {
  position : relative; /* référent du footer */
  min-height : 100%;
  background : green;
}Et un conteneur ayant comme padding-bottom la hauteur du footer :
#container {
  padding-bottom : 6em; /* padding-bottom = hauteur du footer */
}
          Internet Explorer 6 ne reconnait pas la propriété min-height mais interprète height de la même manière.
          
On peut attribuer height:100% entre commentaires conditionnels :
        
<!--[if lte IE 6]>
  <style type="text/css" media="screen">
    #conteneur {
      height : 100%;
    }
  </style> 
<![endif]-->Enfin, on crée un footer positionné en absolu, en bas de son conteneur :
#footer {
  position : absolute;
  width : 100%; /* obligatoire si la largeur du footer n'est pas spécifiée explicitement dans le code CSS */
  height : 6em;
  bottom : 0; /* positionner le footer en bas */
  left : 0; /* positionner le footer à gauche */
  background : red;
}
          Une hauteur ou hauteur minimale en pourcentage (%) ne peut pas être calculée si la 
          hauteur (pas de hauteur minimale) du parent direct n'est pas spécifiée explicitement. Par exemple : 
html, body {
  margin : 0;
  padding : 0;
  height : 100%;
}
 
#parent {
  height : 100%;
  background : green;
}
 
#enfant {
  height : 50%;
  background : red;
}<div id="parent">
  <div id="enfant">
    Bloc qui prend en référence la hauteur de son parent.
  </div>
</div>- body se réfère à la hauteur de son parent direct html ;
 - parent se réfère à la hauteur de son parent direct body ;
 - enfant se réfère à la hauteur de son parent direct parent ;
 



