S'il s'agit d'une seule ligne de texte et/ou d'image, c'est facile à faire. Il suffit d'utiliser :
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
C'est tout. S'il peut y avoir plusieurs lignes, alors c'est un peu plus compliqué. Mais il existe des solutions sur http://pmob.co.uk/ . Recherchez "alignement vertical".
Puisqu'ils ont tendance à être des bidouillages ou à ajouter des divs compliqués... j'utilise généralement un tableau avec une seule cellule pour le faire... pour que ce soit aussi simple que possible.
Mise à jour pour 2020 :
À moins que vous n'ayez besoin de le faire fonctionner sur des navigateurs antérieurs tels qu'Internet Explorer 10, vous pouvez utiliser flexbox. Il s'agit largement pris en charge par tous les principaux navigateurs actuels . Fondamentalement, le conteneur doit être spécifié comme un conteneur flexible, ainsi que le centrage le long de son axe principal et de son axe transversal :
#container {
display: flex;
justify-content: center;
align-items: center;
}
Pour spécifier une largeur fixe pour l'enfant, ce qui est appelé un "élément flexible" :
#content {
flex: 0 0 120px;
}
Exemple : http://jsfiddle.net/2woqsef1/1/
Pour rétrécir le contenu, c'est encore plus simple : il suffit d'enlever la balise flex: ...
de l'article flexible, et il est automatiquement emballé sous film plastique.
Exemple : http://jsfiddle.net/2woqsef1/2/
Les exemples ci-dessus ont été testés sur les principaux navigateurs, notamment MS Edge et Internet Explorer 11.
Une remarque technique si vous devez le personnaliser : à l'intérieur de l'élément flex, étant donné que cet élément flex n'est pas lui-même un conteneur flex, l'ancienne méthode non flexbox de CSS fonctionne comme prévu. Toutefois, si vous ajoutez un élément flex supplémentaire au conteneur flex actuel, les deux éléments flex seront placés horizontalement. Pour les placer verticalement, ajoutez la balise flex-direction: column;
au conteneur flex. C'est ainsi que cela fonctionne entre un conteneur flexible et son immédiat éléments enfants.
Il existe une autre méthode pour effectuer le centrage : en ne spécifiant pas l'adresse de l'ordinateur. center
pour la distribution sur l'axe principal et l'axe transversal pour le conteneur flexible, mais spécifiez plutôt margin: auto
sur l'élément flexible afin d'occuper tout l'espace supplémentaire dans les quatre directions, et les marges uniformément réparties permettront de centrer l'élément flexible dans toutes les directions. Cette méthode fonctionne sauf lorsqu'il y a plusieurs éléments flexibles. En outre, cette technique fonctionne sur MS Edge mais pas sur Internet Explorer 11.
Mise à jour pour 2016 / 2017 :
On peut le faire plus couramment avec transform
et il fonctionne bien même dans les anciens navigateurs tels qu'Internet Explorer 10 et Internet Explorer 11. Il peut prendre en charge plusieurs lignes de texte :
position: relative;
top: 50%;
transform: translateY(-50%);
Exemple : https://jsfiddle.net/wb8u02kL/1/
Pour rétracter la largeur :
La solution ci-dessus utilisait une largeur fixe pour la zone de contenu. Pour utiliser une largeur réduite, utilisez
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Exemple : https://jsfiddle.net/wb8u02kL/2/
Si la prise en charge d'Internet Explorer 10 est nécessaire, alors la flexbox ne fonctionnera pas et la méthode ci-dessus ainsi que l'option line-height
fonctionnerait. Sinon, la méthode flexbox ferait l'affaire.
35 votes
Vous voulez dire
text-align:center
ne fait pas la "partie verticale" ?2 votes
J'ai enfin trouvé une solution qui fonctionne avec des tailles relatives et non des hauteurs fixes : stackoverflow.com/a/16195362/1301331
4 votes
Il est très important de savoir comment centrer / centrer les éléments. Le document ci-dessous en donne une idée très claire. w3.org/Style/Exemples/007/center.fr.html
0 votes
Voici deux méthodes simples pour centrer les objets dans les divs, verticalement, horizontalement ou les deux (pure CSS) : stackoverflow.com/a/31977476/3597276
0 votes
Duplicata possible de Comment centrer un élément horizontalement et verticalement ?
0 votes
Duplicata possible de Meilleure façon de centrer une <div> sur une page verticalement et horizontalement ?