Как изменить размер фонового изображения с помощью CSS3

Размер фонового изображения может быть изменен и масштабирован. В CSS2.1 фоновые изображения, применяемые к контейнеру, сохраняют свои фиксированные размеры. К счастью CSS3 ввел свойство background-size, которое позволяет растянуть или сжать фон. Оно идеально подходит, если вы используете методы адаптивного веб-дизайна для создания шаблонов.

Здесь можете найти разные методы:

Абсолютное изменение размера

Когда мы устанавливаем фоновое изображение, ширина и высота изображения по умолчанию устанавливаются в "auto", которое сохраняет оригинальный размер изображения. А если необходимо изменить размер изображения, могут быть использованы абсолютные измерения для установления нового размера (px, em, cm и др).

Измерения высоты могут быть применены, используя свойство background-size с абсолютным измерением.

При изменении размеров изображения пропорции (видимая область и форма отображения) должны быть сохранены. В противном случае, изображение может искажаться и терять качество.

Давайте рассмотрим пример фонового изображения с измененным размером:

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Фоновое изображение с измененным размером</title>
    <style>
      .resized {
      width: 400px;
      height: 300px;
      background-image: url("/uploads/media/default/0001/01/b408569013c0bb32b2afb0f0d45e93e982347951.jpeg");
      background-size: 300px 200px;
      background-repeat: no-repeat;
      border: 1px solid #999;
      }
    </style>
  </head>
  <body>
    <h2>Фоновое изображение с измененным размером</h2>
    <div class="resized"></div>
  </body>
</html>

Относительное изменение размера с помощью процентов

Использование процентных значений может быть довольно полезным при адаптивном дизайне. Когда используется процентное значение, размеры основываются на элементе, а не изображении. Если свойство background-size установлено как "100% 100%", фоновое изображение будет растянуто таким образом, чтобы оно заполняло всю область контента.

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Фоновое изображение с измененным размером</title>
    <style>
      .resized {
      width: 100%;
      height: 400px;
      background-image: url("/uploads/media/default/0001/01/b408569013c0bb32b2afb0f0d45e93e982347951.jpeg");
      background-size: 100% 100%;
      background-repeat: no-repeat;
      border: 2px solid #999;
      }
    </style>
  </head>
  <body>
    <h2>Фоновое изображение с измененным размером</h2>
    <div class="resized"></div>
  </body>
</html>
Но ширина фонового изображения зависит от размера контейнера. Не рекомендуется использовать проценты, когда имейте определенную ширину для контейнера.

Максимальное масштабирование размера

Когда свойство background-size установлено в значение "contain", фоновое изображение будет масштабировано таким образом, чтобы оно заполняло область контента. Но пропорции изображения (отношение высоты и ширины) будут сохранены.

Значение "contain" указывает, что фоновое изображение будет масштабировано независимо от размера контейнера таким образом, что каждая сторона была максимально больше, не переходя длину контейнера с соответствующей стороны.

Другими словами, изображение будет увеличиваться или уменьшаться пропорционально, но размеры контейнера не могут быть больше ширины и высоты.

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Адаптивное фоновое изображение с измененным размером</title>
    <style>
      .resized {
      width: 100%;
      height: 400px;
      background-image: url("/uploads/media/default/0001/01/b408569013c0bb32b2afb0f0d45e93e982347951.jpeg");
      background-repeat: no-repeat;
      background-size: contain;
      border: 1px solid #999;
      }
    </style>
  </head>
  <body>
    <h2>Адаптивное фоновое изображение с измененным размером</h2>
    <p>Измените размер браузера и увидите результат:</p>
    <div class="resized"></div>
  </body>
</html>

Заполнение фоном

Когда свойство background-size установлено в значение "cover", фоновое изображение будет масштабировано таким образом, чтобы оно заполняло всю область контента. Изображение будет масштабировано, чтобы заполнить контентную область, но оно будет обрезано, если соотношения сторон различаются.

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Адаптивное фоновое изображение с измененным размером</title>
    <style>
      .resized {
      width: 100%;
      height: 400px;
      background-image: url("/uploads/media/default/0001/01/b408569013c0bb32b2afb0f0d45e93e982347951.jpeg");
      background-size: cover;
      border: 1px solid #999;
      }
    </style>
  </head>
  <body>
    <h2>Адаптивное фоновое изображение с измененным размером</h2>
    <p>Измените размер браузера и увидите результат:</p>
    <div class="resized"></div>
  </body>
</html>

Установление разных фонов для разных устройств

Огромное фото на большом экране будет смотреться идеально, но на экране маленького устройства оно не будет таким эффектным. Тогда зачем загрузить большое фото, если вы все равно должны уменьшить его?

Можно использовать мультимедийные запросы для отображения разных изображений на разных устройствах.

Здесь используется правило @media. В данном примере можно увидеть одно большое изображение и другое поменьше. Они установлены так, чтобы быть отображены по-разному на разных устройствах. Вы увидите результат сами если измените ширину браузера.

Пример

<!DOCTYPE html>
<html>
  <head>
    <title>Адаптивное фоновое изображение с измененным размером</title>
    <style>
      /* For width smaller than 400px: */
      body {
      background-repeat: no-repeat;
      background-image: url("/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg");
      }
      /* For width 400px and larger: */
      @media only screen and (min-width: 400px) {
      body { 
      background-image: url("/uploads/media/default/0001/03/6514e37cd15dbe1bca3e3b961baa3a19e2283dc3.jpeg"); 
      }
      }
    </style>
  </head>
  <body>
    <p style="margin-top:220px;">Измените ширину браузера, и фоновое изображение изменится при 400px.</p>
  </body>
</html>