Ответ 1
Ты был близок! Это можно сделать только с помощью CSS:
Используйте position: fixed
вместо position: absolute
.
Фиксированный относится к области просмотра, а абсолютный - к документу. Прочитайте все об этом!
Я посреди создания всплывающего окна в стиле лайтбокса для регистрации списка рассылки, но я хочу, чтобы всплывающее окно размещалось в центре видимой страницы, а не только в центре всего документа; если пользователь прокручивается в нижней части страницы и нажимает для регистрации, я хочу, чтобы он отображался в центре экрана.
Я предполагаю, что jQuery/JS будет лучшим способом для этого; здесь мой текущий CSS-код, который работает достаточно хорошо, но div нужно динамически выталкивать в видимое пространство для небольших экранов.
.my-div{
width:960px;
height:540px;
position:absolute;
top:50%;
left:50%;
margin-left:-480px;
margin-top:-270px;
z-index:60;
display:none;
}
Ты был близок! Это можно сделать только с помощью CSS:
Используйте position: fixed
вместо position: absolute
.
Фиксированный относится к области просмотра, а абсолютный - к документу. Прочитайте все об этом!
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";
Я знаю, что это не решит вопрос, но это хорошая ссылка и отправная точка: Как разместить div в центре окна браузера
Позиция Div Точно в центре экрана
<!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>
с 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});
Хотя лучший ответ , если вы не можете установить divs position
в fixed
, тогда вы можете использовать это чистое решение для JavaScript.
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";
Или более сжатая версия:
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';
Этот ответ - ванильная версия JavaScript из ответа Лахиру Ашана.