Всем сестрам по серьгам. Адаптивные изображения

Павел Ловцевич, LOVATA Group

Всем сестрам по серьгам. Адаптивные изображения

Тренды 2012

Тренды 2012

Адаптивный веб

Цель — лучший пользовательский опыт на любых устройствах.

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

Адаптивный веб

Принцип — единый интерфейс пользователя с автонастройкой на контрольных точках.

Количество колонок, позиции блоков, размеры контента, поведение интерактивных элементов.

Недостаток инструментов

  • CSS — Media Queries
  • JS — методы
  • HTML — ?

Недостаток инструментов

Зачем?

Ian Hickson

Ian Hickson

«В каких случаях это может быть нужно для картинок в <img>? Как правило, элемент <img> служит для картинок в контенте, где обычно не нужно ничего адаптировать.»

Retina

Как?

Возможности программно-аппаратного окружения

  • разрешение экрана;
  • плотность пикселей;
  • глубина цвета;
  • скорость соединения;
  • способы ввода данных.

Элемент <picture>

Bruce Lawson, Opera Software

<picture>

				<picture alt="angry pirate">
					<source src="hires.png" media="min-width:800px">
					<source src="midres.png" media="network-speed:3g">
					<source src="lores.png">
					<!-- fallback for browsers without support -->
					<img src="midres.png" alt="angry pirate">
				</picture>
			

<picture>

				<picture alt="angry pirate">
					<source src="hires.png" media="min-width:800px">
					<source src="midres.png" media="network-speed:3g">
					<source src="lores.png">
					<!-- fallback for browsers without support -->
					<img src="midres.png" alt="angry pirate">
				</picture>
			

<picture>

				<picture alt="angry pirate">
					<source src="hires.png" media="min-width:800px">
					<source src="midres.png" media="network-speed:3g">
					<source src="lores.png">
					<!-- fallback for browsers without support -->
					<img src="midres.png" alt="angry pirate">
				</picture>
			

<picture>

				<picture alt="angry pirate">
					<source src="hires.png" media="min-width:800px">
					<source src="midres.png" media="network-speed:3g">
					<source src="lores.png">
					<!-- fallback for browsers without support -->
					<img src="midres.png" alt="angry pirate">
				</picture>
			

<picture> — преимущества

  • типовой для HTML5 принцип работы с ресурсами;
  • типовой для CSS принцип работы с условиями окружения;
  • широкий спектр определяемых условий — разрешение экрана, ориентация устройства, dpi, глубина цвета, соотношение сторон;

<picture> — преимущества

  • неограниченное количество условий;
  • ручной контроль;
  • детальная настройка;
  • обратная совместимость.

<picture> — недостатки

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

Responsive Images Community Group

Атрибут srcset

Edward O’Connor, Apple

<img srcset=''''>

				<img alt="image description"
src="/path/to/fallbackimage.png"
srcset="/path/to/image.png 800w,
/path/to/otherimage.png 600w">
			

<img srcset=''''>

				<img alt="image description"
src="/path/to/fallbackimage.png"
srcset="/path/to/image.png 800w,
/path/to/otherimage.png 600w">
			

<img srcset=''''>

				<img alt="image description"
src="/path/to/fallbackimage.png"
srcset="/path/to/image.png 800w,
/path/to/otherimage.png 600w">
			

<img srcset=''''>

				<img alt="image description"
src="/path/to/fallbackimage.png"
srcset="/path/to/image.png 800w,
/path/to/otherimage.png 600w">
			

<img srcset=''''> — преимущества

  • нет необходимости внелрения нового элемента HTML;
  • компактность кода для описания одного изображения.

<img srcset=''''> — недостатки

  • неочевидный синтаксис;
  • нет всей широты селекторов CSS Media Queries;
  • перенос в структурную разметку стилевых правил.

Гибрид <picture> + srcset

Florian Rivoal, Opera Software

<picture> + srcset

				<picture>
					<source media="(orientation:landscape)"
	srcset="long.jpg 1x, long2.jpg 2x">
					<source media="(orientation:portrait)"
	srcset="tall.jpg 1x, tall2.jpg 2x">
					<img src="fallback.jpg">
				</picture>
			

<picture> + srcset

				<picture>
					<source media="(orientation:landscape)"
	srcset="long.jpg 1x, long2.jpg 2x">
					<source media="(orientation:portrait)"
	srcset="tall.jpg 1x, tall2.jpg 2x">
					<img src="fallback.jpg">
				</picture>
			

<picture> + srcset

				<picture>
					<source media="(orientation:landscape)"
	srcset="long.jpg 1x, long2.jpg 2x">
					<source media="(orientation:portrait)"
	srcset="tall.jpg 1x, tall2.jpg 2x">
					<img src="fallback.jpg">
				</picture>
			

<picture> + srcset

				<picture>
					<source media="(orientation:landscape)"
	srcset="long.jpg 1x, long2.jpg 2x">
					<source media="(orientation:portrait)"
	srcset="tall.jpg 1x, tall2.jpg 2x">
					<img src="fallback.jpg">
				</picture>
			

