Comment obtenir un texte aligné verticalement au milieu d'une div ?

Comment obtenir un texte aligné verticalement au milieu d'une div ? Aligner du texte verticalement dans une division est possible grâce à HTML et aux styles CSS. Deux méthodes bien distinctes.

Méthode HTML : Le texte à centrer verticalement est contenu directement dans la division.

<div id=contenu>
Texte qui doit être centré verticalement
</div>

La première solution consiste à utiliser l'attribut line-height qui permet de préciser la hauteur de la ligne. Il faut que la valeur de cette propriété soit égale à celle de la hauteur de ligne (propriété height). Le contenu de la ligne sera alors automatiquement centré sur la verticale :

#contenu {
font:Verdana, Geneva, sans-serif;
font-size:18px;
text-align:left;
height:50px;
vertical-align:middle;
line-height: 50px;
}

Cette solution ne fonctionnera pas si le contenu est sur plusieurs lignes (on obtiendra alors des lignes éloignées les unes des autres à cause de la propriété line-height).

Méthode CSS : Pour aligner verticalement un texte de plusieurs lignes en CSS, ajoutez tout d'abord un autre container, par exemple un <span>, pour contenir le texte :

<div id=contenu>
<span>Texte qui doit être centré verticalement</span>
</div>

Modifiez ensuite le CSS pour que la division se comporte comme un tableau au niveau de l'affichage. Fixez la propriété display à table. Fixez également la largeur de la division pour que l'affichage fonctionne. Ici, on utilisera la valeur 100% pour que la division prenne toute la place. Pour que le <span> se comporte comme une cellule d'un tableau, utilisez la valeur table-cell de la propriété display. Avec un affichage paramétré comme une cellule de tableau, la propriété vertical-align fonctionne comme dans un tableau et permet ainsi d'aligner n'importe quel texte verticalement :

#contenu{
font:Verdana, Geneva, sans-serif;
font-size:18px;
text-align:left;
height:50px;
display: table;
width: 100%;
}
#contenu span {
/* Aligne le texte verticalement au milieu */
vertical-align:middle;
display: table-cell;
}

HTML/CSS