Comment centrer le texte (horizontalement et verticalement) à l'intérieur d'un bloc div ?
P粉969253139
2023-08-24 16:58:26
<p>J'ai un <code>div</code> défini sur <code>display:block</code> (<code>90px</code> <code>height</code> et <code>width</code>), et j'ai du texte à l'intérieur.</p>
<p>
<p>J'ai essayé <code>text-align:center</code>, mais il ne fait pas la partie de centrage vertical, j'ai donc essayé <code>vertical-align:middle</code>, mais ça n'a pas fonctionné.</p>
<p>有什么想法吗?</p>
Technologies couramment utilisées à partir de 2014 :
Approche 1 -
transform
translateX
/translateY
:Exemple ici / Exemple plein écran
Dans les navigateurs pris en charge (la plupart d'entre eux), vous pouvez utiliser
top: 50%
/left: 50%
in combination withtranslateX(-50%) translateY(-50%)
pour centrer dynamiquement l'élément verticalement/horizontalement.Méthode 2 - Méthode Flexbox :
Exemple ici / Exemple plein écran
Dans les navigateurs pris en charge, définissez le
display
of the targeted element toflex
and usealign-items: center
for vertical centering andjustify-content: center
pour le centrage horizontal. N'oubliez pas d'ajouter les préfixes du fournisseur pour une prise en charge supplémentaire du navigateur (voir exemple).Approche 3 -
table-cell
/vertical-align: middle
:Exemple ici / Exemple plein écran
Dans certains cas, vous devrez vous assurer que le
html
/body
element's height is set to100%
.Pour l'alignement vertical, définissez le
de l'élément parentwidth
/height
to100%
and adddisplay: table
. Then for the child element, change thedisplay
totable-cell
and addvertical-align: middle
.Pour le centrage horizontal, vous pouvez soit ajouter
text-align: center
to center the text and any otherinline
children elements. Alternatively, you could usemargin: 0 auto
assuming the element isblock
niveau.Approche 4 - Positionnement absolu
50%
du haut avec déplacement :Exemple ici / Exemple plein écran
Cette approche suppose que le texte a une hauteur connue - dans ce cas,
18px
. Just absolutely position the element50%
from the top, relative to the parent element. Use a negativemargin-top
value that is half of the element's known height, in this case --9px
.Approche 5 - La méthode
line-height
(la moins flexible - non suggérée) :Exemple ici
Dans certains cas, l'élément parent aura une hauteur fixe. Pour un centrage vertical, il suffit de définir une valeur
line-height
sur l'élément enfant égale à la hauteur fixe de l'élément parent.Bien que cette solution fonctionne dans certains cas, il convient de noter qu'elle ne fonctionne pas lorsqu'il y a plusieurs lignes de texte - comme ceci .
Les méthodes 4 et 5 ne sont pas les plus fiables. Choisissez l'un des 3 meilleurs.
S'il s'agit d'une ligne de texte et/ou d'une image, c'est facile à faire. Utilisez simplement :
C'est tout. S'il peut s'agir de plusieurs lignes, c'est un peu plus compliqué. Mais il existe une solution sur http://pmob.co.uk/. Recherchez « alignement vertical ».
Comme il s'agit généralement de hacks ou d'ajouts de divs complexes... Je le fais généralement en utilisant un tableau avec une seule cellule... pour que cela reste aussi simple que possible.
Mise à jour 2020 :
À moins que vous ayez besoin de le faire fonctionner sur des navigateurs antérieurs comme Internet Explorer 10, vous pouvez utiliser Flexbox. Il est largement pris en charge par tous les principaux navigateurs actuels . Fondamentalement, le conteneur doit être désigné comme conteneur flexible et centré le long de ses axes principal et transversal :
Spécifiez une largeur fixe pour un élément enfant, appelé "élément flexible" :
Exemple : http://jsfiddle.net/2woqsef1/1/
Pour emballer le contenu, c'est encore plus simple : il suffit de supprimer la ligne
flex: ...
de l'élément flexible, et il est automatiquement emballé sous film rétractable.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 flex, puisque cet élément flex n'est pas lui-même un conteneur flex, l'ancienne méthode CSS non-flexbox fonctionne comme prévu. Cependant, si vous ajoutez un élément flex supplémentaire. Dans le conteneur flex actuel, les deux éléments flex seront placés horizontalement. Pour les placer verticalement, ajoutez le
Il existe une méthode alternative pour effectuer le centrage : en ne spécifiant pasflex-direction: column;
au conteneur flex. Voici comment cela fonctionne entre un conteneur flex et ses éléments enfants immédiats.sur l'élément flexible pour occuper tout l'espace supplémentaire dans les quatre directions, et les marges uniformément réparties rendront l'élément flexible centré dans toutes les directions. Cela fonctionne sauf lorsqu'il y en a. il y a plusieurs éléments flexibles. De plus, cette technique fonctionne sur MS Edge mais pas sur Internet Explorer 11.
center
for the distribution on the main and cross axis for the flex container, but instead specifymargin: auto
.Mise à jour 2016/2017 :
, et cela fonctionne bien même dans les navigateurs plus anciens tels que Internet Explorer 10 et Internet Explorer 11. Il peut prendre en charge plusieurs lignes de texte :
Exemple :transform
https://jsfiddle.net/wb8u02kL/1/
Largeur du film rétractable :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 ainsi que la méthode
line-height
fonctionneront. Sinon, flexbox ferait l'affaire.