J'ai dans ma page un bouton qui, lorsqu'on clique dessus, affiche un div
(style popup) au milieu de mon écran.
J'utilise le CSS suivant pour centrer la 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;
}
Ce CSS fonctionne bien tant que la page n'est pas déroulée.
Mais, si je place le bouton en bas de ma page, lorsque l'on clique dessus, le div
s'affiche en haut et l'utilisateur doit faire défiler l'écran pour afficher le contenu de div
.
J'aimerais savoir comment afficher la div
au milieu de l'écran, même lorsque la page a été défilée.
Changez l'attribut position
en fixed
au lieu de absolute
.
Remplacez position:absolute;
par position:fixed;
Citation : J'aimerais savoir comment afficher la div au milieu de l'écran, que l'utilisateur ait fait défiler l'écran vers le haut ou vers le bas.
Changement
_position: absolute;
_
À
_position: fixed;
_
Spécifications du W3C pour position: absolute
et pour position: fixed
.
Je viens de trouver un nouveau truc pour centrer une boîte au milieu de l'écran même si vous n'avez pas de dimensions fixes. Supposons que vous souhaitiez une boîte de 60% de largeur/60% de hauteur. La façon de le centrer est de créer 2 boîtes: une boîte "conteneur" avec la position gauche: 50% en haut: 50% et une boîte "texte" à l'intérieur avec une position inversée à gauche: -50%; en haut: -50%;
Cela fonctionne et est compatible avec tous les navigateurs.
Consultez le code ci-dessous, vous obtiendrez probablement une meilleure explication:
<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>
<style type="text/css">
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; }
</style>
<script type="text/javascript">
jQuery('.close a, .bg', '#message').on('click', function(){
jQuery('#message').fadeOut();
return false;
});
</script>
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;
}