Menu

Фоновое изображение в CSS: размер, позиция, повтор, cover

background-image размещает изображение или градиент за содержимым элемента. Разберем url() и градиенты, background-size (cover и contain), background-position, background-repeat, несколько слоев фона и сокращенное свойство background.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как добавить фоновое изображение

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, которое сбросило изображение.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