От простого к сложному

Владимир Кузнецов

Web Standards Days, Санкт-Петербург, 2014

От простого к сложному

Владимир Кузнецов, Engine6

Progressive enhancement

Ilya Grigorik

web performance engineer, Google

Блог и презентации — www.igvita.com

Предзагрузка и предварительный рендеринг

matchMedia

matchMedia

                if (window.matchMedia("(min-width: 720px)").matches) {
                  // the view port is at least 720 pixels wide
                } else {
                  // the view port is less than 720 pixels wide
                }
            

matchMedia

                var mql = window.matchMedia("(min-width: 720px)");
                mql.addListener(function (mediaQueryList) {
                  // mediaQueryList.matches
                  // true if the document currently matches
                  // the media query list; otherwise false
                }
            

matchMedia

                Environment.waitForDesktop(function () {
                  Modernizr.load([
                    "/styles/desktop.css",
                    "/scripts/desktop.js"
                  ]);
                });
            

Очередной «убийца» Apple iPad

Samsung Galaxy Tab P1000

Паспортное разрешение экрана:
1024 × 600 точек

matchMedia

Статья, исходный код и примеры —
noteskeeper.ru/1133

Иллюстрации

<picture>
picture.responsiveimages.org

Picturefill

<picture>

                <picture>
                  <source srcset="examples/images/large.jpg,
                      examples/images/extralarge.jpg 2x"
                    media="(min-width: 720px)">
                  <source srcset="…" media="…">
                  <img src="examples/images/small.jpg" alt="">
                </picture>
            

<picture>

                <picture>
                  <source srcset="examples/images/large.jpg 640w,
                      examples/images/extralarge.jpg 1280w"
                    media="(min-width: 720px)">
                  <source srcset="…" media="…">
                  <img src="examples/images/small.jpg" alt="">
                </picture>
            

srcset и sizes

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

Srcset and sizes

Вся специфика применения популярно объясняется в статье http://ericportis.com/posts/2014/srcset-sizes/

Picturefill
2.0 vs 1.2

                <span data-alt="Responsive image" data-picture>
                  <span data-src="mobile.jpg"></span>
                  <span data-src="retina.jpg" data-media="
                    only screen and (-webkit-min-device-pixel-ratio: 1.5),
                    only screen and (min-resolution: 1.5dppx),
                    only screen and (min-resolution: 144dpi)"></span>
                  <span data-src="desktop.jpg" data-media="
                    (min-width: 720px)"></span>
                </span>
            

Хостинг картинок + CDN

Обрезка, изменение размеров, конвертирование форматов, сохраниение с нужным качеством

Face crop

Обрезка по центру

Сборка стилей

Простой способ

                @import "layout";
                @import "component-a";
                @import "page-1";
                @import "page-2";
                @import "layout_desktop";
                @import "page-1_desktop";
            

Сложный способ

                {
                  "mobile": [
                    "layout", "component-a", "page-1", "page-2"
                  ],
                  "desktop": [
                    "layout_desktop", "page-1_desktop"
                  ]
                }
            

Заключение

Спасибо за внимание

Владимир Кузнецов
Twitter: @mista_k
Блог: noteskeeper.ru

Слайды презентации: bit.ly/wsd-spb-mf