Адаптивное фоновое изображение с помощью CSS. Адаптивное целое фоновое изображение с помощью CSS Расширения фоновые рисунки разработка войти

Зачем обязательно надо делать картинки адаптивными ? К сожалению, то счастливое время, когда можно было вставить картинку на веб-сайт и указать подлинные её размеры, безвозвратно ушло. Теперь, мы должны все время думать и о маленьких экранах.

Что произойдёт, если размеры картинки будут больше размера экрана? Во-первых появится горизонтальная полоса прокрутки, картинки выйдут за пределы адаптивного блока, тем самым сломают дизайн сайта или просто частично обрежутся. В любом случае, так не годится и картинки надо тоже адаптировать под меняющуюся ширину экрана.

Как сделать галерею с адаптивными картинками?

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

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

После определенной ширины экрана, например 375 пикселей, в ряду должно остаться только 2 картинки.

В таблице стилей пишем следующий код:

@media (max-width: 375px) {
#gallery #product {
max-width: 50%
}

#gallery {
flex-direction: column;
}
}

При верстке на flexbox-ах , необходимо для общего контейнера #gallery , задать атрибут.

Flex-direction: column;

Этим самым, мы отменяем действие flexbox-ов на блоки с картинками, которое принудительно держало их в ряду. Половина картинок перенеслась на нижний ряд.

Как сделать фоновое изображение адаптивным?

Ниже приведен пример, что я имею ввиду.

Задача все та же, на разных устройствах фоновая картинка должна подстраиваться под разные разрешения экрана, не теряя своих пропорций и качества.

В HTML разметке:


..Здесь может быть текст, картинки..

В CSS таблице:

Теперь подробнее разберем наиболее значимые свойства и их значения для решения нашей задачи.

Background-size: cover;

Значение "cover" позволяет нашему изображению подстраиваться под разные размеры экранов, не теряя пропорций. Однако, надо учитывать, что фоновая картинка должна иметь действительно большие размеры, желательно не меньше 2000 пикселей по ширине. В противном случае, если размеры картинки меньше размера экрана, произойдет пикселизация, то есть изображение будет размытым.

Background-attachment: fixed;

Что будет, если количество контента по высоте превысит высоту фонового изображения, выйдет за его границы?

На скриншоте ниже показано, как это будет выглядеть без fixed .

Так вот, чтобы этого не произошло, надо зафиксировать фоновую картинку в окне просмотра, тогда фон будет оставаться на месте, при смещающемся контенте.

Посмотрите демо

А как быть с маленькими экранами? Зачем на них загружать большую картинку? Это слишком расточительно с точки зрения скорости загрузки для мобильного интернета.

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

Обратимся к медиа-запросу:

@media only screen and (max-width: 500px) {
body {
background-image: url(photo-small.jpg);
}
}

При ширине экрана менее 500 пикселей, загрузится маленькое изображение. Не стоит делать маленькое изображение, меньше 1200 пикселей, надо учитывать, что некоторые устройства имеют маленькие физические размеры экрана, но с большим разрешением.

Я уже писал о том, что сейчас распространен такой элемент на сайте, как фоновое изображение. Чаще всего оно встречается продающих страниц, где располагается в шапке. Оно смотрится очень красиво, если, конечно, оно очень качественное и хорошо подходит к тематике сайта. Кстати, бонусом в этой статьей, в ее конце я расскажу где брать качественные изображения совершенно бесплатно и при этом они будут сделаны профессионалами.

Вот что еще есть по поводу адаптивных изображений для сайта:

Если Вы хотите сделать фон действительно неповторимым, тогда рекомендую следующую статью:

Как это выглядит смотрите на реальном примере:

Скачать

Ниже Вы можете увидеть как фоновое изображение адаптируется под различные устройства:

Как сделать адаптивное фоновое изображение для сайта?

HTML часть

Для данного примера мы будем задавать фоновое изображение для body , но подобным образом можно сделать для любого блока на странице. Поэтому ничего сверхъестественного в HTML структуре нет:

CSS часть

