Основы верстки HTML-писем для веб-разработчиков

Светлана Шаповалова, коммерческий автор и переводчик, специально для «Нетологии» адаптировала статью Ли Манро, в которой он рассказывает об основах верстки писем и делится советами по ее оптимизации.

Верстка HTML-писем. Когда веб-разработчики видят эти слова — на глазах у них выступают слезы.

Если вы верстальщик, то рано или поздно столкнетесь с версткой писем, нравится вам это или нет. HTML-письма — это настоящий олдскул.

Эдакое путешествие в прошлое, в год, скажем, 1999 — эпоху вебмастеров, Frontpage и WYSIWYG-редакторов и табличной верстки.

С тех пор в email-дизайн практически ничего не изменилось. А точнее, стало только хуже. Чем больше появляется мобильных устройств и email-клиентов, тем больше трудностей возникает.

Последние несколько лет я провел, проектируя инструменты для разработчиков, и два года из них работал ведущим дизайнером продукта в Mailgun — email-сервиса для разработчиков. Я многое узнал о том, как работают email-рассылки и с какими проблемами сталкиваются разработчики при верстке HTML-писем. В этой статье я поделюсь своими знаниями.

HTML-шаблоны

Верстка HTML-шаблонов утомляет. Из-за этого появляется куча убого спроектированных писем — несуразных, однотипных, перегруженных, бессмысленных и раздражающих. Конечно, если вы получаете удовольствие от процесса или вам требуется что-то необычное и уникальное, тогда верстка собственных шаблонов стоит того. В противном случае, поискать хорошие шаблоны можно здесь:

  • Litmus Templates
  • Really Simple Responsive HTML Email Template
  • HTML Email Templates
  • Foundation for Emails 2
Верстка HTML-шаблонов для email-рассылки

Сверстать хороший шаблон иногда оказывается сложнее, чем сверстать обычную веб-страницу. Давайте разбираться, как это сделать.

Графические движки на клиентской стороне

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

Для обработки HTML-писем почтовые клиенты используют различные движки:

  • Apple Mail, Outlook для Mac, Android Mail и iOS Mail используют WebKit.
  • Outlook 2000, 2002 and 2003 используют Internet Explorer.
  • Outlook 2007, 2010 and 2013 используют Microsoft Word (да, Word!).
  • Веб-клиенты используют браузерный движок (например, WebKit для Safari использует, Blink для Chrome).

Кроме того, почтовые клиенты могут добавлять стили на свой вкус прямо сверху ваших. Например, Gmail приводит все шрифты для тега к виду:

font-family: Arial, sans-serif;

Просмотрите статистику своих рассылок, чтобы знать, для какого движка придется чаще всего верстать шаблоны.

Поддержка встроенных стилей и медиа-запросов в Gmail

В сентябре 2016 в Google объявили о поддержке встраиваемых стилей и медиа-запросов для Gmail. Это огромный шаг для развития email-индустрии. Сейчас Gmail поддерживает немалое количество CSS-свойств, что существенно упрощает разработку e-mail-шаблонов.

Использование табличной верстки

