Отзывчивый Изображения сделано правильно: руководство по < | picture__1 И srcset

В понедельник мы опубликовали

статьи о Picturefill 2.0 1 , идеально polyfill для чувствительных изображений.Today’ сек статья дополняет Тима Wright’ сек статью и объясняет, как именно мы можем использовать предстоящий < | picture__80 элемент и srcset, с простыми откаты для устаревших браузеров.Там не нет оснований ждать отзывчивого images __10 | 2 ;мы можем на самом деле есть им очень, очень soon __16 | 3 .
— Эд .

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

– Джон Аллсопп, Дао веб Design 4

Images 5 являются some 6 в most __49 | 7 important 8 pieces 9 из information 10 на web 11 , но через Интернет в 25 годаИстория, они не очень хорошо адаптируются вовсе.Все о них упорно исправлено: их размер, формат и урожай, весь набор в камне одного src .

HTML авторы начали чувствовать себя эти ограничения, когда экраны с высоким разрешением и отзывчивые макеты поражают сеть как один-два удара.Авторы — желая их изображения выглядят четкими в огромных макетов и высоким разрешением экранов — начал посылать все больше и больше источников для всех;Средний размер файла изображения Ballooned 12 ;очень умные люди называют адаптивный веб-дизайн " unworkably slow 13 " .

__13 | Изображения были номер один obstacle к реализации по-настоящему мощные и адаптируемые отзывчивые страниц — страницы, масштабировать и вверх и вниз, эффективно пошив себя как ограничения и предоставляемости контексте просмотра на руки .

Это собирается изменить .

Последняя спецификация <picture> element 14 является результатом years 15 ( лет ! 16 ) дискуссии о том, как сделать изображения адаптироваться.Это дает авторам семантические способы объединения нескольких версий одного и того же изображения, каждая версия, имеющих технические характеристики, которые делают его более или менее пригодны для конкретного пользователя.Новая спецификация добилась широкого консенсуса и реализуется в Chrome, Opera и Firefox (! Может быть, даже в Internet Explorer 17 ), поскольку я печатаю .

Время для начала обучения этот материал сейчас

Прежде чем мы перейдем к любому из (! Новенький ) разметки, давайте посмотрим на соответствующих способов, в которых просмотра среды изменяются, то есть способов, в которых мы хотим, чтобы наши изображения, чтобы адаптироваться .

  1. Наши изображения должны быть в состоянии оказывать решительно на различных device-pixel-ratio с.Мы хотим, экраны с высоким разрешением, чтобы получить изображения с высоким разрешением, но мы не хотим, чтобы отправить эти изображения для пользователей, которые не видят всех этих дополнительных пикселей.Давайте называть это device-pixel-ratio кейс .
  2. Если наша макет жидкости (т.е. реагировать), то наши образы должны хлюпать и растягиваться, чтобы соответствовать его.Мы будем называть этот вариант использования жидкости изображений .
  3. Обратите внимание, что эти два варианта использования тесно связаны: Чтобы решить обе, мы хотим, чтобы наши изображения будет доступна в нескольких разрешениях, так что они эффективно масштабировать.Мы будем называть решения обеих проблем одновременно переменного размера-изображения использовать case
  4. Иногда мы хотим, чтобы адаптировать наши изображения таким образом, что выходят за рамки простого масштабирования.Мы могли бы обрезать изображения или даже тонко изменять их содержание.Мы называем это использование арт-направления случай .
  5. Наконец, различные браузеры поддерживают различные форматы изображений.Мы можемхотите отправить фантазии новый формат, например, WebP в браузерах, которые могут оказать, и попадают обратно в старый добрый формате JPEG в браузерах, которые не делают.Мы называем это тип переключения случай использования .

Новый <picture> спецификация включает в себя функции для всех этих случаев.Давайте посмотрим на них по одному .


Реорганизация изображения в различных разрешениях относительно легко, однако, загрузка различных изображений (и только их) в зависимости от user’ ы разрешением довольно сложно.Ну, не больше.( Изображение credit 18 )

device-pixel-ratio Использование Case

Давайте начнем просто с фиксированной шириной изображения, мы хотим, чтобы приспособиться к различной device-pixel-ratio с.Чтобы сделать это, мы будем использовать первый инструмент, который новая спецификация дает нам для группировки и описания источников изображения: srcset атрибут .

Скажем, у нас две версии образа:

  • small.jpg (320 × 240 пикселей)
  • large.jpg (640 × 480 пикселей)

Мы хотим, чтобы отправить large.jpg только для пользователей с высоким разрешением экрана.Использование srcset, мы отмечать наш образ так:

<img srcset="small.jpg 1x, large.jpg 2x"
   src="small.jpg"
   alt="A rad wolf" />

srcset атрибут принимает разделенный запятыми список адресов изображения, каждый с x дескриптор с указанием device-pixel-ratio, что этот файл предназначен для .

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

Fluid- И переменного размера изображения, использование Cases

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

Предварительная загрузка изображения, согласно Стив Соудерс, “ Самая большая браузеры улучшение производительности, когда-либо made 19 .” Изображения часто тяжелые элементы на странице;загрузка их как можно скорее в интересах каждого.Таким образом, первое, что браузер будет делать с странице сканировать HTML для изображения URL-адресов и начать загружать их.Браузер делает это долго, прежде чем он построил DOM, CSS, загруженной внешней или нарисовал макет.Решение использовать жидкости-изображение дело является сложным, то;мы должны браузер, чтобы выбрать источник, прежде чем он знает, оказывается размера изображения .

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

Таким образом, чтобы обойти проблемы предварительной загрузки, сначала proposals 20 для жидкости образа features 21 предложил крепления медиа запросы на источники.Мы основываем нашу механизм исходный-сбор от размера окна просмотра, который браузер не знает при собирании времени, а не на конечного оказанную размера изображения, которое он не .

22
Работа с отзывчивых изображений оказалось довольно кошмар.Лучший способ обеспечить браузер с деталями о его окружение просто говорю браузера оказана размер изображения.Вид очевидно, на самом деле.( Изображение credit 23 )

Как оказывается out 24 , это плохая идея.В то время как это технически осуществимый, расчета медиа запросы, необходимые утомительно и чревато ошибками.Лучше идея заключается в просто сказать браузеру оказанное размер image!

Как мы говорим браузеру, как количество пикселей needs (с помощью нового атрибута, sizes) и сколько пикселей каждый из источников has (через w дескрипторов в srcset), сборИсточник становится тривиальным.Браузеру выбирает наименьшее источник, который будет по-прежнему выглядеть разумно четкие пределах контейнера .

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

  • large.jpg (1024 × 768 пикселей)
  • medium.jpg (640 × 480 пикселей)
  • small.jpg (320 × 240 пикселей)

И мы хотим, чтобы поместить их в гибкой сетки — сетка, которая начинается как один столбец, но переключается на три колонки в больших видовых, как this __62 | 25 :

26
реагировать пример сетки.( Смотрите demo __10 | 27 )

Вот как мы отмечать его:

<img srcset="large.jpg  1024w,
      medium.jpg 640w,
      small.jpg  320w"
   sizes="(min-width: 36em) 33.3vw,
      100vw"
   src="small.jpg"
   alt="A rad wolf" />

Мы используем srcset раз, но вместо x дескрипторов, мы крепления w дескрипторов наших источников.Они описывают фактическую ширину, в пикселях, указанного файла.Так что, если вы “Сохранить для Web …” в 1024 × 768 пикселей, то размечать что источник в srcset, как 1024w .

Вы обратите внимание, что мы указав только изображения widths.Почему бы не высота, тоже?Изображения в нашей макет ширина ограниченными;их ширина устанавливаются явным образом CSS, но их высота не.Подавляющее большинство отвечающих изображений в дикой природе ширина ограниченными, тоже, так что спецификация держит вещи простыми имея дело только шириной.Есть некоторые good 28 reasons 29 для включения высот, тоже — но еще не .

Итак, вот w 17 ~ в |, которая описывает, сколько пикселей каждый из наших источников has.Затем, sizes атрибут.sizes атрибут сообщает браузеру, как количество пикселей needs описывая окончательный вынесенное ширину нашего изображения.Подумайте о sizes как способ дать браузеру немного информации о макете страницы немного впереди времени, так что он может выбрать источник, прежде чем он разбирается, оказываемых любой из CSS страницу в .

Мы делаем это путем передачи браузере CSS length __45 | 30 | __5, который описывает вынесенное ширину изображения.Длина CSS может быть абсолютным (например, 99px 47 ~ или |) или отношению к viewport __51 | 31 (33.3vw, как в нашем примере).Это “по отношению к иллюминатору” часть, что позволяет получать изображения, чтобы продемонстрировать .

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

sizes="33.3vw"

Наш пример не совсем так просто.Наша макет имеет точку останова на 36 EMS.Когда окно просмотра уже, чем 36 EMS, изменения макета.Ниже этой точки останова, изображение будет заполнить 100% ширины окна просмотра.Как мы кодировать эту информацию в нашей sizesатрибут

Мы делаем это путем спаривания запросов СМИ с длинами:

sizes="(min-width: 36em) 33.3vw,
   100vw"

Это его формат:

sizes="[media query] [length],
   [media query] [length],
   etc…
   [default length]"

Браузеру идет над каждым запросом СМИ до тех пор, пока не найдет тот, который соответствует, а затем использует парные длины согласующего запроса.Если нет запросов СМИ матч, то браузер использует длину “по умолчанию”, то есть любой длины он сталкивается, что не имеют парных запрос .

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

Чудесно, sizes и w в srcset также дать браузеру достаточно информации, чтобы адаптировать изображение к различным device-pixel-ratio с.Преобразование длины CSS, мы даем его в sizes к CSS пикселей;и, умножая что пользователя device-pixel-ratio, браузер знает количество пикселей устройства, необходимую для заполнения — No Matter What пользователя device-pixel-ratio является .

Таким образом, в то время как в нашем примере device-pixel-ratio прецедента работает только для фиксированной ширин …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.