Осталось только задать в файле стилей необходимые свойства, чтобы сделать задуманное — адаптивное фоновое изображение для сайта:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 body { /* Путь к изображению относительно данного файла */ background-image : url (../images/background-photo.jpg ) ; /* Центрирование изображения по вертикали и горизонтали всегда */ background-position : center center ; /* Запрещаем повтор изображения */ background-repeat : no-repeat ; /* Фиксируем изображение - оно остается на месте при прокрутке окна */ background-attachment : fixed ; /* Изображение будет масштабироваться в зависимости от размеров контейнера */ background-size : cover; /* Цвет фона изображения, который будет показываться пока изображение не загрузится */ background-color : #464646 ; /* Эквивалентная сокращенная запись * background: url(background-photo.jpg) center center cover no-repeat fixed; */ }

Все строки прокомментированы, поэтому я не думаю что с этим кодом могут возникнуть проблемы.

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

Будем использовать Media Queries (Медиа запросы), которые позволяют задать отдельные свойства для произвольной ширины экрана:

Что мы сделали? Если ширина окна браузера на устройстве будет менее 767 пикселей, то будем использовать другое изображение. Всё очень просто.

Одна из основных задач при адаптивной верстке - это масштабирование изображений (в том числе фоновых) таким образом, чтобы они корректно отображались на устройствах с разными разрешениями экранов.

С картинками в теге img все просто: при установке ширины в процентах высота будет масштабироваться автоматически. К фоновым же изображением такой способ применить нельзя.

Данный трюк заключается в установке значения в процентах отступам (padding ) элемента. Впервые способ опубликован в старой статье блога A List Apart , однако он до сих пор хорошо работает.

Предположим, что есть фоновое изображение 800 на 450 пикселей, и нужно сделать его фоном с фиксированным соотношением сторон - 16:9. В коде ниже для отступов используется px , но все будет работать и с em . Также есть HTML5 элемент figure, для его корректной работы в старых браузерах можно использовать HTML5 shiv .

Div.column { max-width: 800px; } figure.fixedratio { padding-top: 56.25%; /* 450px/800px = 0.5625 */ }

Добавляем фон

Полученный элемент масштабируется как надо, но если добавить фоновое изображение, результат будет не очень хорошим. Используем атрибут background-size: cover . К сожалению, в Internet Explorer 8 такой способ не работает. Чтобы решить эту проблему, позиционируем фон с помощью background-position . Фоновая картинка должны быть по ширине как минимум равна max-width элемента. В обратном случае картинка будет обрезаться.

Div.column { /* The background image must be 800px wide */ max-width: 800px; } figure.fixedratio { padding-top: 56.25%; /* 450px/800px = 0.5625 */ background-image: url(http://voormedia.com/examples/north-sea-regatta.jpg); background-size: cover; -moz-background-size: cover; /* Firefox 3.6 */ background-position: center; /* Internet Explorer 7/8 */ }

Предположим, что есть большое фоновое изображение, которое отлично смотрится на десктопе. Но на мобильном устройстве оно будет слишком мелкое, поэтому правильным решением станет уменьшение ширины фона.

Например картинка шириной 800 на 200 пикселей (4:1) на маленьком экране, при ширине в 300 пикселей, должна уменьшаться до 150 пикселей (2:1). Посчитаем атрибуты height и padding-top :

На рисунке показано соотношение сторон фонового изображения при разной ширине. Наклон графика (slope) соответствует атрибуту padding-top , начальная высота (start height) - атрибуту height . В итоге получается код:

Div.column { /* The background image must be 800px wide */ max-width: 800px; } figure.fluidratio { padding-top: 10%; /* slope */ height: 120px; /* start height */ background-image: url(http://voormedia.com/examples/amsterdam.jpg); background-size: cover; -moz-background-size: cover; /* Firefox 3.6 */ background-position: center; /* Internet Explorer 7/8 */ }

Использование SCSS для расчета

Атрибуты padding-top and height можно рассчитывать автоматически при помощи препроцессоров, например SCSS . Пример этого:

/* Calculate fluid ratio based on two dimensions (width/height) */ @mixin fluid-ratio($large-size, $small-size) { $width-large: nth($large-size, 1); $width-small: nth($small-size, 1); $height-large: nth($large-size, 2); $height-small: nth($small-size, 2); $slope: ($height-large - $height-small) / ($width-large - $width-small); $height: $height-small - $width-small * $slope; padding-top: $slope * 100%; height: $height; background-size: cover; -moz-background-size: cover; /* Firefox 3.6 */ background-position: center; /* Internet Explorer 7/8 */ } figure.fluidratio { /* This element will have fluid ratio from 4:1 at 800px to 2:1 at 300px. */ @include fluid-ratio(800px 200px, 300px 150px); background-image: url(http://voormedia.com/examples/amsterdam.jpg); }

Ответ от Joomla CMS [гуру]
background-size:100%;
ссылка


Ответ от Cat Butcher (Безумие) [активный]
Ну, что я могу сказать
Первое, это тебе надо картинку адаптировать на разные разрешения, где и как она будет обрезаться (если будет)
Второе, это задать через @media замену фона
(@media почитай на htmlbooks)


Ответ от Влад Соколов [новичек]
ну я в таком случае предлагаю следующее:
если вы выносите таблицу стилей css в отдельный файл (а я рекомендую для удобства так и делать), то вам стоит прописать в ней параметры тега body примерно так:
body {
background-image: url(Background.jpg);
background-attachment: fixed;
background-size: cover;
}
ну и разумеется остальные параметры этого тега по желанию. Так ваша картинка автоматически будет масштабироваться, заполняя весь экран, не будет "пазловой картинки". У этого метода есть одна особенность (некоторые считают плюсом, некоторые минусом) - строчка background-attachment: fixed; фиксирует картинку, иными словами делает так, чтобы бри прокрутке страницы фоновая картинка не прокручивалась, а оставалась на месте.