130 votes

Centrer un "div" au milieu de l'écran, même lorsque la page est défilée vers le haut ou vers le bas ?

J'ai dans ma page un bouton qui, lorsqu'il est cliqué, affiche un message de type div (style popup) au milieu de mon écran.

J'utilise la feuille de style CSS suivante pour centrer le div au milieu de l'écran :

.PopupPanel
{
    border: solid 1px black;
    position: absolute;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;

    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}

Cette CSS fonctionne bien tant que la page n'est pas défilée.

Mais, si je place le bouton en bas de ma page, lorsqu'il est cliqué, le bouton div est affiché en haut de l'écran, et l'utilisateur doit faire défiler l'écran vers le haut pour voir le contenu de la section div .

Je voudrais savoir comment afficher le div au milieu de l'écran, même lorsque la page a été déroulée.

0 votes

Question question. Pourquoi soustraire margin-top : (200) et margin-left. J'ai l'impression que c'est le milieu de la hauteur et de la largeur, mais pourquoi devons-nous faire cela pour obtenir le centre absolu ? Les 50% de gauche et 50% de haut ne devraient-ils pas faire l'affaire ?

0 votes

@jmoon90 Le left: 50%; top: 50% déplace le coin supérieur gauche de la .PopupPanel au centre de l'écran. Nous le déplaçons ensuite de la moitié de sa largeur et de sa hauteur pour le ramener au centre. Voir Centrage sur css-tricks.com

198voto

BraedenP Points 4232

Changez le position à l'attribut fixed au lieu de absolute .

2 votes

Qu'en est-il si vous devez faire défiler la fenêtre pop-up et qu'elle est plus grande que l'écran ?

0 votes

Gardez à l'esprit que ce n'est pas la solution la plus réactive (mais une solution parfaite pour le problème ci-dessus). Vérifiez getbootstrap.com/javascript/#modals et regardez avec vos DevTools pour avoir quelques bonnes idées pour travailler avec vos popups/modals.

31voto

Richard JP Le Guen Points 13306

Changement position:absolute; a position:fixed;

17voto

Sparky Points 36014

Citation : J'aimerais savoir comment afficher la div au milieu de l'écran, que l'utilisateur ait ou non le droit d'accéder à la div. l'écran, que l'utilisateur ait fait défiler l'écran vers le haut ou vers le bas.

Changement

position: absolute;

A

position: fixed;

Les spécifications du W3C pour position: absolute et pour position: fixed .

6voto

Je viens de trouver une nouvelle astuce pour centrer une boîte au milieu de l'écran même si vous n'avez pas de dimensions fixes. Disons que vous voulez une boîte de 60% de largeur / 60% de hauteur. La façon de la centrer est de créer 2 boîtes : une boîte "conteneur" avec une position gauche : 50% ; haut : 50%, et une boîte "texte" à l'intérieur avec une position inverse gauche : -50% ; haut : -50% ;

Il fonctionne et il est compatible avec tous les navigateurs.

Regardez le code ci-dessous, vous aurez probablement une meilleure explication :

jQuery('.close a, .bg', '#message').on('click', function() {
  jQuery('#message').fadeOut();
  return false;
});

html, body {
  min-height: 100%;
}

#message {
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
}

#message .container {
  height: 60%;
  left: 50%;
  position: absolute;
  top: 50%;
  z-index: 10;
  width: 60%;
}

#message .container .text {
  background: #fff;
  height: 100%;
  left: -50%;
  position: absolute;
  top: -50%;
  width: 100%;
}

#message .bg {
  background: rgba(0, 0, 0, 0.5);
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 9;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="message">
  <div class="container">
    <div class="text">
      <h2>Warning</h2>
      <p>The message</p>
      <p class="close"><a href="#">Close Window</a></p>
    </div>
  </div>
  <div class="bg"></div>
</div>

4voto

Sakthi Karthik Points 61

La méthode correcte est

.PopupPanel
{
    border: solid 1px black;
    position: fixed;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;
    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X