Исмаил
Кодю на js
но это не точно
Дратути, я Исмаил
Frontend в GreatSimple
Твитур: @Di_Ed_Seagull
Телега: @caspianseagull
Почему никто не любит их верстать
Кто виноват и что делать
Обезбаливающее
Зачем нужны html-письма
Второе пришествие PUG
Тестирование
Жизнь после редактора
Email.html — что, как и зачем?
Email.html — Кому оно надо?
Боль и страдания — приложения
Браузеры и сервисы
Веб-клиенты + android, iOS, Windows Phone (Outlook)
Windows, Linux, Mac OS
Боль и страдания — препроцессинг
Exchange, Domino
pure html
processed html
Web-based
Боль и страдания — рендер
Боль и страдания — что читать?
CampaignMonitor
MailChimp
Microsoft
Как верстать? — Основные правила
Как верстать? — Что нельзя
Как верстать? — Что можно
Как верстать? — PE & GD
Progressive
enhancement
Graceful
degradation
Как верстать? — Условные комментарии
<!--[if gte mso 9]> <style> #outlook a {padding: 0; } </style> <![endif]-->
Как верстать — outlook specific css
mso-line-height-rule: exactly;
Сдвиг относительно базовой линии
-ms-interpolation-mode: bicubic;
Отключает обнуление line-height
Фикс ресайза изображений
mso-table-lspace: 0px;
Как верстать — client specific css
.ExternalClass
Фиксирует минимальный размер шрифта в iOS
#outlook a
Приписывается к каждому стилю в Outlook
Определяет стили ссылки "посмотреть в браузере" (2007 / 10 / 13)
-webkit-text-size-adjust: 100%;
Аккуратный ресайз изображений
-ms-interpolation-mode: bicubic;
Как верстать — сетки и адаптив
TD
TD
TD
Table
TR
table td.col-3 { width: 200px; /* 600 / 3 */ }
Десктоп и мобильники
Как верстать — сетки и адаптив
TD
Table
TR
TD
@media (max-width: 480px) {
table td.col-3 {
...
display: block !important;
width: 100% !important;
...
}
}
Email.html — Отступы
Автоматизируем — зачем?
БЛЭД ЭМЭЙЛЫ
Автоматизируем — Фреймворки
Автоматизируем — Фреймворки
Автоматизируем — Фреймворки
Автоматизируем — NPM
Pug 2 — почему
Pug 2 — mixins
mixin section(options) .section&attributes(attributes) h1= options.title each item in options.items +section__item(item) mixin section__item(item) .section__item h2= item.title ...
mixin section(options) .section&attributes(attributes) h1= options.title each item in options.items +section__item(item) mixin section__item(item) .section__item h2= item.title ...
mixin section(options) .section&attributes(attributes, {...}) h1= options.title each item in options.items +section__item(item) mixin section__item(item) .section__item h2= item.title ...
mixin section(options) .section&attributes(attributes) h1= options.title each item in options.items +section__item(item) mixin section__item(item) .section__item h2= item.title ...
Pug 2 — mixins
mixin section(arg1, ...args) .section&attributes(attributes) h1= options.title if block block +section(arg1, arg2, arg3) article h1 Extendable Mixins
Pug 2 — includes
html head ... body include modules/header include modules/promo include modules/cart include modules/review include modules/footer
[.pug]
Pug 2 — includes
html head style include styles/main.css body script include module1.js include images/logo.svg
Pug 2 — js-friendly
mixin user(user) - let getAge = () => `${user.age} y.o.`
.greeting= `Hello ${user.name}` .age= getAge() ul.parents each parent in user.parents li.name= parent.name ...
Pug 2 — filters
html head style include:stylus styles/main.styl body script include:babel js/module1.js article include:markdown data/article.md
Pug 2 — Filters
Тестирование
Большое плавание — Сервисы рассылок
Большое плавание — E-Commerce
Большое плавание — Интеграция
Большое плавание — Автоматизация
Блоги MailChimp, CampaignMonitor, Litmus
Обзор css свойств в клиентах: MailChimp, CampaignMonitor
Верстать письма не страшно
Но все равно неприятно
Автоматизация спасает
Проблемы изучены и зафиксированы
Маркетинг важнее визуала
Идеально не получится
By Исмаил
О верстке писем ходят легенды. Верстальщиков, столкнувшихся с этим злом, жалеют, их родным соболезнуют, а ночью не могут сомкнуть глаза от ужаса, с которым столкнулись их несчастные коллеги. К такому раскладу событий я готовился, когда узнал, что мне предстоит работать над коммерческим набором шаблонов писем для интернет-магазинов. Но оказалось, что не так страшен черт, как его малюют. Верстальщику приходят на помощь его друзья: системы сборки, препроцессоры и прямые руки. Я расскажу, как избавиться от боли во время верстки писем, как можно облегчить и ускорить свою работу, каких подводных камней стоит опасаться, и что происходит с письмом после верстки.