Ответ 1
Я чувствую, что не должно быть никакого JavaScript-решения, но как это?
$(window).resize(function() {
$('#content').height($(window).height() - 46);
});
$(window).trigger('resize');
У меня проблема с этим плакатом: Проблема Jquery с высотой() и изменением размера()
Но решение не устраняет мою проблему. У меня три сложенных div, и я хочу использовать JQuery, чтобы средний отрегулировал высоту до 100% высоты окна, минус высоту (23px * 2) других верхних и нижних div. Он работает с изменением размера, но он выключается (коротким) на 16 пикселей, когда документ изначально загружается.
HTML
<body>
<div id="bg1" class="bg">top</div>
<div id="content">
help me. seriously.
</div>
<div id="bg2" class="bg">bottom</div>
</body>
CSS
html,
body {
width:100%;
height:100%;
}
.bg {
width:315px;
height:23px;
margin:0 auto;
text-indent:-9000px;
}
#bg1 {background:url(../images/bg1.png) 0 50% no-repeat;}
#bg2 {background:url(../images/bg2.png) 0 50% no-repeat;}
#content {
width:450px;
margin:0 auto;
text-align: center;
}
JQuery
$(document).ready(function(){
resizeContent();
$(window).resize(function() {
resizeContent();
});
});
function resizeContent() {
$height = $(window).height() - 46;
$('body div#content').height($height);
}
Я чувствую, что не должно быть никакого JavaScript-решения, но как это?
$(window).resize(function() {
$('#content').height($(window).height() - 46);
});
$(window).trigger('resize');
Хорошо, как насчет ответа на CSS? Мы используем display: table
. Затем каждый из divs представляет собой строки, и, наконец, мы применяем высоту 100% к средней строке и voilà.
body { display: table; }
div { display: table-row; }
#content {
width:450px;
margin:0 auto;
text-align: center;
background-color: blue;
color: white;
height: 100%;
}
Самое чистое решение - также чисто CSS - будет использовать calc и vh.
Среднее значение div будет вычисляться следующим образом:
#middle-div {
height: calc(100vh - 46px);
}
То есть, 100% высоты видового экрана минус 2 * 23px. Это обеспечит правильную загрузку страницы и будет динамически (здесь здесь).
Также не забудьте использовать размер окна, поэтому paddings и границы не делают divs outfill в окне просмотра.
Чтобы увидеть высоту окна, в то время как (или после), он изменяется, попробуйте:
$(window).resize(function() {
$('body').prepend('<div>' + $(window).height() - 46 + '</div>');
});