Произвольные элементы DOM как фон сайта

Произвольные элементы DOM как фон сайта

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

В этой статье, автор расскажет, как сделать полноценный фон сайта из блочного элемента, в котором может содержаться картинка, несколько картинок, SVG и <canvas>. Это позволяется производить над фоном любые манипуляции в плане HTML/CSS, добавлять JavaScript (jQuery) эффекты и многое другое.

Суть метода в том, что мы добавляем в DOM произвольный блок, который в дальнейшем будет фоном нашего сайта. Главная проблема, которую мы решаем этим — это то, как фон будет работать на разных разрешениях (ведь обычно сайты со сложной, большой картинкой на фоне работают при позиционировании), у нас это будет выглядеть следующим образом.

Наш «блочный» фон должен вести себя как обычная картинка background-image, то есть при маленьком разрешении экрана обрезаться, а при большом — полностью:

Произвольные элементы DOM как фон сайта

Реализация

Давайте для начала расположим <div> как фон сайт, а фоном для <div> сделаем картинку. Это, конечно, условное и нелогичное решение (ведь можно просто положить картинку через background-images), но оно позволит нам проще отследить поведение фонового блока.

HTML выглядит так:

<div id="wrapper">
<div id="content-par"> <!-- Родительский элемент для контента -->
<div id="content">
<a href="">Нажми на меня</a>
</div>
<div id="bg"></div> <!-- Тот самый блок с фоном -->
</div>
</div>

CSS (все важные моменты прокомментированы):

html { height:100%; } /* Обязательно */

body { height:100%; margin:0; padding:0; } /* Обязательно */

#wrapper { height:100%; margin:0 auto; min-height:850px; min-width:1200px; overflow:hidden; z-index:1;
position:absolute; left: 0; top: 0; bottom: 0; right: 0; } /* Хак для Opera */

#content-par { position:relative; width:1200px; margin:0 auto; }

#bg { background-image:url(images/back.jpg); /* Путь к картинке фона */
background-position:left top; /* Прижаем к верх */
position:absolute; /* Абсолютное позиционирование */
left:-200px; /* Задаем нужный нам отступ слева и сверху (индивидуально для каждой картинки) */
top:-100px;
z-index:1;
width:2100px; /* Ширину и высоту картинки задаем реальную «как есть» */
height:1628px;
}

#bg img { display:block; float:left; width:800px; }

#content {
position:relative;
width:1100px;
margin:30px auto;
height:780px;
z-index:2;
border:4px solid #fff;
font-size:40px;
text-align:center;
} /* Блок контента, стили любые, которые вам нужны, самый большой z-index */

#content a { margin-top:100px; display:block; color:#fff; }

Вот и все. Пример работает во всех браузерах, включая IE6-7. Чтобы уменьшить или увеличить разрешение странички нажмите в браузере Ctrl + Scroll Up / Scroll Down. Или воспользуйтесь сервисом viewlike.us.

Такой способ найдет применение на сайтах, где разработчики и дизайнеры хотят сделать сложный, большой фон, возможно, с JS или Flash-анимации, и при этом хотят, чтобы он корректно работал на всех разрешениях.

Главная страница сайта «Штокмана» является примером использования такого фона, там блок контента непосредственно зависит от фона сайта и должен распологатся в определенном месте от него. Реализация такого бэкграунда, возможна только таким методом + на этом сайте реализована плавная загрузка фона с помощью jQuery. 

Возможности

Рассмотренным методом можно располагать в качестве фона не только картинку, но сразу несколько картинок, SVG, Canvas. При этом у разработчика есть возможонсть контролировать поведение такого фона: плавно проявлять, сдвигать, заменять на другой. Ниже прикреплены примеры такого фона с несколькими картинками, проявлением (с помощью jQuery), а так же с фоном SVG и <canvas> (тормозит, но мысль будет ясна).

Пример и архив со всей версткой

Демо (картинка) Демо (картинки + проявление) Демо (SVG) Демо (Canvas) Архив с примерами

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 6

bosha
Пример на canvas впечатлил.
Иван
Для чего нужны height:100% ?
#
Иван
Никита Лебедев
Иван
Без height:100%, блок и фон в нем не будет иметь высоты и следовательно не будет отображаться.
Влад Никольский
Огромное спасибо!
Давно пытался найти подобную информацию именно по поводу фонов. Но всё, что попадалось, было каким-то черезчур заумным (по крайней мере для меня). Теперь всё понял. Написано внятно и просто для понимания.
Окна
Инфа хорошая для начинающих даже полезная. Спасибо

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler