В понедельник мы опубликовали
статьи о 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 ), поскольку я печатаю .
Время для начала обучения этот материал сейчас
Прежде чем мы перейдем к любому из (! Новенький ) разметки, давайте посмотрим на соответствующих способов, в которых просмотра среды изменяются, то есть способов, в которых мы хотим, чтобы наши изображения, чтобы адаптироваться .
- Наши изображения должны быть в состоянии оказывать решительно на различных
device-pixel-ratio
с.Мы хотим, экраны с высоким разрешением, чтобы получить изображения с высоким разрешением, но мы не хотим, чтобы отправить эти изображения для пользователей, которые не видят всех этих дополнительных пикселей.Давайте называть этоdevice-pixel-ratio
кейс . - Если наша макет жидкости (т.е. реагировать), то наши образы должны хлюпать и растягиваться, чтобы соответствовать его.Мы будем называть этот вариант использования жидкости изображений .
- Обратите внимание, что эти два варианта использования тесно связаны: Чтобы решить обе, мы хотим, чтобы наши изображения будет доступна в нескольких разрешениях, так что они эффективно масштабировать.Мы будем называть решения обеих проблем одновременно переменного размера-изображения использовать case
- Иногда мы хотим, чтобы адаптировать наши изображения таким образом, что выходят за рамки простого масштабирования.Мы могли бы обрезать изображения или даже тонко изменять их содержание.Мы называем это использование арт-направления случай .
- Наконец, различные браузеры поддерживают различные форматы изображений.Мы можемхотите отправить фантазии новый формат, например, 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
прецедента работает только для фиксированной ширин …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров