J'ai donc essayé toutes les solutions ci-dessus et rien n'a vraiment fonctionné. Mais !
J'ai un div modal-Root dans mon index.html de mon application React. J'y place un composant modal (.modal) si cela est nécessaire. Tout d'abord, j'ai positionné la modale elle-même de manière fixe, en la plaçant en haut à gauche à 50% et j'ai appliqué une transition(-50%, -50%) pour la centrer.
J'ai effectué des zooms avant et arrière et j'ai remarqué que le contenu de la modale était flou si le taux de zoom du navigateur Chrome n'était pas de 100 %. Il peut être de 110 % ou de 90-80-75 %, peu importe. En dehors d'un zoom de 100 %, le contenu était vraiment flou et laid.
J'ai donc décidé de me débarrasser de toute la solution basée sur la transition que j'avais auparavant pour centrer l'enfant de l'élément .modal.
Je positionne mon modal-Root de manière fixe, en le rendant haut-gauche-droit-bas 0, afin qu'il soit toujours à 100vh et wv. Ensuite, j'en ai fait un conteneur flexible et j'ai positionné son enfant via align-items et justify-content centered.
Mais, il y a toujours un "mais". Le modal-Root a un z-index : -1 par défaut. J'ai décidé de le changer programmatiquement en 59 si la modale est ouverte. J'applique également une superposition qui rend le reste de la page plus sombre, c'est-à-dire le .overlay qui a un z-index de 60. Le contenu réel de la modale (.modal) a un z-index de 61.
Je voulais également animer l'entrée de cet élément lorsqu'il apparaît, et je joue donc avec les marges, au lieu de lui appliquer une quelconque transition. Il s'agit d'une animation cubique qui gère la marge supérieure au pourcentage approprié au sein de l'animation, mais à la fin, la marge supérieure est de 0, sans propriété de transition.
C'était un peu dommage de devoir retravailler le composant mais après l'avoir testé, il fonctionne plutôt bien.
Résumé :
- Conteneur parent le plus haut fixe, couvrant toute la page
- Définition du z-index du parentcontainer le plus élevé -1 ou [custom-value] en fonction de l'interaction souhaitée avec la modale (la modale est ouverte).
- Définition de l'index z du conteneur à -1 si la modale est fermée
- Faire du conteneur un flex-container et positionner son enfant au centre
- Animer l'enfant via les valeurs de marge au lieu de la transition
J'espère que cela pourra être utile à certains d'entre vous :)