Товаров: 0 (0р.)

Адаптивная картинка html: 5 трюков CSS для экономии времени

Содержание

Как сделать адаптивное изображение на сайт с помощью HTML5 и CSS3

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

Как это реализовать правильно на HTML5?

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

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

 

Как делали раньше

Данный способ создания адаптивного изображения является действенным и качественным, в котором даже нет необходимости использования медиа-запросов. Код имеет всего 2 строчки, которые выполняют свои функции на ура:

img { max-width: 100%; height: auto; }

img {

    max-width: 100%;

    height: auto;

}

Строка 2 — задаётся правило, согласно которому максимальная ширина изображения будет равна ширине экрана устройства. Таким образом, ширина картинки будет меняться, в зависимости от размера экрана.

Строка 3 — согласно данному правилу, при изменение max-width, высота картинки будет меняться пропорционально её ширине. Собственно, чтобы картинка имела заданные изначально пропорции.

Как я уже сказал — железный вариант, для быстрого задания адаптивности изображению, но отсутствует возможность создания изображения под мобильные устройства, без задания дополнительных свойств.

 

Как делают сейчас с помощью HTML5

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

  • адаптивность изображения;
  • автоматический подбор оптимальной картинки;
  • возможность обрезки изображения;
  • не требуются css-правила;
  • валидный код.

Все эти преимущества содержит в себе HTML5-тег — <picture>. Его синтаксис может показаться необычным, но как только вы к нему привыкнете — поймете, что это действительно круто:

<picture> <source srcset=»mobile.jpg» media=»(max-width: 320px)» alt=»Урезанная картинка»> <source srcset=»standart.jpg»> <img srcset=»standart.jpg» alt=»Исходная картинка»> </picture>

<picture>

    <source srcset=»mobile. jpg» media=»(max-width: 320px)» alt=»Урезанная картинка»>

    <source srcset=»standart.jpg»>

    <img srcset=»standart.jpg» alt=»Исходная картинка»>

</picture>

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

  • img — всем привычный тег изображения;
  • source — новый тег, в котором мы записываем условие для определенного размера экрана и соответствующее ему изображение. Таких тегов должно быть столько, сколько условий мы хотим создать.

Помимо этого существует новый для нас тег: srcset — не стоит пугаться, он необходим только для задания пути к изображению.

Последний тег media имеет роль медиа-запроса. Как видно из примера, синтаксис записи аналогичен тому, что мы записываем в CSS — ничего сложного.

В качестве медиа-запросов можно использовать:

  • max-width;
  • min-width;
  • max-height;
  • min-height;
  • orientation.

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

<picture> <source srcset=»mobile_landscape.jpg» media=»(max-width: 30em) and (orientation: landscape)»> <source srcset=»mobile_portrait.jpg» media=»(max-width: 30em) and (orientation: portrait)»> <source srcset=»standart_landscape.jpg» media=»(min-width: 30em) and (orientation: landscape)»> <source srcset=»standart_portrait.jpg» media=»(min-width: 30em) and (orientation: portrait)»> <img srcset=»standart_landscape.jpg» alt=»Исходная картинка»> </picture>

<picture>

    <source srcset=»mobile_landscape.jpg» media=»(max-width: 30em) and (orientation: landscape)»>

    <source srcset=»mobile_portrait.jpg» media=»(max-width: 30em) and (orientation: portrait)»>

    <source srcset=»standart_landscape. jpg» media=»(min-width: 30em) and (orientation: landscape)»>

    <source srcset=»standart_portrait.jpg» media=»(min-width: 30em) and (orientation: portrait)»>

    <img srcset=»standart_landscape.jpg» alt=»Исходная картинка»>

</picture>

 

Вывод

С помощью этих 2 способов можно сделать адаптивное изображение на всех видах устройств, но как мы уже выяснили тег <picture> имеет больше возможностей и преимуществ, чем его аналог. Я советую пользоваться именно вторым вариантом, так как его синтаксис выглядит очень приятно и не требует внесения изменений в CSS.

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

 

 


Вконтакте

Facebook

Twitter

Google+

E-mail

Это интересно

Подписаться на новости

Синтаксис адаптивных изображений HTML в зависимости от цели

От автора: это руководство по синтаксису HTML для адаптивных изображений (и немного CSS).

Синтаксис адаптивных изображений — это обслуживание одного изображения из нескольких вариантов в зависимости от правил и обстоятельств.

Есть две формы адаптивных изображений, и они предназначены для двух разных вещей.

Если ваша единственная цель — увеличение производительности, тогда вам нужно…

<img srcset=»» src=»» alt=»» >

<img

  srcset=»»

  src=»»

  alt=»»

>

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

Использование адаптивных изображений дает значительный прирост производительности. Вес изображения оказывает огромное влияние на общую производительность страниц, и адаптивные изображения являются одним из лучших способов снижения веса изображения. Представьте, что браузер может выбирать между изображением 300 × 300 или 600 × 600. Если браузеру требуется только 300 × 300, это потенциально экономия в 4 раза! Экономия обычно возрастает по мере уменьшения разрешения экрана и размера области просмотра; на маленьких экранах, как показывает пара из этих кейсов, возможна экономия в 70-90%.

Если вам также важен — контроль дизайна, тогда вам нужно…

<picture> <source srcset=»» media=»»> <source srcset=»» media=»»> <img src=»» alt=»»> </picture>

<picture>

  <source srcset=»» media=»»>

  <source srcset=»» media=»»>

  <img src=»» alt=»»>

</picture>

Другая цель адаптивных изображений — не просто обслуживать разные размеры одного и того же изображения, но и обслуживать разные изображения . Например, обрезка изображения по-разному в зависимости от размера экрана и различий в макете. Это называется «art direction».

Элемент picture также используется для резервных типов изображений и любого другого типа переключения медиа-запросов (например, для разных изображений в темном режиме). Вы получаете больший контроль над тем, что отображают браузеры.

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

Использование srcset

Синтаксис <img srcset=»» src=»» alt=»»> предназначен для обслуживания разного размера одной версии изображения. Вы можете попытаться использовать с помощью этого синтаксиса совершенно разные изображения, но браузеры предполагают, что все в a srcset визуально идентично и выберают любой размер, который, по их мнению, будет наилучшим, при этом невозможным для предсказания способом. Так что я бы не рекомендовал это.

Возможно, самый простой из возможных синтаксисов адаптивных изображений — это добавить атрибут srcset с дескрипторами x, чтобы пометить изображения для использования на дисплеях с различной плотностью пикселей.

<img alt=»A baby smiling with a yellow headband. « src=»baby-lowres.jpg» srcset=»baby-highres.jpg 2x» >

<img

  alt=»A baby smiling with a yellow headband.»

  src=»baby-lowres.jpg»

  srcset=»baby-highres.jpg 2x»

>

Здесь мы сделали копию изображения по умолчанию (src) в низком разрешении (1×). Сделать изображением по умолчанию самый маленький / самый быстрый ресурс обычно является разумным выбором. Мы также предоставляем 2х версию. Если браузер знает, что он находится на дисплее с более высокой плотностью пикселей (2x), он будет использовать это изображение.

Демонстрация

<img alt=»A baby smiling with a yellow headband.» src=»baby-lowres.jpg» srcset=» baby-high-1.jpg 1.5x, baby-high-2.jpg 2x, baby-high-3.jpg 3x, baby-high-4.jpg 4x, baby-high-5.jpg 100x « >

<img

  alt=»A baby smiling with a yellow headband. «

  src=»baby-lowres.jpg»

  srcset=»

    baby-high-1.jpg 1.5x,

    baby-high-2.jpg 2x,

    baby-high-3.jpg 3x,

    baby-high-4.jpg 4x,

    baby-high-5.jpg 100x

  «

