Как добавить две фоновые картинки на веб-страницу?

Метки:

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

В CSS3 два фона добавляются достаточно легко с помощью стилевого параметра background, при этом настройки каждого фона задаются через запятую. Однако современные браузеры пока еще не поддерживают подобную возможность, поэтому придется воспользоваться старым проверенным методом. В данном случае фоновый рисунок задается для каждого элемента отдельно, а таких элементов у нас два — HTML и BODY. К этим селекторам достаточно добавить универсальный атрибут background, установив путь к графическому файлу (пример 1).

Пример 1. Селекторы HTML и BODY

<style type="text/css">
  HTML {
   background: url(файл 1); /* Путь к графическому файлу с первым фоном */ 
  }
  BODY {
   background: url(файл 2); /* Путь к графическому файлу со вторым фоном */
  }
</style>

Но здесь мы сталкиваемся с небольшой неприятностью. Фоновая картинка легко добавляется, когда используется только один селектор, но как только их становится два, возникает несколько проблем, которые нам предстоит обойти.

  • Фон, добавляемый в селекторе BODY, занимает высоту, равную содержимому веб-страницы. Если имеется только одна текстовая строка, то фон будет равен ее высоте, а никак не занимать всю высоту окна браузера.
  • Отступы на странице, а также вокруг элементов (например, тега <P>) заставляют фон в браузерах Opera и Firefox отходить от края окна. Получается, что фон отстоит от края окна на некоторое расстояние.
  • Добавление цвета фона к селектору BODY приводит к сокрытию одного из фоновых изображений.

Проблема с высотой решается добавлением атрибута height со значением 100% к селектору HTML и BODY. Отступы придется обнулить, причем сделать это на самой странице и у абзаца, добавив margin: 0 к селектору BODY и P. Вопрос с цветом фона обходится легко, достаточно задать цвет у селектора HTML.

Рассмотрим добавление двух фоновых картинок на конкретном примере. Имеется два изображения, которые должны повторяться по вертикали, их необходимо пустить фоном по левому и правому краю веб-страницы. Также следует задать цвет фона оранжевым со значением #fc0. На рис. 1 приведено изображение для левого края (назовем его bgleft.png), а на рис. 2 для правого (bgright.png).

Рис. 1

Рис. 1. Фон для левого края

Рис. 2

Рис. 2. Фон для правого края

Окончательный код с учетом всех замечаний приведен в примере 2.

Пример 2. Два фоновых изображения

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;  charset=windows-1251">
  <title>Два фоновых изображения</title>
  <style type="text/css">
   HTML {
    background: #fc0 url(bgleft.png) repeat-y; /* Цвет фона веб-страницы,
                                                  путь к графическому файлу с фоном и
                                                  повторение фона по вертикали */
    height: 100%; /* Высота элемента */
   }
   BODY {
    background: url(bgright.png) repeat-y 100% 0; /* Фон по  правому краю окна браузера */
    margin: 0; /* Обнуляем отступы на странице */
    height: 100%; /* Высота элемента */
   }
   P {
    margin: 0; /* Обнуляем отступы */
    padding: 5px 0 0 20px; /* Поля вокруг текста */
   }
  </style>
 </head>
 <body>
  <p>Содержимое веб-страницы</p>
 </body>
</html>

Результат данного примера показан на рис. 3. Чтобы добавить расстояние между абзацами вместо margin используется стилевое свойство padding, оно не создает ненужные сдвиги фона.

Рис. 3

Рис. 3. Веб-страница с двумя фоновыми картинками

   

А где способ когда надо сделать все тоже только для блока скажем div?

   
   

спасибо, пригодится

   
   

например, если нужно одновременно
div{
background:url(/images/bgr.jpg) repeat-y;
background:url(/images/foot.jpg) bottom no-repeat;
}

так как я написал - не работает

   
   

Оно и не будет работать, по правилам CSS нижний атрибут в коде "затирает" верхний атрибут. Поэтому к диву будет применяться только один foot.jpg.

   
   

надо один div вставить в другой, и каждому задать свой фон
(но у меня этот способ не работает в IE)

   
   

В IE поддержка фона прекрасно работает, значит не в браузере дело, а в чем другом. Проверьте код валидатором, возможно закралась где-то ошибка.

   
   

Потребовалась помощь знатоков, т.е. вас. У меня стоит задача сделать страницу с двумя фоновыми рисунками (декоративными полосами) но не по бокам а сверху и снизу. Верхнюю полосу по принципу повторяющегося рисунка не составляет труда сделать а вот как быть с нижней ума не приложу.

   
   

div{
background:url(/images/bgr.jpg) repeat-y,
url(/images/foot.jpg) bottom no-repeat;
}

Вот так, правильно. Но не работает в IE

   
   

Всё прекрасно работает. Работало... До того, как страница не "выросла в длину". Правая картинка так и осталась наверху ((

   

Отправить комментарий

  • Строки и параграфы переносятся автоматически.
CAPTCHA
Вопрос для защиты от спама.
3 + 2 =
Решите этот простой пример и введите результат. Так, для 1+3 надо ввести 4.