Руководства

Как зафиксировать положение фона на веб-странице при уменьшении размера окна браузера

2011.08.29

Допустим, есть веб-страница, которую нужно сверстать. И у этой страницы на фоне по центру стоит очень большая картинка, которая выходит за границы основной полосы контента, создавая красивые приятные поля. Основная полоса контента фиксированной ширины. И это хорошо.

Однако, когда пользователь берётся за правый край окна браузера и делает его ширину меньше, чем ширина полосы контента, фоновая картинка уезжает влево, то есть, прекращает располагаться там, где она располагалась относительно контента. А вот это уже нехорошо.

Решение данной проблемы довольно простое. Спасибо aackose за статью “Large CSS background moves on resize, in IE 8

Допустим, у нас есть такая разметка:

<...>
  <body>
    <div class="page-wrapper">
      <div class="page">
        <... контент здесь...>
      </div>
    </div>
    <...>
  </body>
<...>

И такие стили:

    .page-wrapper {
      width: 100%;
      background: white url('../img/bkg.png') center top no-repeat;
    }
    .page {
      width: 960px;
      margin: 0 auto;
    }

При такой разметке как раз и наблюдается данный баг. Если окно браузера явно шире чем 960px, то всё выглядит так, как надо — полоса .page расположена посередине фонового изображения. Если окно браузера уже, то .page начинает выравниваться по левому краю, а фоновая картинка продолжает выравниваться по центру viewport'а.

Чтобы избавиться раз и навсегда от этой проблемы, надо добавить тот же фон к .page:

    .page {
      width: 960px;
      margin: 0 auto;
      background: white url('../img/bkg.png') center top no-repeat;
    }

Трюк в том, что у блока-обёртки выставлена ширина 100%, а у полосы контента — 960px.

Предыдущий: Как изменить кодировку имён файлов Следующий: Как посмотреть список сработавших почтовых событий в Битрикс