>

Вы можете создать столько вариантов плотности пикселей, сколько захотите.

Хотя это круто и полезно, x-дескрипторы учитывают лишь небольшой процент использования адаптивных изображений. Почему? Они позволяют браузерам адаптироваться только на основе одного: плотности пикселей. Однако часто адаптивные изображения используются в адаптивных макетах, а размер макета изображения уменьшается и растягивается вместе с областью просмотра. В таких ситуациях браузер должен принимать решения на основе двух вещей: плотность пикселей на экране и размер макета изображения. Вот тут-то в игру вступают дескриптор w и атрибут sizes, которые мы рассмотрим в следующем разделе.

Использование srcset/ w+sizes

Это полезная вещь. На нее приходится около 85% использования адаптивных изображений в Интернете. Мы по-прежнему предоставляем одно и то же изображение в разных размерах, только мы даем браузеру больше информации, чтобы он мог адаптироваться на основе как плотности пикселей, так и размера макета.

<img alt=»A baby smiling with a yellow headband.» srcset=» baby-s.jpg 300w, baby-m.jpg 600w, baby-l.jpg 1200w, baby-xl.jpg 2000w « >

<img

  alt=»A baby smiling with a yellow headband.»

  srcset=»

    baby-s.jpg  300w,

    baby-m.jpg  600w,

    baby-l.jpg  1200w,

    baby-xl.jpg 2000w

  «

  sizes=»70vmin»

>

Мы по-прежнему предоставляем несколько копий одного изображения и позволяем браузеру выбрать наиболее подходящую. Но вместо того, чтобы маркировать их по плотности пикселей (x), мы помечаем их шириной ресурса, используя w-дескрипторы. Так что если baby-s.jpg имеет размер 300 × 450, мы помечаем его как 300w.

Использование srcset с дескрипторами ширины (w) означает, что его необходимо будет связать с атрибутом sizes, чтобы браузер знал, сколько места будет занимать изображение. Без этой информации браузеры не смогут сделать разумный выбор.

Демонстрация

Указание точного sizes

Указание атрибутов sizes может стать сложным. Атрибут sizes описывает ширину, с которой изображение будет отображаться в макете вашего конкретного сайта, это означает, что он тесно связан с CSS. Ширина рендеринга изображений зависит от макета, а не только от области просмотра!

Давайте рассмотрим на довольно простой макет с тремя контрольными точками.

Демонстрация

Котрольные точки задаются в CSS медиа-запросами:

