Présentation du problème
Centrer un div dans une page web a longtemps nécessité des méthodes complexes, mais les navigateurs modernes ont simplifié cette tâche en utilisant les grilles CSS. Cependant, l'apparition des barres latérales dans les navigateurs a introduit de nouvelles complexités.
La solution initiale
La méthode traditionnelle pour centrer un div consistait à utiliser des positions absolues et des transformations. Mais avec les grilles CSS, on peut simplement utiliser display: grid; et place-items: center; sur le corps de la page.
body {
display: grid;
min-height: 100dvh;
place-items: center;
}Problèmes avec les barres latérales
Cependant, lorsque les barres latérales sont visibles, le div centré ne l'est plus par rapport à la fenêtre entière, mais seulement par rapport à la zone de contenu. Pour résoudre ce problème, il faut déterminer la largeur de la barre latérale et ajuster la position du div en conséquence.
const browserChrome = window.outerWidth - window.innerWidth;
const shift = -browserChrome / 2;Solution finale
La solution finale consiste à utiliser les événements de pointeur pour déterminer la position de la zone de contenu par rapport à la fenêtre entière. Cette méthode permet de calculer la position exacte de la zone de contenu et d'ajuster la position du div en conséquence.
const viewportLeft = event.screenX - event.clientX * scale;
const viewportRight = viewportLeft + innerWidth * scale;
const left = viewportLeft - window.screenX;
const right = window.screenX + outerWidth - viewportRight;
const shift = (right - left) / (2 * scale);