web-dev-qa-db-fra.com

Comment positionner un div au milieu de l'écran quand la page est plus grande que l'écran

Bonjour, je me sers de quelque chose de similaire à ce qui suit pour placer une div au milieu de l’écran:

<style type="text/css"> 
#mydiv {
    position:absolute;
    top: 50%;
    left: 50%;
    width:30em;
    height:18em;
    margin-top: -9em; /*set to a negative number 1/2 of your height*/
    margin-left: -15em; /*set to a negative number 1/2 of your width*/
    border: 1px solid #ccc;
    background-color: #f3f3f3;
}

</style>


<div id="mydiv">Test Div</div>

Cependant, le problème, c’est qu’il positionne l’élément au milieu de la page et non à l’écran. Donc, si la page est haute de quelques écrans et que je suis en haut de la page (la partie supérieure de la partie est affichée à l'écran), lorsque je fais apparaître la div, ce n'est même pas à l'écran. Vous devez faire défiler l'écran pour le voir.

Est-ce que quelqu'un peut me dire comment vous le feriez apparaître au milieu de l'écran?

124
Coder 2

ajoutez simplement position:fixed et il restera visible même si vous faites défiler l'écran. voir à http://jsfiddle.net/XEUbc/1/

#mydiv {
    position:fixed;
    top: 50%;
    left: 50%;
    width:30em;
    height:18em;
    margin-top: -9em; /*set to a negative number 1/2 of your height*/
    margin-left: -15em; /*set to a negative number 1/2 of your width*/
    border: 1px solid #ccc;
    background-color: #f3f3f3;
}
239
Hussein

Je pense que c'est une solution simple:

<div style="
    display: inline-block;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 200px;
    height: 100px;
    margin: auto;
    background-color: #f3f3f3;">Full Center ON Page
</div>

77
user2684935

Si vous connaissez la taille de l'élément, vous pouvez simplement utiliser la propriété margin:

#mydiv {
  position: fixed;
  top: 50%;
  left: 50%;
  margin-top: -50px; //assuming that #mydiv has the height of 100px
  margin-left: -100px; //assuming that #mydiv has the width of 200px
}

Note qu'il faut utiliser la moitié de la largeur et de la hauteur de l'élément

Mais si vous n'êtes pas sûr de la taille, cela fera l'affaire:

#mydiv {
   position: fixed;
   top: 50%;
   left: 50%;
   transform: translate(-50%, -50%);
}
40
Alex Jolig

Utilisez transform;

<style type="text/css">
    #mydiv {
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
</style>

Solution Javascript:

var left = (screen.width / 2) - (530 / 2);
var top = (screen.height / 2) - (500 / 2);
var _url = 'PopupListRepair.aspx';
window.open(_url, self, "width=530px,height=500px,status=yes,resizable=no,toolbar=no,menubar=no,left=" + left + ",top=" + top + ",scrollbars=no");
11
Erdogan

Il suffit de mettre margin:auto; 

#mydiv {
    margin:auto;
    position:absolute;
    top: 50%;
    left: 50%;
    width:30em;
    height:18em;
    margin-top: -9em; /*set to a negative number 1/2 of your height*/
    margin-left: -15em; /*set to a negative number 1/2 of your width*/
    border: 1px solid #ccc;
    background-color: #f3f3f3;
}

<div id="mydiv">Test Div</div>
5
user3267423
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;

Cela a fonctionné pour moi

3
Abraham

Réponse courte, ajoutez simplement position:fixed et cela résoudra votre problème

2
Parth
<html>
<head>
    <style type="text/css">

#mydiv {
    position:absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width:100px;
    height:200px;
    margin:auto;
    border: 1px solid #ccc;
    background-color: #f3f3f3;
}
    </style>
</head>
<body>
<div id="mydiv">Maitrey</div>
</body>
</html>
1
Maitrey Malve

Eh bien, ci-dessous est l'exemple de travail pour cela.

Cela gérera la position centrale si vous redimensionnez la page Web ou chargez une taille quelconque.

<!DOCTYPE html>
<html>
<head>
<style>
.loader {
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -50px;
  margin-left: -50px;
  border: 10px solid #dcdcdc;
  border-radius: 50%;
  border-top: 10px solid #3498db;
  width: 30px;
  height: 30px;
  -webkit-animation: spin 2s linear infinite;
  animation: spin 1s linear infinite;  
}

@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>
</head>
<body>


<div class="loader" style="display:block"></div>

</body>
</html>

Dans l'exemple ci-dessus,loading divsera toujours au centre.

En espérant que cela vous aidera :)

1
Vikash Pandey

Dans notre page de script ...

    $('.a-middle').css('margin-top', function () {
        return ($(window).height() - $(this).height()) / 2
    });

Utilisez une classe moyenne dans la div ...

   <div class="a-middle">
0
Antony Jack