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


141

Salut, j'utilise quelque chose de similaire à ce qui suit pour obtenir un div positionné 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 avec ceci est qu'il place l'élément au milieu de la page et non à l'écran. Donc, si la page est à quelques écrans de haut 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 le div, ce n'est même pas sur l'écran. Vous devez faire défiler vers le bas pour le voir.

Quelqu'un peut-il me dire comment vous le feriez apparaître au milieu de l'écran?


Je viens de tester ce code exact sur une page de test et il a parfaitement centré le div sur la page, même avec environ 100 <br />avant d'essayer de le pousser vers le bas. Essayez peut-être de vérifier le reste de votre code pour voir si vous avez quelque chose qui écrase les valeurs de DIV ou qui affecte votre DIV pour causer ces problèmes.
— Eli

Réponses:


269

ajoutez simplement position:fixedet il le gardera en vue même si vous faites défiler vers le bas. voir sur 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;
}

1
Vous sauvez la vie .. Une solution simple fonctionne bien même si l’élément a une échelle de transformation appliquée ..
— Vinnie

91

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>


7
cette approche est bien meilleure que la réponse approuvée
— Viacheslav Dobromyslov

2
J'ai adoré celui-ci, mais cela fonctionne-t-il dans un navigateur "plus ancien"?
— BernaMariano

14

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");

5

Juste 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

Essaye celui-là.

.centered {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

1
Je pense que celui-ci est plus utile car vous n'avez pas besoin d'appliquer de style à l'élément parent.
— canbax

3
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;

Cela a fonctionné pour moi


2
Bien que cela puisse être techniquement correct, vous souhaitez inclure une brève description de la raison pour laquelle cela résout le problème du contexte
— drneel

2

Réponse courte, il suffit d'ajouter position:fixedet cela résoudra votre problème


1
<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>

La question m'a été posée dans l'interview "comment alignez-vous le centre div de l'écran?"
— Maitrey Malve

1

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

Cela gérera la position centrale si vous redimensionnez la page Web ou la chargez dans n'importe quelle taille.

<!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'échantillon ci-dessus, le div de chargement sera toujours au centre.

En espérant que cela vous aidera :)


1

Deux façons de positionner une balise au milieu de l'écran ou sa balise parent:

Utilisation des positions:

Définissez la balise parent positionsur relative(si la balise cible a une balise parent), puis définissez le style de balise cible comme ceci:

#center {
  ...  
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Utilisation de flex:

Le style de balise parent devrait ressembler à ceci:

#parent-tag {
  display: flex;
  align-items: center;
  justify-content: center;
}

0

Dans votre 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">

-1

<!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>


-1

UTILISER FLEX

display: flex;
height: 100%;
align-items: center;
justify-content: center;

Cela centre le contenu sur l'élément ou la page parent, pas sur l'écran.
— Sean le


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.