CSS-трюк: фиксируем большой бэкграунд относительно контента
В статье используется изображение из примера к статье How to: CSS Large Background.
Рассмотрим такую ситуацию – нужно создать страницу фиксированной ширины, к примеру, 900 пикселей, с контентом, расположенным горизонтально по центру относительно окна браузера. И необходимо на этой странице поместить большой фон (тоже горизонтально по центру), ширина которого значительно больше ширины нашего отцентрированного блока с контентом.
Фон размещается элементарно – его мы прицепляем тегу <body>
и центрируем горизонтально.
При этом имеем следующую структуру кода:
HTML:
<html>
<body>
<div id="wrapper">контент</div>
</body>
</html>
CSS:
body {
background: url(background.jpg) 50% 0 no-repeat;
}
#wrapper {
width: 900px;
margin: 0 auto;
}
Для наглядности посмотрим пример №1.
Если вы станете сужать окно браузера, то с того момента, когда появится горизонтальная прокрутка, вы заметите, что фоновое изображение сдвигается влево относительно контента (за исключением браузеров IE6 и IE7). Наша задача – зафиксировать изображение.
Данную неприятность позволяет устранить один очень простой трюк. Суть его заключается в том, что к родительскому блоку контейнера, у которого задан фон, необходимо применить параметр минимальной ширины, равной ширине контентного блока. В нашем случае мы укажем минимальную ширину тегу <html>
, поскольку он является “родителем” тега <body>
, к которому мы прицепили фон. Т.е. всего-навсего добавляем такой стиль:
html {
min-width: 900px;
}
Вот и все. Теперь посмотрите пример №2 и попробуйте сузить окно браузера – фон больше никуда не съезжает, чего нам и требовалось добиться.
Комментарии (60)
Большое спасибо за статью. Отлично. А говорите “не о чем стало писать”.
Магическим образом в IE6 фон выравнивается нормально. Это просто-таки подарок от Microsoft. Видимо они специально это сделали в знак извинения и примирения из-за неподдержки min-width.
А Вы изящным образом воспользовались min-width для других браузеров. Запомнил этот подход.
2 статьи в месяц – это совсем не говорит о том, что есть о чем писать.
Да они, наверное, и сами не знали, что их браузер такое умеет (шучу) =))) Кстати, периодически попадаются случаи, когда что-то работает в ИЕ на ура, а в других браузерах не лады.
P.S. Не нужно ко мне на “Вы”!
Dimox, можно так же html задать фиксированную ширину и автоматические поля. Фон, вопреки ожиданиям, не обрежется.
Из комментариев понял, что не всем ясно, почему фон уезжает. Попробую объяснить. Дело в том, что фон, задаваемый html или body, браузер считает фоном всего окна и позиционирует в зависимости от его размеров. А так как ширина html не указана явно, браузер рассчитывает позицию фона исходя из ширины видимой области окна.
Подробнее читайте в статье http://webstandards.org.ru/blog/layout/css-template.html (часть “Фон документа”).
Интересная особенность. Не знал этого. Спасибо за комментарий!
В мозиле 3.5 разницы не видно
попробовал оба примера в мозиле 3.5, в опере 10, в ИЕ 8, в хроме 3 и в сафари 4 – НИГДЕ разницы не увидел… при изменении размеров окна фон одинаково двигается в обоих примерах – уезжает влево за край окна, но относительно враппера никуда не двигается
Все верно пишет dimox. Первый вариант уезжает – второй решает проблему.
А то раньше все обворачивал еще одним контейнером. Спасибо за decision! ;)
2ioni: Уже четыре ошибки ;)
Что-то я тоже никакой разницы не увидел.
Спасибо, полезная статья. Вчера как раз столкнулся к такой же проблемой.
Спасибо, я только в процессе изучения верстки в CSS, полезный прием.
А если большое изображение в качестве фона у меня не в header’e, а блоком ниже?
Пример кода:
Нужно вставить два больших изображения фоном в “promo” и “footer”. Как быть?
Реальное, человеческое спасибо автору! ;)
аааааа =))) ЭТО ОНО!!!! Делаю свой первый сайт textile.in.ua – и при сужении браузера текст вылазил за бэкграунд… два дня копал интернет, менял наугад все таблицы))
А всё решила одна строчка min-width: 900px; СПАСИБО огромное) ;)
Большое спасибо!!!
Автору ОГРОМНЕЙШЕЕ СПАСИБО!!!!!!!!
Мучалась два дня, только ваш пост помог!!!!!!
Очень нужна помощь пожалуйста, создал фоновую картинку под мню с position: fixed;
и вот когда сужаю окно браузера фоновая картинка уезжает влево
что делать не представляю помогите
тест сайт
Попробуйте фиксированный блок сделать на всю ширину браузера и без фона, а в него уже вставить блок с position: absolute, у которого будет фон.
я извиняюсь
могли бы вы помочь с написанием кода
я мягко говоря со знаниями (в предбаннике)
Могу дать доступ к админке.
Я вот попробовал этот фон прикрутить к меню, что то получилось
в лево не уходит.
Но теперь не могу позиционировать этот фон.
Такую фишку увидел здесь
Но не могу повторить код.
Буду очень благодарен.
Вот простой пример – http://fiddle.jshell.net/UP34G/3/show/
С примером визуально понятно, не понятно как на моем сайте это реализовать.
Давайте так, я покажу как я прописываю, а Вы подскажите что не так.
HTML
CSS
Я не могу понять как правильно прописать фиксированный блок на всю ширину браузера и без фона, а в него уже вставить блок с position: absolute, у которого будет фон.
Посмотрите код примера и сделайте по аналогии.
Все получилось СПАСИБО
Еще вопрос может подскажите как прописать такую таблицу
http://imgur.com/OUKKa
Вот спасибо)
на многих сайтах этот вопрос без ответа))
Оказывается все просто.
Раньше приходилось в дочернем блоке с фиксированной шириной дублировать фоновое изображение. Там оно не съезжало при изменении ширины экрана.
Спасибо. Очень помогли. Два дня панель с ума сводила))) Тема в сети обсуждается…но конструктива мало. Спасибо за исчерпывающий ответ.
Спасибо, очень помогли!
И от меня большое спасибо!! Тоже спать спокойно не могла, меню-шка три дня с ума сводила…
Димоксы! Вы просто реально лучшие. Я перерыл пол-интернета для решения этой вроде незамысловатой проблемы, но кроме вас вообще никто нормального ничего не написал! Добавляю ваш сайт в избранное, спасибо! Так держать!
Прописал в код body { background-image: url(images/bg.jpg); /* Путь к фоновому изображению */ background-color: #c7b39b; /* Цвет фона */ } а толку ноль. Когда вместо body ставлю div? лишь тогда меняется фон на контенте , а мне нужен задний фон и ссылку на него поставить . Помогите!!! Мои сайты http://detskiy-konstruktor.com.ua/ и http://smartbetting.biz/