CSS background size
После установки фонового изображения может потребоваться его увеличить. Чтобы это сделать, используется свойство css background-size, которое является сравнительно недавним. Поэтому старые версии браузеров его не поддерживают. С его помощью можно, например, растянуть фоновую картинку по ширине или высоте или вписать ее в рамку необходимого элемента.
Синтаксис и значения свойства
Синтаксис элемента прост. Сначала пишется свойство background-size, а затем – его значение, которое может быть следующим:
- CSS-единицы. Могут использоваться любые возможные в этом языке единицы: пиксели, сантиметры и так далее.
- Проценты. Необходимы для адаптивной верстки сайта. Можно настроить размер фонового изображения в процентах от ширины или высоты веб-страницы.
- Auto. Если выставляется единственное значение, картинка масштабируется таким образом, чтобы сохранить пропорции фонового изображения. Если же пишется два auto (для ширины и высоты), то размер картинки становится стандартным.
- Contain. Делает так, чтобы изображение полностью вписывалось в блок, сохраняя одну из сторон пропорционально изображению.
- Cover. Также пропорционально увеличивает фоновую картинку, но при этом масштабирует ее таким образом, что часть изображения может быть не видна.
Лучше понять разницу между cover и contain можно на таком примере.
В первом случае используется значение contain, а во втором – cover
Применение свойства на практике
Учитывая разницу в разрешениях экрана между разными устройствами, рекомендуется активно использовать свойство background-size. Иначе картинка будет обрезаться при низком разрешении или быть слишком маленькой при большом. Недостаток свойства – искажение изображения при масштабировании, с которым ничего по сути не получится сделать, кроме как подбирать фоновые картинки с высоким разрешением.
Может потребоваться указать ширину и высоту фоновой картинки (первое и второе значение соответственно). Также можно выставить auto, и второй параметр будет подобран автоматически, исходя из пропорций картинки.
С помощью свойства background-size можно играться с градиентами, добиваясь интересных эффектов. Например, можно сделать его повторяющимся.
<html> <head> <title>Градиент</title> <style> body { background: #f8ffe8; background: linear-gradient(to right, red,blue 45%,green); background-size: 100px 100px; } </style> </head> <body> </body> </html>
С помощью этого свойства можно сделать ровные (не градиентные) полосы. Для этого используется такой код.
body { background: #33bbf1; background: linear-gradient(red 50%, green 50%); background-size: 50px 50px; }
И результат его исполнения браузером.
Особо продвинутый код позволяет реализовать, например, клеточный фон. Для этого необходимо сделать несколько фонов, в одном из которых обязательно должен быть альфа-канал (чтобы изображения не перекрывали друг друга). Пример кода:
body { background: linear-gradient(transparent 50%, rgba(186,0,0,0.2) 50%), linear-gradient(90deg, rgba(186,0,0,0.2) 50%, transparent 50%); background-size: 80px 80px; }
Результат.
Вендорные префиксы
Поскольку свойство background-size является довольно новым, старые версии браузеров его могут не поддерживать. Чтобы добиться полной совместимости, необходимо к тому коду еще добавить вендорные префиксы. Пример с сеткой, полностью поддерживаемый старыми браузерами, будет выглядеть так.
body { background: linear-gradient(transparent 50%, rgba(186,0,0,0.2) 50%), linear-gradient(90deg, rgba(186,0,0,0.2) 50%, transparent 50%); -moz-background-size: 80px 80px; /* Firefox 3.6+ */ -webkit-background-size: 80px 80px; /* Safari 3.1+ и Chrome 4.0+ */ -o-background-size: 80px 80px; /* Opera 9.6+ */ background-size: 80px 80px; /* Современные браузеры */ }
По-хорошему, градиент в примере тоже надо сделать совместимым со старыми версиями браузеров, поскольку он принадлежит к CSS3. Но в таком случае пример будет избыточным. Просто надо знать, что в градиентах также добавляются вендорные префиксы, чтобы добиться полной совместимости.