"Le centrage vertical n'est possible que si l'élément est positionné de manière absolue et a une hauteur connue." - Cette déclaration n'est pas exactement correcte.
Vous pouvez essayer d'utiliser display:inline-block;
et sa possibilité d'être aligné verticalement dans la boîte de son parent. Cette technique vous permet d'aligner un élément sans connaître sa hauteur et sa largeur, bien que cela nécessite que vous connaissiez au moins la hauteur des parents.
Si votre code HTML est ceci;
<div id="container">
<div id="aligned-middle" class="inline-block">Middleman</div>
<div class="strut inline-block"> </div>
</div>
Et votre CSS est:
#container {
/* essential for alignment */
height:300px;
line-height:300px;
text-align:center;
/* decoration */
background:#eee;
}
#aligned-middle {
/* essential for alignment */
vertical-align:middle;
/* decoration */
background:#ccc;
/* perhaps, reapply inherited values, so your content is styled properly */
line-height:1.5;
text-align:left;
}
/* this block makes all the "magic", according to http://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align specification: "The baseline of an 'inline-block' is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or if its 'overflow' property has a computed value other than 'visible', in which case the baseline is the bottom margin edge." */
#container .strut {
/* parent's height */
height:300px;
}
.inline-block {
display:inline-block;
*display:inline;/* for IE < 8 */
*zoom:1;/* for IE < 8 */
}
Puis #-milieu aligné sera centré dans #container. C'est l'utilisation la plus simple de cette technique, mais c'est une bonne chose à connaître.
Les règles marquées d'un "/ * pour IE < 8 * /" doivent être placées dans une feuille de style séparée, au moyen de commentaires conditionnels.
Vous pouvez voir un exemple concret de ce ici: http://jsfiddle.net/UXKcA/3/
modifier: (cet extrait particulier testé dans IE6 et FF3.6, mais je l'utilise beaucoup cela, il est assez cross-navigateur si vous auriez besoin. soutien ff < 3, vous devez également ajouter display:-moz-inline-stack;
sous display:inline-block;
dans les .inline-block
règle.)
Lorsque vous dites alignement, il n'est pas clair avec ce que vous souhaitez aligner la div. Voulez-vous dire centre de la div? –
Voulez-vous dire aligner verticalement div au centre – Starx
Désolé, oui, je veux dire l'alignement du centre. –