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

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

UWDC, Челябинск, май 2015

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

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

Progressive enhancement

Ilya Grigorik

web performance engineer, Google

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

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

Медиа-запросы не работают в IE <= 8

Пользователи этих браузеров увидят «мобильную» версию сайта.

Можно сформировать стили специально для IE 8 без медиа-запросов.
Раскроем все @media блоки с помощью плагина для PostCSS postcss-unwrap-at-media.

                var unwrapAtMedia = require('postcss-unwrap-at-media');
                gulp.task('less', function () {
                  return gulp.src('./src/**/*.less')
                    .pipe(less())
                    .pipe(gulp.dest('./dist/'))
                    .pipe(postcss([ unwrapAtMedia ]))
                    .pipe(rename({ suffix: '.ie8' }))
                    .pipe(gulp.dest('./dist/'));
                });
            
Перобразование LESS в CSS и CSS для IE8

Иллюстрации

<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

Вся специфика применения популярно объясняется в статье Эрика Портиса «Srcset and sizes».

Вадим Макеев выступал с презентацией «Сколько нужно верстальщиков, чтобы вставить <picture>?» — видео, слайды.

Picturefill
2.x 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

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

Заключение

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

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

Слайды презентации: mistakster.github.io/uwdc-2015