Si vous avez déjà passé des heures à essayer de centrer un élément en CSS, vous n’êtes pas seul. Qu'il s'agisse d'images, de boutons, ou de divisions (div
), le centrage peut rapidement devenir un cauchemar, surtout lorsqu'il s’agit de gérer la compatibilité entre navigateurs ou écrans de tailles variées. Mais croyez-moi, avec les bonnes techniques, ce problème appartient au passé.
Dans cet article, nous allons explorer plusieurs méthodes infaillibles pour centrer vos éléments, que ce soit horizontalement, verticalement, ou les deux. Des techniques basiques aux astuces plus avancées, vous saurez tout pour que vos éléments soient parfaitement centrés, à chaque fois.
Prêt à en finir avec ces galères ? Let’s go !
Commençons simple. Vous pouvez utiliser la propriété text-align
pour centrer du texte à l'intérieur de son conteneur. Attention, ce sera le texte qui sera centré.
<div class="conteneur">
<h1>Mon chat est rentré à la maison</h1>
</div>
h1 {
text-align: center;
}
Dans le conteneur, mettre la valeur de text-align
à center. Ensuite, dans le contenu, mettre la valeur de display en inline-block
. Et voilà !
.conteneur {
text-align: center;
}
.contenu {
display: inline-block;
}
Cette technique ne marche qu'avec les éléments de type block
. Donc si nous avons affaire à un élément de type inline
(comme les images, du texte en span
...), il faudra changer son display à block
.
Il faudra simplement mettre les marges gauches et droites en auto. Optionnellement, nous pouvons mettre les marges hautes et basses à 0.
NB : Pour que cela marche, l'élément à centrer doit avoir une largeur inférieure à 100% sinon bien évidement ce dernier va donc occuper tout l'espace de son conteneur et donc ne pas apparaître comme centré.
<div class="conteneur">
<div class="contenu">Contenu</div>
</div>
.contenu {
margin-top: 0; margin-bottom: 0;
margin-left: auto;
margin-right: auto;
/* Équivalent à margin: 0 auto; */
}
C'est la technique la plus versatile de ce tutoriel. En effet, flexbox permet non seulement de centrer les éléments horizontalement, mais aussi verticalement. Donc si on ne devait garder qu'une seule méthode, ce serait celle-ci. Sans plus attendre, voici comment faire :
Changer la valeur de la propriété “display
” en “flex
”.
Aligner horizontalement en changeant la propriété “justify-content
” en “center
”.
Aligner verticalement en changeant la propriété “align-item
” en “center
”.
Avec la propriété “flex-direction
” en “column
”, les axes sont inversés. Ainsi pour centrer horizontalement (align-items: center
) et verticalement (justify-content: center
). Si vous ne savez pas de quoi je parle, je vous invite à consulter mon article dédié à Flexbox !
<div class="conteneur-animaux">
<div>Bananes</div>
<div>Pommes</div>
<div>Oranges</div>
</div>
.conteneur-animaux {
display: flex;
justify-content: center;
align-items: center;
}
Centrer un seul élément (horizontalement et verticalement à la fois)
Pour centrer un seul élément dans un conteneur avec CSS Grid, il suffit de transformer le conteneur en une grille, puis d’utiliser les propriétés place-items
.
<div class="conteneur-ferme">
<div>Vaches</div>
<div>Chèvres</div>
<div>Moutons</div>
</div>
.conteneur-ferme {
display: grid;
place-items: center;
}
Centrer plusieurs éléments
Pour centrer plusieurs éléments, on peut utiliser justify-content
et align-content
pour contrôler l'alignement des éléments dans le conteneur. Dans l'exemple qui suite, nous avons trois animaux dans un conteneur ferme
.
<div class="ferme">
<div class="ferme__animaux">Poules</div>
<div class="ferme__animaux">Canards</div>
<div class="ferme__animaux">Dindons</div>
</div>
.ferme {
height: 300px;
display: grid;
background-color: #9fe4f0;
grid-template-columns: repeat(3, 200px);
/* Permet de center horizontalement et verticalement
les différents animaux de la ferme.
*/
justify-content: center;
align-content: center;
}
.ferme__animaux {
padding: 15px 0;
text-align: center;
background-color: pink;
border: 2px solid black;
width: 200px; height: 70px;
}
Centrer la grille en entière
Il est possible d'utiliser place-content
pour une grille entière avec plusieurs éléments tout en gardant la grille compacte. On reprend le même exemple que précédemment, mais au lieu d'utiliser justify-content
et align-content
on va utiliser notre nouvelle propriété.
<div class="ferme-2">
<div class="ferme__animaux">Cochons</div>
<div class="ferme__animaux">Chevaux</div>
<div class="ferme__animaux">Lapins</div>
</div>
.ferme-2 {
height: 300px;
display: grid;
background-color: #a79ff0;
grid-template-columns: repeat(3, 200px);
/* On utilise place-content pour centrer la grille en entier */
place-content: center;
}
Une des façons les plus populaires et efficaces pour centrer un élément en CSS consiste à utiliser la combinaison de position: absolute
avec transform
. Cette méthode est particulièrement utile lorsque vous voulez centrer un élément de manière précise par rapport à son conteneur.
<div class="parc">
<div class="ours">Ours</div>
</div>
.ours {
background-color: brown; color: white;
padding: 5px 10px;
/* Place l'ours au centre du parc */
position: absolute;
left: 50%; top: 50%;
transform: translate(-50%, -50%);
}
position: absolute
: Cette propriété positionne l'élément relativement à son conteneur parent qui est positionné (ayant position: relative
ou absolute
par exemple). Cela signifie que l'élément peut être déplacé en fonction des coordonnées spécifiées (left
, top
, etc.).
left: 50%; top: 50%
: Ces deux propriétés positionnent le coin supérieur gauche de l'élément à 50% de la largeur et de la hauteur de son conteneur. Autrement dit, cela place l'élément à peu près au centre, mais uniquement par son coin supérieur gauche, ce qui le décale légèrement.
transform: translate(-50%, -50%)
: Ici, nous utilisons une petite formule pour déplacer l'élément de -50% de sa propre largeur et -50% de sa propre hauteur. En fait, le translate(-50%, -50%)
compense ce décalage, déplaçant l'élément pour que son centre soit aligné au milieu du conteneur.
Cette méthode est idéale lorsque vous devez centrer un élément de taille fixe ou dynamique au milieu de son parent, quelle que soit la taille de ce dernier. C'est particulièrement utile pour centrer des boîtes de dialogues (modal, popup) par exemple.
Elle fonctionne aussi bien pour centrer des éléments à l'intérieur de conteneurs de dimensions variables.
Comme tout chose dans la vie, plus vous avez de cordes à votre arc, et mieux c'est. Pourquoi en serait-il différent pour le CSS ? Que vous utilisiez Flexbox, CSS Grid, ou des méthodes plus classiques, il existe une solution adaptée à chaque situation. En appliquant ces techniques, vous serez en mesure de centrer vos éléments avec précision et de manière efficace, quelle que soit la complexité de votre design.
N’oubliez pas que la pratique est la clé. Plus vous jouez avec ces outils, plus vous devenez confiant et créatif. Alors, n’hésitez pas à expérimenter, à explorer et à laisser libre cours à votre imagination ! J'espère que vous aurez au moins appris une chose ou deux. Je vous dis à la prochaine !