При блочной верстке с использованием div-ов возникают проблемы с позиционированием в различных клиентах. Особенно в тех, где для обработки используется Microsoft Word, к примеру, Outlook. Конечно, при желании можно пользоваться div-ами, но безопаснее верстать, будто за окном 1999 год — таблицами. Это означает:

  • вместо
    • #FFFFFF вместо #FFF
    • padding вместо margin
    • CSS2 вместо CSS3
    • HTML4 вместо HTML5
    • background-color вместо background
    • HTML-атрибуты вместо CSS
    • встроенные стили вместо подключаемых или блоков

    Это советы из опыта. Понятное дело, вы можете их проигнорировать, но действовать придется на свой страх и риск.

    При использовании таблиц, не забывайте использовать

    border=»0» cellpadding=»0» cellspacing=»0»

    Если пользуетесь Premailer, у него есть список с описанием CSS-атрибутов, применяемых в таких случаях.

    Встроенные стили

    Некоторые клиенты, особенно Gmail до недавних пор, беспощадно обрезает любые не встроенные стили. Есть несколько вариантов:

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

    Inline CSS

    Вписывать стили вручную — не самое оптимальное решение, поэтому я не стану его советовать. Такие шаблоны сложно масштабировать и изменять. Тем не менее, многим разработчикам такой подход нравится, потому что он позволяет контролировать процесс на 100%. Если вы вписываете стили руками, я советую использовать сниппеты и/или язык шаблонов с partial и helper. Это избавит вас от необходимости по многу раз прописывать одно и то же.

    К веб-инлайнерам относятся: CSS-инлайнер в Campaign Monitor, CSS Inliner Tool в MailChimp и Responsive Email Inliner в Foundation for Email.

    В качестве программного инлайнера я рекомендую модуль Juice для Node.js. Неплохие Ruby-альтернативы — Premailer gem и Roadie.

    Кнопки

    Чтобы создать кнопку, идеально отображаемую любым клиентом, придется поизвращаться. Как я уже говорил, надо использовать таблицы — даже для кнопок.

    Мне нравится вот такое решение. С ним вы получите нормальную кнопку для веб-клиентов:

    Click Here

    Instead, write it like this:

         
    Take action now

       

     

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


         
    Take action now

       

    Button in email

    Разберем подробнее. Первый тег

     — это обертка, чтобы отцентрировать кнопку. Второй задает размер кнопки. Некоторые клиенты, например, Outlook не распознают внутренние отступы в теге, поэтому необходимо закрасить всю ячейку. В таком случае тег займет все место во втором , и вся область станет кликабельной.

    Это лишь один из способов вставить кнопку в письмо. Конечно, не всегда получается добиться идеального отображения во всех клиентах, но и веб не всегда идеален до пикселя. Мне нравится этот способ, потому что он прост и не требует использования картинок или VML.

    Что такое VML? Если вы хоть раз занимались разработкой писем, то, вероятно, сталкивались с этим понятием. Язык векторной разметки (Vector Markup Language, VML) поддерживается старыми версиями Outlook.
    В Microsoft заявили, что VML больше не поддерживается в Internet Explorer (IE), начиная с IE10. Тем не менее, пока в ходу Outlook 2007, 2010 и 2013, вы еще не раз увидите, как его используют для фоновых изображений.

    Типографика

    Проще всего пользоваться стандартными системными шрифтами. Это Helvetica, Arial и прочие. Однако можно использовать и веб-шрифты, например, Google Fonts. Расположите их за медиа-запросом WebKit, чтобы Outlook не ничего не перепутал.

    Не забудьте указать семейство, размер и цвет шрифта для каждого тега

    , в противном случае есть риск, что клиент перезатрет ваши столь тщательно подобранные шрифты.

    Условия

    Мы можем применять специальные CSS стили и показывать/скрывать определенные элементы/контент в различных версиях Outlook.

    Если надо обратиться только к версии Outlook, базирующейся на Microsoft Word:

    Версии Outlook, базирующиеся на IE:

    Если нужна определенная версия Outlook:

    Также с помощью медиа-запросов можно выбрать клиентов, базирующихся на WebKit:

    .special-webkit-element {
    display: none;
    }

    @media screen and (-webkit-min-device-pixel-ratio:0) {
    .special-webkit-element {
    display: block! important;
    }
    }

    Изображения и медиа

    Изображения в письмах

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

    Не забывайте прописывать качественный alt-текст ко всем изображениям.

    Текст расскажет пользователю, что было написано на картинке или пояснит, что это за изображение, например, «Логотип компании». Можно даже привнести в текст немного творчества, как это сделали Email Monks:

    Creative alt text

    Не забудьте добавить базовый сброс стилей для всех изображений:

    Анимированные гифки поддерживаются большинством клиентов. Версии Outlook с 2007 по 2013 не отображают гифки, вместо этого показывается первый кадр.

    Не забывайте также сжимать медиафайлы и загружать их на облако или хостинг. Большинство сервисов рассылок обычно делают это за вас.

    У масштабируемой векторной графики (Scalable Vector Graphics, SVG) масса преимуществ для использования в вебе. Однако ее отображение в письмах может вести себя не так как надо, поэтому SVG нуждается в запасных вариантах или условиях. Обычно я не рекомендую использовать ее в письмах.

    Для изображений, адаптированных под Retina-дисплеи, подбирайте изображения крупнее (1.5 to 3) и изменяйте размер. Я обычно сохраняю изображения низкого качества в двух разрешениях, получается неплохо.

    Помните, что для Outlook необходимо задавать ширину изображения с помощью атрибута width. Иначе Outlook отобразит реальный размер картинки и поломает верстку.

    Видео в письмах

    Видео поддерживается на iOS, Apple Mail и Outlook.com. В зависимости от клиента, вы можете использовать медиа-запросы, чтобы показывать или скрывать видео.

    Формы в письмах

    Поддержка форм везде разная. Поэтому лучше держитесь от них подальше и при необходимости подключайте внешние формы. Понятное дело, все зависит от целей. Безопаснее не пользоваться формами, но, к примеру Rebelmail и Mixmax делали классные штуки для опросов и e-commerce.

    Кнопки быстрого действия в Gmail (Gmail Actions)

    В Gmail можно использовать удобные кнопки быстрого действия. Возможно, вы встречали их в оповещениях GitHub или Amazon.

    Gmail actions

    Добавить код просто. Есть два варианта:

    • JSON-LD
    • microdata

    Предзаголовок

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

    Клиенты берут первый кусок текста из тела письма и отображают его в предзаголовке. Усовершенствуйте это: добавьте невидимый элемент в тело письма, который и пойдет в предзаголовок. Этот текст должен мотивировать пользователя открыть письмо. Пример скрытого текста:

    Текст предзаголовка

    Тестирование писем

    Не уверен, что у меня хоть раз получалось отослать письмо с первого раза. Всегда находиться что-то, что нужно подправить: опечатка, проблемы с отображением в Outlook, а бывает, что просто забыл добавить нужную информацию.

    Тестировать письма можно различными способами:

    • Отсылать письмо себе на почту: на десктоп (Outlook), на веб-клиент (Gmail) и на мобильный клиент (iOS Mail).
    • Автоматически тестировать с помощью Litmus или Email on Acid.
    • Вычитывать содержание и проверять отображение верстки.
    • Проводить A/B тестирование различных типов контента, размера письма и заголовка.

    Litmus

    Как отправить HTML-письмо самому себе? Хороший вопрос. Это сложнее, чем вам кажется. Можно воспользоваться PutsMail или использовать HTML-редактор в Thunderbird.

    MIME Multipart

    Обычное текстовое письмо — это просто текст. HTML-письмо — это просто HTML. Большинство писем, которые вы посылаете и получаете — это MIME (Multipurpose Internet Mail Extensions — многоцелевые расширения интернет-почты). Этот стандарт комбинирует текст и HTML, так что получатель сам решает, какой тип отображать.

    Когда вы отправляете письмо, не важно транзакционное или для массовой рассылки, включайте туда и текстовую и HTML-версии.

    Даже если считаете, что в вашей базе все используют клиенты, поддерживающие HTML-шаблоны, все равно используйте простой текст.

    MIME multi-part

    Также замечу, что некоторые клиенты отображают простой текст как HTML; например, Gmail добавляет некоторые стили по умолчанию и превращает URL в гиперссылки. Большинство сервисов рассылок конструируют MIME самостоятельно, поэтому об этом не приходится думать. Некоторые из них также создают простую текстовую версию из вашего HTML.

    Совет: Выберите пункт «Показать оригинал» из выпадающего меню в Gmail, чтобы увидеть полный MIME.

    View original

    Доступность

    Когда в веб-разработке вы следуете стандартам и общепринятым правилам, используете семантическую разметку и валидный HTML-синтаксис — доступность поддерживается как бы сама по себе. К сожалению, из-за плохой поддержки HTML и необходимости использовать различные ухищрения, в письмах этот пункт часто игнорируется. Основные тезисы доступности писем:

    • Добавляйте role=«presentation» в каждую таблицу, чтобы было понятно, что таблица используется для верстки.
    • Весь текст сопровождайте содержательными описаниями.
    • Если не хотите использовать alt-текст, то ставьте alt=», чтобы было понятно, что там пусто.
    • При необходимости используйте семантические HTML-теги, такие как 

      и

      .
    • Используйте атрибут role для элементов вроде header и footer (например, role=«header»).

    Отзывчивый email-дизайн

    Процент писем, открываемых с мобильных устройств, уже составляет 50% и постоянно растет. Точность данных зависит от исследуемой аудитории, но в любом случае, это важный показатель.

    «Отзывчивый веб-дизайн» — это понятие придумал Итан Маркотт в 2010 году: «Сочетая резиновую модульную верстку и медиа-запросы CSS3, мы можем создавать дизайн, который подстраивается под любую форму дисплея».

    В электронных письмах мы точно так же можем использовать резиновый дизайн, модульную систему верстки и медиа-запросы. Проблема в том, что не все клиенты корректно всё это смогут отобразить. Поэтому потребуются некоторые хитрости.

    До недавнего времени Gmail не поддерживал медиа-запросы. К счастью, с сентября 2016 года это изменилось. Однако, у некоторых клиентов это параметр остался прежним: Yahoo, Windows Phone 8 и Gmail для Android.

    Справиться с отсутствием медиа-запросов помогают различные методики. Некоторые термины вы уже слышали: «резиновая», «адаптивная», «отзывчивая», «гибридная» и «эластичная» верстки.

    Резиновая верстка

    Самое простое решение — это поставить одну колонку, чтобы сделать письмо резиновым. Это означает, что если меняется окно просмотра, меняется и область с контентом.

    .container {
    max-width: 600 px;
    width: 100%;
    }

    Отзывчивая и адаптивная верстка

    Медиа-запросы и контрольные точки позволяют использовать альтернативные стили для различных окон просмотра. Кроме того, можно скрывать или показывать элементы.

    Сложности начинаются, когда приходится использовать сетку и столбцы. У вас может быть двухколонная верстка, которую затем приходится складывать в одноколонную, ориентируясь на определенную ширину окна просмотра. Однако медиа-запросы все равно ненадежны, так как не везде поддерживаются.

    Гибридная и эластичная верстка

    Этот метод взял немного из резинового дизайна, немного от отзывчивого и парочку хитростей для поддержки в Outlook. Не забудьте убедиться, что колонки будут корректно отображаться без медиа-запросов.

    Hybrid/Spongy technique

    Вот небольшой сниппет, который я использую в большинстве своих писем:







    @media only screen and (max-width: 620 px) {
    .span-3 {
    max-width: none! important;
    width: 100% ! important;
    }
    .span-3 table {
    max-width: 100% ! important;
    width: 100% ! important;
    }
    }

    Отзывчивые изображения

    Как я уже говорил, используйте ретина-изображения от 1.5 до 3 и впишите размеры в строку.

    Company Logo

    Нельзя полагаться на max-width: 100%; — некоторые клиенты игнорируют этот параметр. Вам также пригодятся следующий кусочек кода:

    @media only screen and (max-width: 620 px) {
    img {
    height: auto! important;
    max-width: 100% ! important;
    width: auto! important;
    }
    }

    Автоматизация рабочего процесса

    Делать «противоударные» письма сложно из-за множества этапов, на каждом из которых что-нибудь может пойти не так.

    Как и с любыми однотипными задачами, я советую автоматизировать процесс как можно больше. Единожды выработав систему, вам станет намного проще работать.

    Брайян Грейвс считает, что надо делать свои письма модульными. Также как у вас есть определенная система в дизайне и библиотека шаблонов для веб-разработки или разработки приложений, так же надо и для верстки писем иметь многоразовые компоненты.

    Кевин Мандевилль советует использовать сниппеты с шаблонным кодом для оптимизации рабочего процесса — так вам не придется постоянно писать один и тот же код. В общих чертах Кевин описывает, как использовать сниппеты в современных редакторах вроде Atom или Sublime и дает наводку на общедоступную библиотеку сниппетов Litmus.

    Лично я составил и открыл для общего доступа мой рабочий процесс в Grunt для автоматизации верстки электронных писем. Там находятся различные задачи: размещение встраиваемых стилей, сжатие изображений, загрузка изображений на хостинг, рассылка для предпросмотра, тестирование с помощью Litmus — все в одной команде. Хорошие инструменты для разработчика есть также у Foundation for Email и у Mailjet с его отзывчивым email-фреймворком MJML.

    Automated email workflow

    Взгляд в будущее

    Недавно Google выкатил поддержку медиа-запросов; Litmus стал партнером Microsoft чтобы «сделать электронные письма лучше», а Alto компании AOL теперь поддерживает отзывчивые письма. Будущее выглядит не так уж плохо.

    Email shopping cart

    Все больше и больше компаний и разработчиков экспериментируют с возможными email-технологиями: CSS анимацией, аудио, корзинами покупок в письме. В 2017 году ожидается все большое количество интерактивных писем.

    Вывод

    Email-дизайн и разработка — это та еще штука. Очень похоже на веб-разработку, только 10-летней давности. Разработчики email-клиентов, похоже, не столь прогрессивны в адаптации к новым стандартам по сравнению с разработчиками браузеров. Добавьте к этому развитие мобильных устройств… В итоге нам приходится учитывать совместимость с огромным множеством клиентов и версий.

    Мнение автора и редакции может не совпадать. Хотите написать колонку для «Нетологии»? Читайте наши условия публикации

Полный текст статьи читайте на Нетология