У меня есть обертка, расположенная в центре с y-повторным фоновым изображением:
<body>
<div id="wrapper">
...some content
</div>
</body>
#wrapper{
width: 900px;
margin: 0 auto 0 auto;
background-image: url(image.jpg) 250px 0px repeat-y;
}
Проблема: когда размер окна выше высоты обертки, унаследованной от его содержимого, изображение, очевидно, не повторяется по оси Y вплоть до нижней части окна.
Я использовал jQuery для динамического применения встроенного стиля CSS к обертке в соответствии с фактической высотой документа (когда DOM готов и событие изменения размера окна):
$(function(){
$('#wrapper').css({'height':($(document).height())+'px'});
$(window).resize(function(){
$('#wrapper').css({'height':($(document).height())+'px'});
});
});
Проблема с этим подходом заключается в том, что каждый раз, когда вы увеличиваете высоту окна до размера, большего, чем размер, размер которого был ранее изменен, высота документа распространяется на эту разницу, что делает бесконечную обертку DIV бесконечной, если вы постоянно изменяете размер окна и имеют бесконечное вертикальное пространство отображения.
На типичном 30-дюймовом дисплее с высотой 1600 пикселей, когда пользователь открывает веб-сайт с высотой окна 1000px, а оболочка высотой 800px, jQuery выше устанавливает высоту 1000px для правильной обработки фонового изображения. На этом этапе пользователь расширяет размер окна, например, 1400px, 1400px - это новый размер документа, "запомненный по умолчанию" и не обновляется сам, даже если пользователь изменяет свое окно на первоначальную высоту 1000px, добавив 400px на высоту полосы прокрутки внизу.
Как это исправить?
UPDATE: (window). Исход не работает, потому что высота окна - высота видового экрана. Когда ваш видовой экран меньше содержимого и вы его прокручиваете, обертка всегда остается размером окна просмотра и не распространяется на нижнюю часть текущей позиции в окне просмотра.