body { margin: 2rem; font: 500 125% system-ui, sans-serif; } .page-wrap { display: grid; gap: 1rem; grid-template-columns: 1fr 200px; grid-template-areas: «header header» «main aside» «footer footer»; } @media (max-width: 700px) { . page-wrap { grid-template-columns: 100%; grid-template-areas: «header» «main» «aside» «footer»; } } @media (max-width: 500px) { body { margin: 0; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

body {

  margin: 2rem;

  font: 500 125% system-ui, sans-serif;

}

.page-wrap {

  display: grid;

  gap: 1rem;

  grid-template-columns: 1fr 200px;

  grid-template-areas:

    «header header»

    «main aside»

    «footer footer»;

}

 

@media (max-width: 700px) {

  .page-wrap {

    grid-template-columns: 100%;

    grid-template-areas:

      «header»

      «main»

      «aside»

      «footer»;

  }

}

@media (max-width: 500px) {

  body {

    margin: 0;

  }

}

Размер изображения разный в каждой контрольной точке. Вот разбивка всех фрагментов, которые влияют на ширину макета изображения в наибольшей контрольной точке (когда область просмотра шире, чем 700px):

Ширина изображения равна 100vw минус все явно заданные размеры margin, padding, ширины столбцов и gap.

Наибольший размер: у нас доступно 9rem явного расстояния, поэтому изображение будет иметь ширину calc(100vw — 9rem — 200px). Если бы в этом столбце использовалась единица fr, вместо 200px, у нас могли бы возникнуть проблемы.

При средних размерах: боковая панель опускается ниже, поэтому интервал, который нужно учитывать становится меньше. Тем не менее, мы можем задать calc(100vw — 6rem), чтобы учитывать поля и отступы.

Наименьший размер: поля блока удаляются, поэто достаточно просто calc(100vw — 2rem).

Уф! Честно говоря, я обнаружил, что задать это все немного сложно, и я сделал кучу ошибок, когда создавал этот алгоритм. В итоге у меня получилось это:

<img . .. />

<img

  …  

  sizes=»

    (max-width: 500px) calc(100vw — 2rem),

    (max-width: 700px) calc(100vw — 6rem),

    calc(100vw — 9rem — 200px)

  «

/>

Атрибут sizes, который дает браузеру ширину изображения во всех трех контрольных точках, факторинг в сетке макета, и окружающие gap, margin и padding, все это в конечном итоге влияет на ширину изображения.

Но подождите! Барабанная дробь! Это все еще неверно. Я не понимаю, почему именно, потому что для меня это выглядит как 100% описывающее то, что происходит в макете CSS. Но это неправильно, потому что RespImageLint Мартина Освёгера говорит так. Запуск этого инструмента для изолированной демо-версии, не показывает других проблем, кроме того факта, что атрибут sizes является неправильным для некоторых размеров области просмотра, и он должен быть:

<img … >

<img

  . ..

  sizes=»

    (min-width: 2420px) 2000px,

    (min-width: 720px) calc(94.76vw — 274px),

    (min-width: 520px) calc(100vw — 96px),

    calc(100vw — 32px)

  «

>

Я не знаю, как это рассчитывается, и это совершенно невозможно сделать вручную, но это точно. Инструмент Мартина программно изменяет размер страницы и записывает атрибут sizes, который описывает фактическую наблюдаемую ширину изображения в широком диапазоне размеров области просмотра. Это математика, которую обрабатывают компьютеры, так что это правильно. Поэтому, если вам нужен сверхточный sizes атрибут, я бы рекомендовал сначала поставить неправильный атрибут, запустить этот инструмент и скопировать правильный.

Более простой sizes

Другой вариант — использовать для sizes метод «Молотка и зубила™» (или, другими словами, приблизительные вычисления). Это настоятельно рекомендуется.

Например, sizes=»96vw» говорит: «Это изображение будет довольно большим на странице — почти на всю ширину — но всегда будет небольшой отступ по краям. Или sizes=»(min-width: 1000px) 33vw, 96vw» говорит: «Это изображение имеет трехколоночную разметку на больших экранах, в противном случае оно будет близко к полной ширине». Практически, это может быть разумным решением.

Вы можете обнаружить, что некоторые автоматизированные адаптивные графические решения, которые не имеют возможности определять точно ваш макет, делают предположение — что-то вроде sizes=»(max-width: 1000px) 100vw, 1000px». Это просто говорит: «Эй, мы на самом деле мало что знаем об этом макете, но мы сделает попытку, в худшем случае, изображение будет растягиваться на всю ширину, и будем надеяться, что оно никогда не будет отображаться шире, чем на 1000 пикселей».

Абстрагируя sizes

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

По сути, я говорю об установке значения sizes один раз в переменной и об использовании этой переменной во множестве разных элементов <img> на сайте. Нативный HTML не дает такой возможности, но любой внутренний язык да; например, константы PHP, переменные конфигурации Rails, context API React, используемый для установки глобальной переменной состояния, или переменные в языке шаблонов, таком как Liquid, могут быть использованы для абстрагирования sizes.

<?php // Где-то глобально $my_sizes = «»; ?> <img srcset=»» src=»» alt=»» />

<?php

  // Где-то глобально

  $my_sizes = «»;

?>

 

<img

  srcset=»»

  src=»»

  alt=»»

  sizes=»<?php echo $my_sizes; ?>»

/>

«Выбор браузера»

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

Сначала математика довольно проста. Скажем, вы собираетесь вывести изображение шириной 40vw в окне просмотра шириной 1200px на экране с плотностью пикселей 2x. Идеальное изображение будет иметь ширину 960 пикселей, поэтому браузер будет искать самое близкое, что у него есть. Браузер всегда рассчитывает размер цели, который он предпочел бы, исходя из ситуации области просмотра и плотности пикселей, а также того, что он знает sizes, и сравнивает эту цель с тем, из чего он выбирает в srcset. Однако то, как браузеры делают выбор, может стать немного странным.

Браузер может учесть больше вещей в этом уравнении, если захочет. Например, он мог бы учитывать текущие скорости сети пользователя или то, переключил ли пользователь какое-либо предпочтение «сохранения данных». Я не уверен, что какие-либо браузеры действительно делают подобные вещи, но они могут сделать это, если захотят, так как спецификация это определяет. То, что иногда выбирают некоторые браузеры, это извлечение из кеша. Если математика показывает, что они должны использовать изображение с 300px, но у них уже есть 600px в локальном кеше, они просто будут использовать это. Умно. В этом заключается сила синтаксиса srcset / sizes. Это также объясняет, почему вам всегда стоит использовать в srcset разные размеры одного и того же изображения: у вас нет возможности узнать, какое изображение будет выбрано. Это выбор браузера.

Это странно. Разве браузер уже не знает это все?

Вы можете подумать: «Хм, почему я должен сообщать браузеру, насколько велико изображение, разве он сам не знает этого?» Ну, он знает, но только после того, как вы загрузили HTML и CSS и выложили все. Атрибут sizes связан со скоростью. Он дает браузеру достаточно информации, чтобы сделать правильный выбор сразу, как только он увидит ваш img.

<img data-sizes=»auto» data-srcset=» responsive-image1.jpg 300w, responsive-image2.jpg 600w, responsive-image3.jpg 900w» />

<img

  data-sizes=»auto»

  data-srcset=»

    responsive-image1.jpg 300w,

    responsive-image2.jpg 600w,

    responsive-image3.jpg 900w»

  class=»lazyload»

/>

Теперь вы можете подумать: «А как же отложенно загруженные изображения?» (например, к тому времени, когда запрашивается отложенно загруженное изображение, макет уже создан, и браузер уже знает размер рендеринга изображения). Что ж, хорошая мысль! Библиотека lazysizes Александра Фаркаса автоматически задает атрибуты sizes при отложенной загрузке, и сейчас идет постоянная дискуссия о том, как автоматически выполнять загрузку sizes изображений при отложенной загрузке.

sizes может быть больше, чем область просмотра

Короткое примечание относительно sizes. Скажем, у вас на сайте есть эффект, когда изображение «увеличивается» при нажатии. Может быть, оно расширяется, чтобы заполнить всю область просмотра, или, может быть, оно увеличится еще больше, чтобы вы могли видеть больше деталей. В прошлом нам приходилось менять местами src при нажатии, чтобы перейти на версию с более высоким разрешением. Но теперь, предполагая, что источник с более высоким разрешением уже есть в srcset, вы можете просто изменить атрибут sizes на что-то огромное, например, 200vw или 300vw, и браузер должен автоматически загрузить источник со сверхвысоким разрешением.

Использование picture

Надеюсь, вы поняли основную идею использования <img srcset=»» sizes=»» alt=»»>, чтобы обслуживать разные версии разных размеров одного и того же изображения. Синтаксис <picture> может делать это тоже, но разница в том, что браузер должен соблюдать правила, которые вы установили. Это полезно, когда вы хотите изменить не только разрешение загруженного изображения в соответствии с ситуацией пользователя. Это преднамеренное изменение изображения обычно называют «art direction».

Art direction

<picture> <source srcset=»baby-zoomed-out.jpg» media=»(min-width: 1000px)» /> <source srcset=»baby.jpg» media=»(min-width: 600px)» /> <img src=»baby-zoomed-in.jpg» alt=»Baby Sleeping» /> </picture>

<picture>

  <source

    srcset=»baby-zoomed-out.jpg»

    media=»(min-width: 1000px)»

  />

  <source

    srcset=»baby.jpg»

    media=»(min-width: 600px)»

  />

  <img

    src=»baby-zoomed-in.jpg»

    alt=»Baby Sleeping»

  />

</picture>

Этот блок кода является примером того, как может выглядеть три этапа «art direction» изображения.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

На больших экранах вы отображаете неувеличенную фотографию.

На средних экранах отображаете ту же фотографию, но немного увеличенную.

На маленьких экранах вы увеличиваете масштаб еще больше.

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

Вот демонстрация, написанная на Pug, чтобы абстрагироваться от повторяющейся природы picture.

Art direction может сделать намного больше, чем просто обрезка

Хотя обрезка и масштабирование, являются наиболее распространенными формами art direction, вы можете сделать с его помощью гораздо больше. Например, вы можете:

Затемнить изображения для пользователей в темном режиме,

предотвратить отправку анимированных GIF-файлов пользователям с предпочтением «уменьшенное движение»,

переупорядочить содержимое изображения так, чтобы оно помещалось «выше первого сгиба» на коротких окнах просмотра,

установить ограничение максимального разрешения, чтобы сэкономить размер для пользователей с устройствами 3x-plus,

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

И это еще далеко не предел.

Сочетание source и srcset

Поскольку <source> также использует синтаксис srcset, они могут быть объединены. Это означает, что вы можете воспользоваться преимуществами производительности srcset даже при замене визуально различных изображений с помощью <source>. Код становится довольно объемным, тем не менее!

<picture> <source srcset=» baby-zoomed-out-2x.jpg 2x, baby-zoomed-out.jpg « media=»(min-width: 1000px)» /> <source srcset=» baby-2x.jpg 2x, baby.jpg « media=»(min-width: 600px)» /> <img srcset=» baby-zoomed-out-2x.jpg 2x « src=»baby-zoomed-out.jpg» alt=»Baby Sleeping» /> </picture>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<picture>

  <source

    srcset=»

      baby-zoomed-out-2x. jpg 2x,

      baby-zoomed-out.jpg

    «

    media=»(min-width: 1000px)»

  />

  <source

    srcset

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

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

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

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

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

Посмотреть примерСкачать

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

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

HTML часть

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

HTML КОД

1
2
3
4
5
6
7
8
9
<!Doctype html>
<html>
    <head>
        <title>Заголовок страницы</title>
    </head>
    <body>
        <!-- Здесь размещаете контент -->
    </body>
</html>

CSS часть

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

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 (Медиа запросы), которые позволяют задать отдельные свойства для произвольной ширины экрана:

1
2
3
4
5
6
7
8
9
/* Для мобильных устройств */
@media only screen and (max-width: 767px) {
    body {
        /* Если размер экрана меньше 767px показываем уменьшенное изображение,
        * которое на 77% меньше чем оригинальное для обеспечения быстрой загрузки 
        * на мобильных устройствах */
        background-image: url(../images/background-photo-mobile-devices. jpg);
    }
}

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

Бонус к статьей «Где брать фоновые изображения?»

Как и обещал в начале статьи даю Вам ссылку на очень качественный сервис, где Вы сможете подобрать фоновое изображение для своей продающей страницы. Он находится ЗДЕСЬ.

Вывод

Данный эффект очень актуален и его использование можно увидеть практически на каждой продающей странице.

Успехов!

С Уважением, Юрий Немец

Адаптивные изображения без шаманства / Блог компании Кельник / Хабр

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

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

  1. Быть элементами дизайна сайта (бекграунды, кнопки и т.д.).
  2. Загружаться через специальные модули (например, изображения в фотоальбом).
  3. Вставляться через WYSIWYG-редактор CMS (например, в текст статьи).


Мы захотели получить такое решение, которое было бы некой «надстройкой» над сайтом. Чтобы можно было не лезть в код CMS, через которую загружаются изображения на сайт, а также не готовить адаптивные картинки вручную.

Сначала на помощь приходит реализация Adaptive Images…

Метод Adaptive Images


Идея в том, чтобы с минимумом изменений в коде сайта предоставить эти самые адаптивные картинки. Алгоритм следующий:
  1. Небольшой яваскрипт записывает в куки максимальное значение из ширины/высоты устройства. Предполагается, что картинку больше данного размера показывать нет смысла.
  2. С помощью директивы в .htaccess идет рерайт всех картинок сайта на php-скрипт adaptive-images.php.
  3. В php-скрипте есть конфиг разрешений (связанный с media queries стилей). Значение из куки подгоняется под ближайшее в большую сторону значение из этого конфига. Если изображение по запрашиваемому пути существует и его ширина больше требуемой — изображение пережимается и кладется в специальную папку кеша (если оно не было пережато заранее).
  4. Скрипт отдает картинку клиенту.

Плюсы Adaptive Images

  • Не требуется менять код сайта, кроме вставки одной строки js.
  • Не нужно пережимать картинки вручную, они сами пережмутся при необходимости.
  • Нет лишних клиентских запросов.
  • Поддерживается время жизни кешированных картинок — при обновлении оригинала рано или поздно кешированная будет обновлена.
  • Легко внедрить, так же просто откатить, при необходимости изменения размеров картинок все решается правкой одного массива.

Минусы Adaptive Images

А теперь немного о грустном. Данное решение подразумевает, что все (вообще все) картинки на сайте будет отдавать не nginx, не apachе, а php-скрипт. Каждая картинка — это запуск интерпретатора php (даже если картинка уже пережата). Это и медленно, и идеологически неверно.

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

Наш вариант


Главная идея: не запускать php-скрипт, если изображение уже существует. Для этого apache в момент редиректа должен знать название пережатой под данное разрешение картинки. Это значит, что определение разрешения должно быть переложено с php на js. Таки образом js должен не просто вычислить максимальное значение из ширины/высоты устройства, а также определить требуемое разрешение, и именно его уже записать в куку.

Также, чтобы apache мог проверить наличие картинки, он должен знать правило, по которому сохраняются пережатые изображения (в частности, название папки кеша), которое вообще говоря определено в php-скрипте. /images_adaptive/.+\.(?:jpe?g|gif|png)$Пришел запрос на адаптивную картинку — рерайт с предыдущего правила, или прямой запрос, которого, между прочим, быть не должно. То есть, нигде ссылки прямо на эту папку, естественно, ставить нельзя.

RewriteCond %{REQUEST_FILENAME} !-f
Если такого файла все еще нет, то есть картинка еще не была пережата в нужный размер (и тут мы убиваем ненужные запросы в php при повторных обращениях к картинке).
RewriteRule .* ai.php [L]
Направляем запрос в наш php-скрипт, который найдет, пережмет при необходимости, и отдаст нужную картинку.

Скрипт-обработчик запросов: ai.php

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

Минусы нашего форка

  • Избыточность хранимых данных. Если у нас есть одна картинка и 5 желаемых размеров, в которые ее нужно пережать, то сервер будет хранить в самом плохом случае все 6 изображений (оригинал и 5 копий). При этом, даже если картинку пережимать не нужно (скажем, она 300×100, а минимальное разрешение 480), то картинка все равно будет «пережата», то есть скопирована, 5 раз. Под каждое разрешение, чтобы избежать отдачи статики через php.
  • Обновление адаптивных изображений. Когда оригинал картинки обновится, скрипт-обработчик ничего об этом не узнает. Тут надо думать, подходит ли это для каждого конкретного случая, и как с этим бороться. Периодически очищать кеш вовсе, или что-то еще.
  • Дублирование информации в php, js и .htaccess

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

Адаптивное изображение на CSS

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

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

Итак, как решить эту проблему средствами каскадных таблиц стилей – CSS.

Вариант 1. Работает только на отдельных изображениях.

В CSS файле создать класс img-adaptive со следующими параметрами:

.css-adaptive {
display: block;
max-width: 100%;
height: auto;
}

Далее, при вставке изображения нужно подставить это класс:

<img src=”images/1. jpg” class=”css-adaptive”>

При этом изображение пудет подстраиваться под ширину блока в которое оно помещается. Но этот способ работает только на те изображения, в которые подставляется класс css-adaptive.

Вариант 2. Работает на все изображения в определенном блоке.

Допустим на вашем новом сайте публикуются новости. В каждую новость добавляется по несколько изображений. При этом все должны подстраиваться под размер экрана. А прописывать класс img-adaptiveдля каждого, во-первых, долго, а во-вторых, если новости добавляют обычные пользователи, то они просто не будут знать про этот класс.

Итак, нужно поместить все новости в контейнер div например с классом news.

<div class=”news”>
<h2>Адаптивность изображений в CSS</h2>
<img src=”imahes/1.jpg”>
<img src=”imahes/2.jpg”>
<img src=”imahes/3.jpg”>
</div>

А в файл с CSS следующее:

.news img {
display: block;
max-width: 100%;
height: auto;
}

Таким образом все изображения в новости станут адаптивными независимо от их количества и размера.

Поделиться в соц. сетях:

Адаптивные изображения с помощью CSS – Dobrovoimaster

В этом небольшом уроке, мы рассмотрим простейшие способы создания адаптивных изображений с помощью CSS.
Существует не мало различных решений сделать изображения адаптивными, все они различаются и по сложности, и степени поддержки браузерами. Примером сложного пути реализации адаптивных картинок, является использование атрибута srcset, для которого требуется несколько изображений, больше разметки, а также зависимость от поддержки браузерами.

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

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

img {
  width: 100%;
  height: auto;
}

img { width: 100%; height: auto; }

Базовые значения адаптивного изображения

Начнём с рассмотрения базового примера, когда нам необходимо сделать одиночные картинки используемые в записях, или других отдельных блоках, полностью адаптивными.
Например, у нас есть контейнер, которому мы задали базовую ширину width: 96%; и выставили максимальную ширину в max-width: 960px;, в этом блоке нам необходимо вывести адаптивное изображение.
Для этого элементу <img> внутри контейнера определяем ширину в 100%, так, что его ширина всегда будет равна ширине контейнера, независимо от размера области просмотра. Высоту, соответственно, переводим в автоматический режим, в итоге изображение будет изменяться пропорционально.

HTML:

<div>
  <img src="image01.jpg" />
</div>

<div class=”container”> <img src=”image01.jpg” width=”960″ height=”640″ /> </div>

CSS:

div.container {
  width: 96%;
  max-width: 960px;
  margin: 0 auto; /* центрируем основной контейнер */
}
img {
  width: 100%; /* ширина картинки */
  height: auto; /* высота картинки */
}

div.container { width: 96%; max-width: 960px; margin: 0 auto; /* центрируем основной контейнер */ } img { width: 100%; /* ширина картинки */ height: auto; /* высота картинки */ }

Обратите внимание, что <img> элемент будет адаптивным, даже если были заданы фиксированные значения HTML-атрибутов ширины и высоты непосредственно в разметке.

Адаптивные изображения в колонках

Иногда мы хотим видеть изображения выстроенные в ряд бок о бок, или например, в виде сетки, для организации простейшей галереи картинок.
Для этого, необходимы лишь внести небольшие изменения в код, который использовали выше, первое, это уменьшить ширину свойство width и задать элементу <img> значение inline-block для свойства display, т.е. сделать его встроенным.
Давайте рассмотрим две компоновочные схемы: расположение картинок в две колонки и макет из трёх столбцов.

1. Макет изображений в две колонки
Для двух-колоночного макета изображений, мы можем установить ширину в 48%, или примерно половину контейнера. Не устанавливаем значения в 50%, для того, чтобы были боковые отступы.

HTML:

<div>
  <img src="image01.jpg" />
  <img src="image02.jpg" />
</div>

<div class=”container”> <img src=”image01.jpg” width=”960″ height=”640″ /> <img src=”image02.jpg” width=”960″ height=”640″ /> </div>

CSS:

img {
  width: 48%;
  display: inline-block;
}

img { width: 48%; display: inline-block; }

2. Три колонки изображений

С трёх-колоночным макетом концепция та же, необходимо распределить ширину базового контейнера на три картинки, для этого достаточно установить значения ширины изображений около одной трети ширины контейнера: 32%.

HTML:

<div>
  <img src="image01.jpg" />
  <img src="image02.jpg" />
  <img src="image03.jpg" />
</div>

<div class=”container”> <img src=”image01.jpg” width=”960″ height=”640″ /> <img src=”image02.jpg” width=”960″ height=”640″ /> <img src=”image03.jpg” width=”960″ height=”640″ /> </div>

CSS:

img {
  width: 32%;
  display: inline-block;
}

img { width: 32%; display: inline-block; }

Условная расстановка адаптивных изображений

В следующем примере, мы рассмотрим вариант использования адаптивных картинок с различной расстановкой в зависимости от устройств просмотра, т. е. при просмотре на смартфонах изображения будут отображаться в одну колонку, в две колонки на планшетах, и выстраиваться в четыре колонки на больших экранах.
Для реализации задуманного, применим медиа-запросы @media, указав тип носителя, для которого будет применяться то или иное максимальное значение ширины изображений max-width.

HTML:

<div>
  <img src="image01.jpg" />
  <img src="image02.jpg" />
  <img src="image03.jpg" />
  <img src="image04.jpg" />
</div>

<div class=”container”> <img src=”image01.jpg” width=”960″ height=”640″ /> <img src=”image02.jpg” width=”960″ height=”640″ /> <img src=”image03.jpg” width=”960″ height=”640″ /> <img src=”image04.jpg” width=”960″ height=”640″ /> </div>

CSS:

/* Для небольших устройств (смартфоны) */
img {
  max-width: 100%;
  display: inline-block;
}
/* Для средних устройств (планшеты) */
@media (min-width: 420px) {
  img {
    max-width: 48%;
  }
}
/* Для больших устройств (ноуты, пк) */
@media (min-width: 760px) {
  img {
    max-width: 24%;
  }
}

/* Для небольших устройств (смартфоны) */ img { max-width: 100%; display: inline-block; } /* Для средних устройств (планшеты) */ @media (min-width: 420px) { img { max-width: 48%; } } /* Для больших устройств (ноуты, пк) */ @media (min-width: 760px) { img { max-width: 24%; } }

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

Адаптивное изображение на всю ширину экрана

Для того, чтобы сделать широко-форматные адаптивные изображения, которые заполняют 100% размера окна просмотра, необходимо просто удалить свойство максимальной ширины контейнера max-width (значение в 960px) и установить ему ширину width в 100%. Ширина изображения, так же выставляется в значение 100%.

CSS:

.container {
  width: 100%;
}
img {
  width: 100%;
}

.container { width: 100%; } img { width: 100%; }

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

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

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

С Уважением, Андрей .

Буду всем признателен, если поддержите проект — добавив блог в исключения AdBlock и поделитесь ссылкой на запись в своих соц-сетях:

Учебное пособие по

адаптивным изображениям | HTML и CSS — это сложно

Оптимизация ширины экрана с использованием srcset

Отлично! Мы можем сэкономить дополнительные байты для устройств без сетчатки. К сожалению, выше srcset метод упускает важный вариант использования для более крупных изображения: если у пользователя есть смартфон Retina, он загрузит изображение с высоким разрешением, даже если стандартной версии будет достаточно.

Представьте, что мы хотим отобразить большую фотографию в нашем .header элемент.Ширина заголовка в макете рабочего стола составляет 960 пикселей, поэтому наша фотография должен быть не менее 1920 пикселей в ширину для правильного отображения на экранах сетчатки. Мы также предоставим фото шириной 960 пикселей для стандартных экранов. Сейчас же, рассмотрим смартфон с экраном Retina. Смартфоны обычно меньше Ширина 400 пикселей в портретном режиме, что означает, что соответствующий Изображение с качеством сетчатки должно быть всего 800 пикселей в ширину.

Эй! Мы можем отправлять наши фотографии в стандартном разрешении на смартфоны Retina!

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

  
jpg' srcset = 'images / photo-big.jpg 2000w, images / photo-small.jpg 1000w ' />

У нас есть тот же элемент srcset , что и в последнем разделе, но вместо дескрипторов 1x и 2x мы обеспечение собственной физической ширины изображения.Модель 2000w сообщает браузеру, что файл photo-big.jpg имеет ширину 2000 пикселей. Аналогично, 1000w означает photo-small.jpg имеет ширину 1000 пикселей. Если вас интересует этот символ w , это специальный блок, который используется только для такой оптимизации изображений. сценарий.

Одной ширины изображения недостаточно, чтобы устройство определило, какое изображение он должен загрузиться. Нам также нужно указать, какова окончательная ширина отрисовки изображение будет.Вот тут-то и пригодится атрибут sizes . Это определяет серию медиа-запросов вместе с шириной отображаемого изображения когда действует этот медиа-запрос.

Здесь мы говорим, что когда экран имеет размер не менее 960 пикселей ширина изображения также будет 960 пикселей. В противном случае 100vw значение по умолчанию сообщает браузеру, что ширина изображения будет 100% от «ширина области просмотра» (причудливый термин для обозначения ширины экрана). Ты можешь читать больше о vw единица в MDN.Все это соответствует поведению изменения размера изображения. это в нашем CSS.

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

  .header {
  высота: авто;
  justify-content: наследовать;
  выровнять элементы: наследовать;
}

.photo img {
  ширина: 100%;
  дисплей: блок;
}
  

Помните, что наша фотография с низким разрешением имеет ширину 1000 пикселей, что означает, что Устройства 2x Retina могут использовать его, если их экран менее 500 пикселей широкий. В Firefox теперь у вас должна быть возможность изменить размер браузера, чтобы увидеть версия сетчатки («Большая»), когда ширина окна превышает 500 пикселей и версия без сетчатки («Small») для меньшей ширины.

Теперь мы отправляем изображение размером 115 КБ на мобильные устройства вместо принудительного использовать изображение высокого разрешения 445 КБ. Это большое дело, особенно для сайты, которые используют много фотографий.

Тестирование с использованием хрома

Этот метод отлично работает в Chrome, но мы не можем точно сказать потому что это умно.Chrome всегда будет использовать версию с высоким разрешением, если он уже был кэширован локально, а это значит, что мы не можем видеть файлы с низким разрешением версии, просто сузив окно браузера. Мы должны избегать местных кеш браузера, открыв новое окно в режиме инкогнито, а затем избегайте загрузки photo-big.jpg , сделав окно очень узким от до загрузка страницы.

Как использовать HTML5 для получения адаптивного изображения (обновлено)

Адаптивный дизайн может остаться, но есть много проблем, которые необходимо решить, когда дело доходит до создания адаптивных изображений . Хотя адаптивные изображения автоматически изменяют размер в зависимости от размера области просмотра (что технически просто), пользователи сталкиваются с одной проблемой: вокальная точка изображения станет едва видимой, когда изображение станет слишком маленьким .

Идеальный консенсус среди веб-разработчиков заключается в том, что фактическое измерение должно также реагировать на . Браузер должен иметь возможность загружать изображения меньшего или большего размера в соответствии с размером области просмотра. Таким образом, мы можем направить и передать изображение наилучшей пропорции, а не уменьшенное изображение (как показано).

Здесь появляется элемент HTML5 picture . Картинка позволяет нам предоставлять несколько источников изображений и управлять доставкой через Media Queries. Посмотрим, как это делается, ладно?

Рекомендуемая литература: 5 методов создания истинно отзывчивых изображений

Начало работы

Я подготовил изображение в трех разных измерениях, как показано ниже. Изображение было обрезано, чтобы сосредоточить внимание на человеке на изображении.Планируется, что мы будем показывать изображение наименьшего размера на маленьких экранах и изображение большего размера на больших экранах.

Использование элемента изображения

Picturefill может работать двумя способами: мы можем встроить srcset в тег img или использовать элемент picture . Здесь мы выберем элемент picture , поскольку он более управляем, его легче понять и более читабельно.

Подобно видео и аудио элементам, изображение объединяет несколько исходных элементов, указывающих на источник изображения, как показано ниже.

<картинка>



Элемент source , как видно из приведенного выше фрагмента кода, установлен с атрибутом media . В этом атрибуте мы указываем точку останова области просмотра, на которой должно быть представлено изображение.Эффект виден сразу.

Проверьте демонстрационную страницу и измените размер области просмотра, вы должны найти изображение, показанное в пределах указанной ширины области просмотра.

Браузер поддерживает

Все браузеры теперь поддерживают элемент HTML5 picture , включая Microsoft Edge, а также мобильные браузеры. Но если вам нужно поддерживать старые браузеры, такие как Internet Explorer, где этот элемент не поддерживается, вы можете использовать полифил, Picturefill.

Picturefill — это библиотека JavaScript, разработанная Filament Group.Это позволяет нам теперь использовать элемент picture . Для начала скачайте скрипт в репозиторий Github и поместите picturefill. js или picturefill.min.js . Вы можете просто добавить его в тег head .


 
Последняя мысль

Изображение Элемент — отличное дополнение в HTML5. Он обеспечивает больший контроль над размером изображения, который браузер должен отображать для определенного размера области просмотра.Элемент изображения работает во всех последних версиях браузеров, и WordPress включает его, начиная с WordPress 4.4. Если вам когда-либо понадобится поддержка старых браузеров, таких как Internet Explorer, которые не поддерживают элемент picture , вы можете установить прокладку с помощью Picturefill .

Наконец, посмотрите демонстрацию и загрузите исходный код ниже.

Как создавать адаптивные изображения с помощью srcset

Эта статья является частью цикла веб-разработки от Microsoft.Спасибо за поддержку партнеров, которые сделали возможным использование SitePoint.

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

Если вы знакомы с адаптивным веб-дизайном (RWD), вы, вероятно, знаете, какие тонкости связаны с адаптивным дизайном (и как Bootstrap решает многие из них!).Важной частью адаптивного веб-сайта являются адаптивные изображения. В этой статье мы узнаем больше об адаптивных изображениях в Интернете и узнаем, как их создавать.

Что такое адаптивное изображение?

Проще говоря, отзывчивое изображение — это изображение, которое отображается на веб-странице в своей лучшей форме , в зависимости от устройства, с которого просматривается ваш веб-сайт. Термин « лучшая форма » может означать несколько вещей:

  • Вы хотите показать отдельный ресурс изображения в зависимости от физического размера экрана пользователя. Например: вы хотите показать отдельный ресурс изображения на 13,5-дюймовом ноутбуке и 5-дюймовом мобильном телефоне (в развернутом браузере).
  • Вы хотите показать отдельное изображение в зависимости от разрешения устройства (или отношения устройства к пикселям, которое представляет собой соотношение пикселей устройства и пикселей CSS).
  • Вы хотите показать изображение в указанном формате изображения (например, JPEG XR), если браузер поддерживает его, вероятно, из-за более высокого сжатия, которое поддерживает этот формат.

Строительные блоки для отзывчивости включены в большинство современных браузеров, включая Microsoft Edge (начиная с Windows Insider Build 10547).Здесь вы можете просмотреть состояние таких функций, как srcset , на веб-платформе.

Как включить адаптивные изображения

Есть несколько способов включить отзывчивое поведение изображений. Один из старых методов (не рекомендуемых) — это простой сценарий, но это приводит к нескольким проблемам. Во-первых, если сценарий определяет, какое изображение загружать, но сам сценарий загружается после загрузки изображений, указанных в HTML, вы потенциально можете получить два загруженных изображения.Во-вторых, если вы не укажете какое-либо изображение в HTML и хотите загрузить только изображение, определенное сценарием, у вас вообще не будет изображения для браузеров, в которых отключены сценарии.

Следовательно, нам нужен лучший способ работы с адаптивными изображениями. И, к счастью, есть! Рекомендуемый способ использования:

  1. srcset атрибут
  2. размеров атрибут
  3. изображение элемент

Давайте углубимся немного глубже.

srcset Атрибут:

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

Соотношение пикселей устройства

Соотношение пикселей устройства — это количество пикселей устройства на пиксель CSS. На соотношение пикселей устройства и устройства влияют два ключевых условия:

  1. Плотность пикселей устройства (количество физических пикселей на дюйм): Устройство с высоким разрешением будет иметь более высокую плотность пикселей и, следовательно, при том же уровне масштабирования оно будет иметь более высокое соотношение пикселей устройства по сравнению с на устройство с более низким разрешением.Например: телефон Lumia 950 высокого класса будет иметь более высокое разрешение, чем бюджетный телефон Lumia 630, и, следовательно, он будет иметь более высокое соотношение пикселей устройства при том же уровне масштабирования.
  2. Уровень масштабирования браузера: Для того же устройства более высокий уровень масштабирования означает большее количество пикселей устройства на пиксель CSS и, следовательно, более высокое отношение устройства к пикселям. Например, рассмотрите этот рисунок: когда вы увеличиваете масштаб своего браузера (Ctrl + Plus), количество пикселей CSS для вашего div остается прежним, но количество пикселей устройства, которые он занимает, увеличивается. Таким образом, у вас больше пикселей устройства на пиксель CSS.

Если вы хотите отображать отдельные изображения (или, как правило, отдельный ресурс одного и того же изображения) на основе соотношения пикселей устройства, вы должны использовать базовую реализацию srcset :

    

Дескриптор x в атрибуте srcset используется для определения отношения устройства к пикселям.Следовательно,

  1. для соотношения пикселей устройства, равного 1, будет использоваться изображение space-Needle.jpg.
  2. для отношения устройства к пикселям 2 будет использоваться изображение space-Needle-2x.jpg.
  3. для отношения устройства к пикселям 3 будет использоваться изображение space-Needle-hd.jpg.

Атрибут src используется в качестве запасного варианта для браузеров, которые еще не поддерживают реализацию srcset .

Это хорошо работает. Используя дескриптор x , вы всегда будете получать одно и то же изображение на устройствах с аналогичным соотношением пикселей устройства — даже если это означает, что вы получите такое же изображение на 13.5-дюймовый ноутбук и 5-дюймовый мобильный телефон с одинаковым соотношением пикселей устройства.

Теперь предположим, что нам нужно изображение другого размера (высота, ширина) в большем или меньшем окне просмотра. Здесь в игру вступает дескриптор w в srcset и новый атрибут — sizes .

  • w дескриптор: описывает ширину изображения, на которое ссылаются. Рассмотрим этот пример:
        
  • Здесь упоминается, что ширина первого изображения составляет 200 пикселей, второго изображения — 400 пикселей, а третьего изображения — 600 пикселей. Кроме того, если ширина экрана пользователя составляет 150 CSS-пикселей, это приравнивается к следующему в терминах x дескрипторов :
        

    (Помните, что отношение устройства к пикселям — это просто количество пикселей устройства / пикселей CSS.)

размеров Атрибут:

Фактическая реализация, в которой вам нужно изображение разного размера (разная высота, ширина) на разных размерах экрана, достигается с помощью атрибута sizes вместе с w дескриптором из srcset атрибута. Давайте еще раз рассмотрим пару примеров:

Пример 1

Допустим, вы хотите, чтобы изображение просматривалось на половине ширины области просмотра. Вы наберете:

    

Теперь браузер решит, какое изображение загрузить, в зависимости от ширины браузера и соотношения пикселей устройства. Например:

  • Если ширина браузера составляет 500 пикселей CSS, изображение будет отображаться шириной 250 пикселей (из-за 50vw). Теперь это эквивалентно указанию:
      srcset = "images / space-Need.jpg 0,8x, images / space-Need-2x.jpg 1.6x,
    images / space-Needles-hd.jpg 2.4x " 
  • Итак, для дисплея 1,5x браузер загрузит images / space-Need-2x.jpg , поскольку он дает соотношение пикселей устройства 1,6x (что наиболее подходит для дисплея 1,5x) .

Пример 2

Вы хотите, чтобы изображение отображалось с половиной ширины области просмотра, когда ширина области просмотра больше 40em, но изображение должно занимать всю ширину, когда ширина области просмотра меньше или равна 40em.Вот как вы подойдете к этому:

    

Это очень похоже на медиа-запросы. Итак, для области просмотра шириной 39em (max-width: 40em) оценивается как истинное, что означает 100vw , то есть изображение имеет такую ​​же ширину, как и область просмотра. Если область просмотра — это окно браузера, и если ширина браузера составляет 500 пикселей CSS, изображение будет отображаться в ширину 500 пикселей.Это эквивалентно указанию:

    

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

Для области просмотра шириной 41em (max-width: 40em) принимает значение false, что означает 50vw , то есть изображение вдвое меньше ширины области просмотра.

Следующий элемент, который мы увидим, — это элемент picture , но перед этим мне нужно вкратце вспомнить 🙂

Пример использования Решение
Я хочу, чтобы одно и то же изображение отображалось на всех устройствах, но я хочу отображать его с более высоким разрешением на устройствах, которые могут его поддерживать. Высота и ширина изображения должны оставаться неизменными. Создайте несколько ресурсов из одного изображения (space-Needle.jpg, space-Need-hd.jpg).Используйте srcset с дескриптором x.
Мне нужен тот же сценарий, что и выше, но я должен иметь возможность настраивать высоту и ширину изображения в зависимости от области просмотра. Используйте размеров и srcset с дескриптором w (опять же, сделайте несколько ресурсов одного и того же изображения)
Я сомневаюсь, что если я использую то же изображение для экрана меньшего размера, основной объект моего изображения может стать слишком маленьким. Я хочу отображать другое изображение (больше ориентированное на основной объект) с другим размером экрана, но я все же хочу отображать отдельные активы одного и того же изображения на основе соотношения пикселей устройства, и я хочу настроить высоту и ширину изображение на основе области просмотра.?

Решение «?» — элемент изображения !

Изображение Элемент

Как мы видели выше, элемент изображения используется, когда вы хотите показать другое изображение в зависимости от визуализированного размера изображения. picture Элемент — это контейнер, который содержит другие элементы, управляющие загружаемым изображением. Давайте посмотрим на пример:

  <рисунок>





Спейс Нидл

  

Выбирается первый элемент source , для которого медиа-запрос атрибута media имеет значение true.
Итак, если максимальная ширина области просмотра составляет 20em , соответствующий источник изображения выбирается из каталога images / small на основе соотношения пикселей устройства.Все изображения в одном srcset обычно являются несколькими активами одного и того же изображения.

Рисунок Сам по себе элемент ничего не отображает. Даже элемент source в элементе picture не представляет ничего собственного. Элемент source должен содержать атрибут srcset и может иметь атрибуты sizes , media и type . Необходимо добавить элемент img в картинку .Вы не увидите ни одного изображения без элемента img . Все элементы source в элементе picture служат только для подачи изображения в источник.

Вы также можете выбрать изображение на основе формата изображения, поддерживаемого браузером. Это особенно полезно, когда есть хорошая экономия на размере изображения только на основе формата. Например, JPEG-XR, эффективный формат изображения, который обычно занимает меньший размер изображения по сравнению с JPG, поддерживается Microsoft Edge и IE9 +.Используя атрибут типа в элементе source , вы можете проверить этот формат:

  <рисунок>





 Space Needle 

  

Когда он используется, оба атрибута: media и атрибут type должны принимать значение true для того, чтобы был выбран элемент source . Если браузер не может понять какой-либо из форматов, он возвращается к img .

Собираем все вместе

Поняв, как работают адаптивные изображения, давайте рассмотрим полный пример, в котором используются все три вместе: srcset , sizes и picture .

  


 Адаптивные изображения здесь! 




<картинка>




Человек
 
  

В этом примере мы использовали изображение , которое содержит несколько исходных элементов.Первый выбирается, если максимальная ширина 700 пикселей. Если это выбрано, атрибут sizes затем определяет размер отображаемого изображения на основе упомянутых нами контрольных точек ширины. Реализация в точности аналогична тому, что мы видели в атрибуте sizes . Итак, если максимальная ширина составляет 500 пикселей (ширина варьируется от 0 до 500 пикселей), изображение будет занимать половину области просмотра. И источник изображения выбирается на основе соотношения пикселей устройства. Однако, если ширина области просмотра больше 500 пикселей (но <= 700 пикселей , потому что мы находимся в пределах первого исходного элемента ), то изображение будет занимать только 1/10 области просмотра.

Аналогичным образом выбирается второй элемент source , если максимальная ширина составляет 1400 пикселей (что означает, что теперь ширина находится в диапазоне от 701 до 1400 пикселей). Атрибут sizes гарантирует, что если ширина области просмотра находится в диапазоне от 701 пикселей до 1000 пикселей, ширина изображения совпадает с шириной области просмотра, а если ширина области просмотра составляет от 1001 пикселей до 1400 пикселей, изображение занимает половину ширины области просмотра. Чтобы проверить все случаи, я просто меняю размер браузера и проверяю. В реальных условиях доступ к вашему сайту будет осуществляться с разных устройств, и именно там вы увидите фактическое использование адаптивных изображений.Вот результат:

(Обратите внимание, что все источники изображений и ширина изображения, установленная здесь, предназначены только для демонстрации, и, как вы можете видеть, я делаю забавные фигурки из палочек!)

Ширина области просмотра установлена ​​от 1001 до 1400 пикселей: ширина изображения составляет половину ширины области просмотра (используется источник изображения stick-figure.png)

Ширина области просмотра установлена ​​от 701 до 1000 пикселей: ширина изображения такая же, как ширина области просмотра. (Используемый источник изображения - фигурка.png)

Ширина области просмотра установлена ​​в диапазоне от 501 до 700 пикселей: ширина изображения составляет 1/10 ширины области просмотра. (Используемый источник изображения - stick-figure-thin.png)

Ширина области просмотра установлена ​​от 0 до 500 пикселей: ширина изображения составляет половину ширины области просмотра. (Используемый источник изображения - stick-figure-thin.png)

И мы почти закончили!

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

Надеюсь, вам понравилось это читать! Напишите мне в Twitter, если хотите обсудить больше!

Больше практических навыков веб-разработки

Эта статья является частью серии веб-разработки технических евангелистов Microsoft по практическому изучению JavaScript, проектам с открытым исходным кодом и передовым методам взаимодействия, включая браузер Microsoft Edge и новый механизм визуализации EdgeHTML.

Мы рекомендуем вам протестировать различные браузеры и устройства, включая Microsoft Edge - браузер по умолчанию для Windows 10 - с бесплатными инструментами на dev.modern.IE:

Углубленное техническое обучение Microsoft Edge и веб-платформы от наших инженеров и евангелистов:

Дополнительные бесплатные кроссплатформенные инструменты и ресурсы для веб-платформы:

Реализация адаптивных изображений | Uploadcare Docs

Вот простой способ сделать изображение адаптивным с помощью HTML - использовать и установите ширину в процентах для в CSS.

Ширина изображения адаптируется к ширине контейнера.

Живой пример # 1

  

<стиль>
 img {
   ширина: 100%;
   высота: авто;
 }
  

Совет: Используйте Chrome DevTools, режим устройства и вкладку сети, чтобы увидеть, как изображение меняется для этого и следующие примеры.

В этом примере размер исходного изображения 4928x3280px, размер файла 1,85 МБ. Когда мы получим уменьшенную версию изображение с помощью оператора Uploadcare CDN resize , ширина изображения уменьшается до 1000 пикселей, а размер файла уменьшается только до 125 КБ.

Установите версию изображения для экранов HiDPI с атрибутом srcset элемента и дескриптора x .

Живой пример # 2

    

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

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

На устройствах с соотношением пикселей, равным 2, мы можем получить версию изображения, которая имеет ширину 2000 пикселей и вес 200 КБ.

Это неплохо, но все равно слишком велико для загрузки на мобильные устройства. За Например, для iPhone 5 ширины изображения 640 пикселей достаточно, потому что экран ширина составляет 320 пикселей, а DRP - 2.

Наша картинка с разрешением 640 пикселей весит всего 59,5 КБ.

Чтобы загрузить изображение, которое соответствует определенным параметрам экрана, используйте дескриптор w в srcset , а также атрибут sizes .

Живой пример # 3

    

Мы сообщаем браузеру, что изображение https: // ucarecdn.com /: uuid / - / resize / 320x / 320.jpg имеет ширину 320 пикселей, изображение https://ucarecdn.com/:uuid/-/resize/640x/640.jpg имеет ширину 640 пикселей и так далее. В браузер выберет изображение в зависимости от области просмотра, а также устройства соотношение пикселей.

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

  sizes = "(min-width: 1000px) 50vw, 100vw"  

На экранах с шириной 1000 пикселей изображение занимает 50% ширины.В другом корпусов, то есть экранов меньшего размера, он будет занимать всю ширину.

Элемент - это новый элемент HTML, и он расширяет элемент . Он содержит несколько элементов которые имеют атрибут srcset и могут иметь размеров и атрибутов носителя . В media Атрибут позволяет указывать медиа-запросы, например в CSS. Браузер выберет наиболее подходящий источник.

Давайте посмотрим, как мы можем это использовать.

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

Но мы хотим видеть высокое и тонкое изображение в портретной ориентации на смартфоны.

Мы выбираем код из предыдущего примера и добавляем контейнер с одним элементом .

Живой пример # 4

  <картинка>
    <источник
        srcset = "https: // ucarecdn.com /: uuid / - / scale_crop / 320x569 / center / 320-569.jpg 320 Вт,
                https://ucarecdn.com/:uuid/-/scale_crop/640x1138/center/-/quality/lightest/640-1138.jpg 640w,
                https://ucarecdn.com/:uuid/-/scale_crop/450x800/center/450-800.jpg 450 Вт,
                https://ucarecdn.com/:uuid/-/scale_crop/900x1600/center/-/quality/lightest/900-1600.jpg 900w "
       
        media = "(max-width: 450 пикселей) и (ориентация: портрет)">

    
  

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

Совет : используйте оператор scale_crop или оператор Crop из Uploadcare Image CDN в получить кастомную часть изображения.

Художественное направление - это фокус основного предмета образ. Это важно для небольших экранов. На большом экране мы можем показать полное изображение, но на меньшем экране мы хотим показать только основную часть образ.

В нашем примере мы хотим показать на смартфоне только голову хамелеона.

Возьмите предыдущий пример и просто измените оператор scale_crop на Оператор кадрирования с оператором изменения размера .

Живой пример # 5

  <картинка>
    <источник
        srcset = "https://ucarecdn.com/:uuid/-/crop/2048x1365/1345,670/-/resize/320x/320.jpg 320w,
                https://ucarecdn.com/:uuid/-/crop/2048x1365/1345,670/-/resize/640x/640.jpg 640 Вт,
                https://ucarecdn.com/:uuid/-/crop/2048x1365/1345,670/-/resize/450x/450.jpg 450 Вт,
                https://ucarecdn.com/:uuid/-/crop/2048x1365/1345,670/-/resize/900x/900.jpg 900w "
       
        media = "(max-width: 450 пикселей) и (ориентация: портрет)">

    
  

Подсказка : используйте оператор crop от Uploadcare CDN изображения, чтобы получить основную часть изображения и использовать resize оператор после.

  https://ucarecdn.com/:uuid/-/crop/1800x1200/1090,1220/-/resize/900x  

Как добавить изображения на HTML-сайт

Обновлено: 31.12.2017 компанией Computer Hope

Добавление изображений на страницы вашего веб-сайта часто может сделать их более приятными для глаз и передать информацию лучше, чем использование одного текста.Этот процесс выполняется с помощью кода HTML и файла изображения. Файл может быть с другой веб-страницы или храниться на веб-сервере.

Использование тега

В коде HTML для веб-страницы вы можете добавить изображение с помощью тега . В теге нужно указать четыре атрибута:

  • Src - Атрибут источника указывает местоположение изображения. Вы можете использовать относительный путь, если изображение находится на том же сервере, что и ваш сайт, но изображения с другого сайта требуют абсолютных путей.
  • Alt - Альтернативный текстовый атрибут представляет собой письменное описание изображения.
  • Ширина - ширина изображения.
  • Высота - Высота изображения.

Необязательный атрибут - Border , который позволяет указать границу вокруг изображения. Атрибут границы определяется размером в пикселях. Например, использование border = 1 в теге означает, что ширина границы вокруг изображения будет 1 пиксель.

Заметка

Атрибут Border объявлен устаревшим в HTML5 и не поддерживается.

Примеры

В следующих примерах показан фактический HTML-код, используемый для добавления изображения вверху этой страницы. Их можно вставить в любом месте вашей страницы. Первый имеет более короткий URL-адрес, поскольку изображение и HTML-файл находятся на одном сервере. Во-вторых, вы можете сделать ссылку на наше изображение с другого сервера.

Пример первый

 HTML Letters 

Пример два

  3D HTML  

Какие форматы изображений я могу использовать на веб-странице?

Наиболее распространенными форматами изображений, используемых для изображений, фотографий, логотипов и других изображений, являются JPEG, GIF и PNG. Другие форматы изображений, которые широко не поддерживаются, например BMP, могут работать не во всех браузерах.

Нужно ли заключать в кавычки атрибуты в теге img?

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

образов Bootstrap - примеры и руководство. Базовое и расширенное использование

 

        
        
Элис Майер
< sizesФотограф

Sed ut perspiciatis unde omnis iste natus sit voluptatem accusantium doloremque лаудантиум, тотам рем апериам.

Кулинария
Вдохновение для чит-дня

Ut enim ad minima veniam, quis nostrum excitationem ullam corporis Suscipit labouriosam, nisi ut aliquid ex ea Commodi.

Кнопка
Билли Каллен
Веб-разработчик

Lorem ipsum dolor sit amet, conctetur adipisicing elit. Voluptatibus, ex, recusandae.Facere modi sunt, quod quibusdam.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *