Думаю, нет ни одного сайта, где не использовалось бы свойство CSS background. Казалось бы, что может быть проще этого свойства? Но нет, его возможности гораздо шире обычного назначения картинки или цвета в качестве фона страницы. Что-то будет знакомым, а что-то наверняка для многих станет новинкой. В любом случае — досконально знать, как работает background будет полезно.
CSS3 привнес немало нового в свойство, это и прозрачность, и назначение нескольких изображений в качестве фона, но об этом мы поговорим ниже, а для начала рассмотрим основы свойства background.
background-color
Я более чем уверен — вы уже неоднократно делали назначение цвета фона. Сделать это можно используя несколько видов записи: обычную(используется название цвета), шестнадцатиричную или RGB-запись. Каждый тип равнозначен, используйте какой больше нравится. Я стараюсь использовать наиболее короткий вариант, и для восприятия попроще и файл стилей чуть поменьше получается размером.
1
2
3
4
|
p { background-color : red ;} p { background-color : #f00 ;} p { background-color : #ff0000 ;} p { background-color : rgb ( 255 , 0 , 0 ;)} |
В CSS3 внедрена поддержка прозрачности, поэтому можно и ее добавить к нашему цвету, например так:
1
|
p { background-color : rgba( 255 , 0 , 0 , 0.5 );} |
Последней цифрой установили прозрачность в 50%. Можно установить значение прозрачности от 0 (полностью прозрачный фон) до 1 (полностью непрозрачный).
background-image
Это свойство тоже используется очень часто, позволяет присваивать фону изображение. В CSS3 добавлена возможность присваивать фону несколько изображений, причем каждое создает своеобразный слой, поэтому каждое последующее накладывается на предыдущее. Зачем это может пригодиться? Все достаточно просто — допустим, нужно прикрутить рюшечки в каждом из углов сайта. При условии более-менее резиновой верстки использовать одно изображение — не вариант. Поэтому делаем 4 «слоя», каждое изображение двигаем в свой угол и на этом все, задача решена
1
|
body { background-image : url ( "image1" ), url ( "image2" ), url ( "image3" )} |
Если нужно назначить одно изображение на фон — в коде оставляем только первое, думаю, это понятно.
Используя любые изображения в качестве фона следует помнить два правила:
- задайте контрастный цвет фона на тот случай, если у пользователя по каким-то причинам не отобразится картинка. Он может банально отключить отображение картинок, экономит трафик.
- не используйте фоновое изображение для передачи какой-либо важной информации. По причине указанной выше, пользователь может и не увидеть.
Поддержка нескольких изображений для фона достаточно широка. Все браузеры, даже IE8, поддерживают это свойство.
background-repeat
C точки зрения технической оптимизации — очень полезное свойство . Позволяет размножить одну маленькую картинку на большую площадь. При этом, картинка должна быть бесшовной, чтобы не было видно границ. Может принимать 6 различных значений, 4 из которых я раньше использовал, а вот два последних стали для меня открытием.
Итак, подробнее:
- no-repeat. Картинка не повторяется, все просто
- repeat-x. Повторяется только по горизонтали
- repeat-y. Только по вертикали
- repeat. Как по горизонтали, так и по вертикали.
- space. Все пространство заполняется максимально возможным количеством изображений, первое и последнее (по горизонтали и вертикали) поровну обрезаются
- round. Аналогично предыдущему, с тем отличием, что первое и последнее масштабируются для заполнения
Возьмем пример из предыдущего раздела, с несколькими изображениями и применим заполнение:
1
2
3
|
body { background-repeat : no-repeat , repeat-y , space; } |
Первое не будет повторяться, второе будет, но только по вертикали и третье заполнит всю доступную область.
background-attachment
Свойство определяет, как будет вести себя фон при изменении области просмотра. Самый яркий пример — будет ли он сдвигаться при прокрутке? Честно говоря, считаю его бесполезным, не припомню, чтобы когда-либо применял подобный эффект, но некоторым нравится.
Может быть присвоено три значения:
- fixed. Изображение не прокручивается
- local. Изображение прокручивается с контентом, но не с элементом, его содержащим.
- scroll. Изображение прокручивается с элементом, его содержащим.
background-position
А вот одно из самых важных свойств. Определяет, где конкретно будет расположен фон. По умолчанию, он располагается в верхнем левом углу окна браузера. Можно устанавливать положение по горизонтали, вертикали или по обеим сторонам. В случае горизонтали это центр, слева и справа (center, left,right), вертикаль это центр, сверху и снизу (center, top, bottom). Также прекрасно распознаются значения в процентах или пикселах, например так:
1
2
3
|
body { background-position : right 20px ; } |
Эта запись означает, что фон будет располагаться справа и на 20px смещен вниз. Когда используется два значения — первое обозначает горизонтальное расположение, а второе — вертикальное. Когда только одно значение — второе по умолчанию будет в центре.
При процентной записи — отсчет идет из верхнего левого угла. Например, такая запись:
1
2
3
|
body { background-position : bottom 10px right 20% ; } |
переместит фон на 10px от нижнего края и на 20% от правого.
background-clip
Свойство появилось с приходом CSS3, поддерживается хорошо. Все браузеры, кроме IE8 и ниже — замечательно с ним работают. Свойство определяет, как фоновая заливка или изображение должны отображаться под границами элемента. Эффект заметен только в случае полупрозрачных или пунктирных границ, показано на иллюстрации (взял на htmlbook.ru, очень уж удачная)
- padding-box. Фон будет отображаться без учета границы
- border-box. Фон на весь размер блока
- content-box. Фон без учета границы и отступа.
Полезность свойства вызывает сомнения, но все же, может кому и пригодится.
background-origin
Свойство практически полностью аналогично предыдущему, с той разницей, что оно обозначает, как будет расположен фон. Значения аналогичны предыдущему. И небольшое уточнение — если свойство background-attachment имеет значение fixed — тогда это свойство работать не будет.
background-size
Хотя фон может быть любого размера, вы можете контролировать его размер на своей странице, как горизонтальный, так и вертикальный.
Значения могут быть как в процентной записи, так и в пикселах. Первое — горизонтальный размер, второе — вертикальный. Отрицательные значения не допускаются, имейте ввиду.
1
2
3
|
body { background- size : 500px 50% ; } |
Если указано только одно значение — второе считается по умолчанию (auto или 100%, если это возможно).
Также, можно указать еще два значения, которые будут регулировать размер фонового изображения:
- contain. Масштабирует изображение, сохраняя пропорции, по длинной стороне, для максимального заполнения
- cover. Тоже самое, но масштабирует по короткой стороне.
Сокращенная запись
Независимо от того, в каком порядке указаны свойства в краткой записи, работать они будут. Но это не валидно (код будет неправильным с точки зрения стандартов), W3C рекомендует применять такой порядок:
body { background-image: url("image.png"); background-position: top left; background-size: 95% 95%; background-repeat: no-repeat; background-attachment: scroll; background-origin: padding-box; background-clip: content-box; background-color: #333}; }
Или краткий вариант записи:
body {background: url("image.png") top left / 95% 95% no-repeat scroll padding-box content-box #333;}
Они идентичны, но второй вариант занимает намного меньше места и грузится быстрее.