<picture> + srcset

				<picture>
					<source media="(orientation:landscape)"
	srcset="long.jpg 1x, long2.jpg 2x">
					<source media="(orientation:portrait)"
	srcset="tall.jpg 1x, tall2.jpg 2x">
					<img src="fallback.jpg">
				</picture>
			

<picture> + srcset — преимущества

  • типовой для HTML5 принцип работы с ресурсами;
  • типовой для CSS принцип работы с условиями окружения;
  • широкий спектр определяемых условий — разрешение экрана, ориентация устройства, dpi, глубина цвета, соотношение сторон;

<picture> + srcset — преимущества

  • неограниченное количество условий;
  • ручной контроль;
  • автоматический контроль;
  • детальная настройка;
  • обратная совместимость.

<picture> + srcset — недостатки

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

Переменные в <meta>

Denis LeBlanc

<meta>

				<head>
					<meta name="case" data="breakpoint1"
	media="min-width:350px" />
					<meta name="case" data="breakpoint2"
	media="min-width:1000px" />
				</head>
				<body>
					<img src="/content/images/{case}/photo.jpg" alt='' />
				</body>

			

<meta>

				<head>
					<meta name="case" data="breakpoint1"
	media="min-width:350px" />
					<meta name="case" data="breakpoint2"
	media="min-width:1000px" />
				</head>
				<body>
					<img src="/content/images/{case}/photo.jpg" alt='' />
				</body>

			

<meta>

				<head>
					<meta name="case" data="breakpoint1"
	media="min-width:350px" />
					<meta name="case" data="breakpoint2"
	media="min-width:1000px" />
				</head>
				<body>
					<img src="/content/images/{case}/photo.jpg" alt='' />
				</body>

			

<meta> — преимущества

  • централизованное управление адаптацией изображений;
  • в структурную разметку не переносятся стилевые правила;
  • возможность обратной совместимости;
  • загрузка условий в <head> до загрузки изображений в <body>;
  • <meta> переменные в принципе загружаются до любого внешнего ресурса.

<meta> — недостатки

  • нет возможности управления отдельными изображениями;
  • необходима значительная переработка принципов работы браузеров с URI с учетом возможного наличия переменных;
  • ограничения возможностей хранения изображений (заранее настроенные пути).

Новые типы изображений

Новые типы изображений — возможная техника Progressive JPEG

  • редактор сохраняет изображение с множественной разверткой;
  • браузер загружает начальный фрагмент каждого изображения (10-20 Кб) используя значение HTTP-заголовка Range;
  • фрагмент содержит размеры изображения и опционально данные о контрольных точках множественной развертки (аналогично метадате в видеоформате MP4);

Новые типы изображений — возможная техника Progressive JPEG

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

Новые типы изображений — преимущества Progressive JPEG

  • автоматизация.

Новые типы изображений — недостатки Progressive JPEG

  • отсутствие мало мальского контроля;
  • усложнение процесса создания изображения;
  • неприемлемое время разработки и внедрения новых форматов изображений.

Новые HTTP-заголовки

Yoav Weiss

Новые HTTP-заголовки

Новые HTTP-заголовки — возможная техника

  • браузер запрашивает адрес spdy://website.com;
  • сервер возвращает контент и отправляет запрос проверки скорости соединения и разрешения экрана;
  • полученный ответ браузер добавляет для всех последующих запросов на домен (возможно с привязкой к типу файла);

Новые HTTP-заголовки — возможная техника

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

Новые HTTP-заголовки — преимущества

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

Новые HTTP-заголовки — недостатки

  • отсутствие ручного контроля;
  • потенциальные проблемы с прокси;
  • потенциальные проблемы с CDN.

Adaptive Images (PHP Edition)

Adaptive Images (PHP Edition)

«Доставка небольших изображений для небольших устройств.»

Creative Commons Attribution 3.0 Unported License

adaptive-images.com

Adaptive Images (PHP Edition) — технические требования

  • Apache 2.х
  • PHP 5.x
  • GD lib

Adaptive Images (PHP Edition) — механизм работы

  • adaptive-images.js → Session Cookie (resolution)
  • Browser → <img> → Apache
  • Apache → .htaccess (jpeg, gif, png) → adaptive-images.php
  • adaptive-images.php → ? (resolution) ! → GD lib → Cache → Browser

Adaptive Images (PHP Edition) — возможности

  • настройка через CSS Media Queries;
  • генерация набора изображений;
  • настройка степени сжатия изображения;
  • кэширование сгенерированных изображений.

Adaptive Images (PHP Edition) — возможности

  • определение устройства по User Agent при недоступности куки:
    • большое, для стационарного компьютера;
    • маленькое, для мобильного устройства;
  • особый HTTP-заголовк для изображения для сетевых системам кэширования;
  • временны́е метки для проверки актуальности закэшированных изображений.

Adaptive Images (PHP Edition) — портированные решения

  • C# .NET
  • ColdFusion
  • Drupal Module
  • Wordpress Plugin

Быть или не быть?

Быть или не быть?

Всем сестрам по серьгам. Адаптивные изображения

Павел Ловцевич, LOVATA Group