Je suis en train de créer une fenêtre contextuelle de style lightbox pour une inscription à une liste de diffusion, mais je souhaite que cette dernière se positionne au centre de la page visible, et pas uniquement au centre de l'ensemble du document. si l'utilisateur fait défiler l'écran jusqu'en bas et clique pour s'inscrire, je souhaite qu'il apparaisse au centre de l'écran.
Je suppose que jQuery/JS sera la meilleure solution pour cela; voici mon code CSS actuel qui fonctionne assez bien, mais la div doit être enfoncée dynamiquement dans l'espace visible pour les écrans plus petits.
.my-div{
width:960px;
height:540px;
position:absolute;
top:50%;
left:50%;
margin-left:-480px;
margin-top:-270px;
z-index:60;
display:none;
}
Tu étais proche! Cela peut être fait avec CSS seul:
Utilisez position: fixed
au lieu de position: absolute
.
Fixé fait référence à la fenêtre d'affichage, tandis qu'absolu fait référence au document. Lire tout de qui le concerne!
var w = $(window).width();
var h = $(window).height();
var d = document.getElementById('my-div');
var divW = $(d).width();
var divH = $(d).height();
d.style.position="absolute";
d.style.top = (h/2)-(divH/2)+"px";
d.style.left = (w/2)-(divW/2)+"px";
Je sais que cela ne résoudra pas la question, mais c’est une bonne référence et un point de départ: Comment positionner un div au centre de la fenêtre du navigateur
Position Div exactement au centre de l'écran
<!DOCTYPE html>
<html >
<head>
<style type="text/css">
.exactCenter {
width:200px;
height:200px;
position: fixed;
background-color: #00FF00;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
}
</style>
</head>
<body>
<div class="exactCenter"> </div>
</body>
</html>
JSFiddle ici Et ici
avec jQuery:
var left = ($(window).width() - $(.my-div).width()) / 2;
var top = ($(window).height() - $(.my-div).height()) / 2;
$('.my-div').position({top: top + 'px', left: left + 'px});
Bien que la réponse acceptée soit préférable, si vous ne pouvez pas définir le divs position
sur fixed
, vous pouvez utiliser cette solution JavaScript pure.
var myElement = document.getElementById('my-div'),
pageWidth = window.innerWidth,
pageHeight = window.innerHeight,
myElementWidth = myElement.offsetWidth,
myElementHeight = myElement.offsetHeight;
myElement.style.top = (pageHeight / 2) - (myElementHeight / 2) + "px";
myElement.style.left = (pageWidth / 2) - (myElementWidth / 2) + "px";
Ou une version plus condensée:
var w = window,
elem = document.getElementById('my-div');
elem.style.top = (w.innerHeight/2) - (elem.offsetHeight/2) + 'px';
elem.style.left = (w.innerWidth/2) - (elem.offsetWidth/2) + 'px';
Cette réponse est une version JavaScript de Vanilla de Lahiru Ashan answer.