S'il s'agit d'une ligne de texte et / ou d'image, c'est facile à faire. Utilisez simplement:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
C'est ça. S'il peut s'agir de plusieurs lignes, 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 hacks ou à ajouter des divs compliqués ... J'utilise généralement un tableau avec une seule cellule pour le faire ... pour le rendre aussi simple que possible.
Mise à jour pour 2020:
Sauf si vous devez le faire fonctionner sur des navigateurs antérieurs tels qu'Internet Explorer 10, vous pouvez utiliser flexbox. Il est largement pris en charge par tous les principaux navigateurs actuels . Fondamentalement, le conteneur doit être spécifié comme un conteneur flexible, avec un centrage le long de son axe principal et transversal:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Pour spécifier une largeur fixe pour l'enfant, appelée "élément flexible":
#content {
flex: 0 0 120px;
}
Exemple: http://jsfiddle.net/2woqsef1/1/
Pour emballer le contenu sous film rétractable, c'est encore plus simple: il suffit de supprimer la flex: ...
ligne de l'élément flexible, et il est automatiquement rétracté.
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 note technique si vous avez besoin de le personnaliser: à l'intérieur de l'élément flexible, puisque cet élément flexible n'est pas un conteneur flexible lui-même, l'ancienne méthode CSS non flexible de fonctionne comme prévu. Cependant, si vous ajoutez un élément flexible supplémentaire au conteneur flexible actuel, les deux éléments flexibles seront placés horizontalement. Pour les placer verticalement, ajoutez le flex-direction: column;
au conteneur flexible. C'est ainsi que cela fonctionne entre un conteneur flexible et ses éléments enfants immédiats .
Il existe une autre méthode pour effectuer le centrage: en ne spécifiant pas center
la distribution sur l'axe principal et transversal pour le conteneur flexible, mais en spécifiant plutôt margin: auto
sur l'élément flexible pour occuper tout l'espace supplémentaire dans les quatre directions et les marges uniformément réparties rendra l'élément flexible centré dans toutes les directions. Cela fonctionne sauf lorsqu'il existe plusieurs éléments flexibles. En outre, cette technique fonctionne sur MS Edge mais pas sur Internet Explorer 11.
Mise à jour pour 2016/2017:
Il est plus courant de le faire transform
et il fonctionne bien même dans les navigateurs plus anciens 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étrécir la largeur:
La solution ci-dessus a utilisé une largeur fixe pour la zone de contenu. Pour utiliser une largeur sous film rétractable, 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 flexbox ne fonctionnera pas et la méthode ci-dessus et la line-height
méthode fonctionneraient. Sinon, flexbox ferait l'affaire.
text-align:center
ne fait pas la "partie verticale"?