Как добавить фоновое изображение
background-image рисует изображение за содержимым, padding и рамкой элемента. По умолчанию оно начинается в левом верхнем углу области padding, сохраняет естественный размер и повторяется, заполняя блок:
В реальном проекте url() указывает на файл: url("images/hero.jpg"). Путь считается относительно таблицы стилей, в которой он записан (или страницы, если это элемент <style>). Примеры на этой странице используют маленькие SVG-изображения, записанные прямо в код как URL data:, чтобы они работали где угодно.
Две вещи стоит знать сразу:
- Фон не дает элементу размер. Пустой
divс фоновым изображением имеет высоту 0px. Дайте ему содержимое, padding,heightилиaspect-ratio. - Фоновое изображение это украшение. Программы чтения с экрана его пропускают, и у него нет альтернативного текста. Изображению со смыслом место в элементе
<img>.
background-size: cover, contain и длины
background-size масштабирует изображение. Два ключевых слова сохраняют пропорции:
Изображение вдвое шире своей высоты, а каждый блок квадратный.
| Значение | Результат |
|---|---|
auto (по умолчанию) | Собственный размер изображения |
cover | Масштабирует, пока блок не заполнится целиком; лишнее обрезается |
contain | Масштабирует, пока изображение не поместится целиком; с двух сторон остаются серые полосы |
200px | Ширина 200px, высота пропорционально |
50% auto | Половина ширины блока, высота пропорционально |
100% 100% | Точно размер блока; искажает изображение, если пропорции разные |
cover это обычный выбор для баннеров и карточек. contain для логотипов и иллюстраций, которые нельзя обрезать.
background-position и background-repeat
background-position размещает изображение внутри блока с помощью ключевых слов (top, center, bottom, left, right), процентов или длин. background-repeat управляет повтором плиткой. Попробуйте значения:
Попробуйте позиции top right, bottom 10px right 20px и 25% 75%, а также значения повтора repeat-x, repeat-y, space (плитки с промежутками, чтобы ни одна не обрезалась) и round (плитки меняют размер, чтобы поместилось целое число).
Слои: несколько фонов и подложка под текст
background-image принимает список через запятую. Первый слой рисуется сверху. Обычное применение это полупрозрачный градиент поверх фотографии, чтобы белый текст оставался читаемым:
aspect-ratio дает пустому блоку высоту, а background-size: cover применяется к обоим слоям. Больше рецептов градиентов на странице градиенты в CSS.
Сокращенное свойство background
background задает все свойства фона одной строкой. Размер должен идти сразу после позиции через косую черту, а цвет ставится в последний слой:
.hero {
background: url("hero.jpg") center / cover no-repeat, #1f2937;
}
/* the same as */
.hero {
background-image: url("hero.jpg");
background-position: center;
background-size: cover;
background-repeat: no-repeat;
background-color: #1f2937;
}
Запасной цвет виден, пока изображение загружается, и если загрузка не удалась. Любое свойство, не указанное в сокращенной записи, сбрасывается к значению по умолчанию, поэтому ставьте сокращенную запись первой, а отдельные свойства после нее.
Другие свойства фона
| Свойство | Что делает |
|---|---|
background-attachment: fixed | Изображение стоит на месте при прокрутке страницы (игнорируется в Safari на iOS) |
background-origin | От какого края считается позиция: рамки, padding или содержимого |
background-clip | Где рисуется фон, включая text для заливки букв |
background-blend-mode | Смешивает слои, например в режиме multiply |
Частые ошибки
- Неверный путь.
url()в таблице стилей считается от CSS-файла, а не от HTML-страницы. - Пустой элемент. У него нет высоты, и изображению негде показаться.
- Забытый
no-repeatсcontainили маленьким изображением: оно повторяется плиткой. - Растягивание через
100% 100%, когда имелся в видуcover. - Важные изображения в виде фона. Для содержимого используйте
<img>с альтернативным текстом; фоны невидимы для программ чтения с экрана. - Нет кавычек вокруг URL
data:, в котором есть пробелы или кавычки. Всегда пишитеurl("...").
Часто задаваемые вопросы
Как добавить фоновое изображение в CSS?
Задайте элементу background-image: url("photo.jpg");. Путь считается относительно CSS-файла (или страницы, если это атрибут style или элемент <style>). Задайте элементу размер, потому что фон никогда не увеличивает пустой элемент.
Как растянуть фоновое изображение на весь элемент?
Используйте background-size: cover; вместе с background-position: center;. Изображение масштабируется, полностью заполняя блок с сохранением пропорций, а лишнее обрезается.
Чем cover отличается от contain?
cover заполняет весь блок и обрезает то, что не помещается. contain показывает изображение целиком и оставляет пустое место с двух сторон, если пропорции не совпадают.
Как убрать повтор фонового изображения?
Добавьте background-repeat: no-repeat;. По умолчанию фоновое изображение повторяется плиткой в обоих направлениях, заполняя элемент.
Почему не отображается фоновое изображение?
Обычные причины: неверный путь в url() (он считается от CSS-файла), нулевая высота элемента без содержимого или более позднее сокращенное свойство background, которое сбросило изображение.