MJML - Как сделать адаптивное HTML-кодирование электронной почты простым

  1. Дальнейшее чтение на SmashingMag:
  2. Абстрагируясь от сложности отзывчивой электронной почты с MJML
  3. Подход
  4. Кодирование в MJML
  5. Создание вашего первого информационного бюллетеня с MJML
  6. Оптимизация стиля
  7. Добавление контента
  8. Трехколонный макет для блога, логотипа и реферальной ссылки
  9. Макет одной колонки для GIF и CTA
  10. тело
  11. Двухколонный макет, который укладывается на мобильный
  12. Синяя секция с CTA
  13. Последний раздел тела
  14. заглавие
  15. Раздел шести значков
  16. Разделитель и текст
  17. Рендеринг HTML-файла и тестирование
  18. Идти дальше
Электронная почта - один из лучших способов взаимодействия с вашими пользователями, особенно во время курортного сезона. Однако, если вы хотите выделиться, независимо от того, насколько красивы ваши электронные письма, вы должны убедиться, что они правильно отображаются в папке входящих сообщений вашего читателя, независимо от того, какой почтовый клиент они используют. Создание адаптивной электронной почты не простая задача , и для этого есть разные причины. Во-первых, в почтовых клиентах нет стандартного способа отображения HTML. Это верно для почтовых клиентов из разных компаний, таких как Outlook и Apple Mail, но не только. Даже разные версии Outlook, такие как Outlook 2003, Outlook 2013 и Outlook.com, отображают HTML по-разному.

Во-первых, в почтовых клиентах нет стандартного способа отображения HTML. Это верно для почтовых клиентов из разных компаний, таких как Outlook и Apple Mail, но не только. Даже разные версии Outlook, такие как Outlook 2003, Outlook 2013 и Outlook.com, отображают HTML по-разному.

Дальнейшее чтение на SmashingMag:

Затем, хотя почтовые клиенты отображают HTML, многие из них имеют очень ограниченную поддержку. Некоторые почтовые клиенты просто удаляют заголовок вашего HTML-файла, включая медиа-запросы, поэтому настоятельно рекомендуется использовать встроенные стили . С хорошей стороны, это движется в правильном направлении с Обновление Gmail ,

Теперь есть несколько методов, чтобы помочь разработчикам электронной почты. Вы можете быть знакомы с некоторыми из них, такими как гибридный подход , Мобильный первый подход или даже Fab Four техника от HTeuMeuLeu , Но по причинам, указанным ранее, и в особенности из-за отсутствия стандарта, ни один из этих методов не позволит вам приручить все почтовые клиенты одновременно.

Абстрагируясь от сложности отзывчивой электронной почты с MJML

MJML - это фреймворк с открытым исходным кодом, который устраняет сложность адаптивной электронной почты. Идея этого довольно проста. Так же, как jQuery нормализует DOM и абстрагирует низкоуровневые взаимодействия и анимации, MJML абстрагирует низкоуровневые хаки для отзывчивых писем с простым синтаксисом. MJML отзывчивый по дизайну . Это означает, что вы можете забыть о вложенных таблицах и условных комментариях, а также о том, как сделать вашу электронную почту отзывчивой. MJML делает это для вас.

Использование семантического синтаксиса и компонентов высокого уровня, таких как карусель (да, вы можете отобразить интерактивную галерею изображений в электронном письме!), MJML действительно легко освоить для всех. Адаптивные электронные письма больше не доступны только для нескольких экспертов.

Пример компонента MJML: карусель

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

Например, наш пример электронной почты был закодирован в 788 строк HTML и воспроизводится в менее 240 строк MJML ,

Подход

MJML встроен реагировать библиотека JavaScript, разработанная и поддерживаемая Facebook и использующая мощь компонентов React. Имена компонентов семантические, начинающиеся с mj-, так что они просты, а также легко распознаваемы и понятны: mj-текст, mj-изображение, mj-кнопка и т. Д.

MJML перейдет к адаптивному HTML, следуя сочетанию мобильных и гибридных подходов. Going mobile-first позволяет вам убедиться, что наиболее читаемая версия отображается по умолчанию в почтовых клиентах, которые не меняют макет в соответствии с используемым устройством.

Например, в Outlook.com мобильная версия будет отображаться как на настольном компьютере, так и на мобильном (что гораздо удобнее для чтения, чем версия для настольного компьютера, отображаемая на мобильном устройстве). Затем гибридный подход позволяет изменять компоновку в зависимости от размера устройства везде, где это возможно, используя сочетание запасных вариантов, условных комментариев, вложенных таблиц и медиазапросов, чтобы охватить как можно больше клиентов. Раскладка приятно ухудшается: многостолбцовые разметки на рабочем столе превращаются в одностолбцовые разметки на мобильных устройствах.

Двухколонный макет, вид на рабочий стол Двухколонный макет, мобильный вид

Кодирование в MJML

Прежде чем мы начнем учебник, давайте подготовимся к написанию кода на MJML. У нас есть разные способы использования MJML, такие как запустить его локально или используя онлайн редактор , Выбрав онлайн-редактор, вы сможете сразу запустить его, но его локальный запуск позволяет использовать MJML с вашим любимым редактором кода (с плагинами для Атом , Возвышенный текст а также напор ), такие исполнители, как Глоток-mjml а также Грунт-mjml а также намного больше ,

Для этого урока онлайн редактор рекомендуется, потому что не требует никакой настройки.

Если вы все еще хотите использовать его локально, откройте ваш терминал и запустите npm install mjml -g (требуется иметь Node.js и npm установлены).

После установки MJML создайте файл с именем example.mjml (или любым другим именем) с каким-либо MJML и запустите в своем терминале mjml -r example.mjml (убедитесь, что он находится в той же папке, что и файл, который вы отображаете) , Он отобразит ваш MJML-файл в файле с именем example.html с отзывчивым HTML-кодом внутри. Вы можете найти все доступные опции для командной строки в документация ,

Создание вашего первого информационного бюллетеня с MJML

Теперь, когда вы все настроены, мы можем начать создавать адаптивный бюллетень вместе. Чтобы найти вдохновение, одно из лучших мест вокруг ReallyGoodEmails , Я нашел отличный пример новостной рассылки от Процветающий рынок , Давайте воссоздадим это с MJML!

(Названия брендов, логотипы и товарные знаки, использованные в настоящем документе, остаются собственностью их соответствующих владельцев, и их использование не подразумевает одобрения или присоединения к Thrive Market.)

Информационный бюллетень «Процветающий рынок»

Во-первых, вот что базовый макет документа MJML выглядит так:

<mjml> <mj-head> <! - Компоненты Head находятся здесь: https://mjml.io/documentation/#standard-head-components -> </ mj-head> & lt;! - Все содержимое нашего письма будет отправлено в mj-body - & gt; & Lt; МДж тела & GT; & lt;! - mj-container определяет стиль нашей электронной почты по умолчанию, включая ширину по умолчанию, установленную в 600px, но перезаписываемую - & gt; & Л; MJ-контейнер & GT; & lt;! - Компоненты тела находятся здесь (https://mjml.io/documentation/#standard-body-components) - & gt; & Lt; / MJ-контейнер & GT; & Lt; / МДж тела & GT;
</ Mjml>

Оптимизация стиля

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

<mj-text font-size = "20px" color = "# F45E43" font-family = "helvetica"> Hello World </ mj-text>

Для начала мы установим семейство шрифтов sans-serif по умолчанию для текстовых компонентов, потому что здесь sans-serif используется для большей части текста. Затем мы создадим классы для многократно используемых элементов, поэтому нам не придется вручную устанавливать стили снова и снова. Мы могли бы создать больше пользовательских классов и стилей, но самые полезные стили будут для:

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

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

  • Установите заполнение по умолчанию 0 для каждого компонента, используя <mj-all />. Это заполнение по умолчанию может быть отменено путем ручного указания заполнения непосредственно для компонентов, которые мы используем.
  • Переопределите семейство шрифтов по умолчанию <mj-text>, используя <mj-text /> в заголовке. Каждый раз, когда мы используем <mj-text>, семейством шрифтов по умолчанию будет sans-serif. Мы все еще можем вручную переопределить этот новый шрифт по умолчанию, указав новый непосредственно на компоненте.
  • Создайте классы, используя <mj-class /> и, более конкретно, используя следующие mj-классы:
    • Пилюлька Это дизайн приятной кнопки. Атрибуты, на которые стоит обратить внимание: это цвет фона, заданный как прозрачный, и внутренний отступ, используемый для изменения размера кнопки, как мы хотим.
    • desc Это стиль описания изображений в двухколоночном макете.
    • ico Это стиль текста под шестью иконками перед нижним колонтитулом.
<mj-head> <mj-title> Узнайте о последних тенденциях </ mj-title> <mj-attribute> <mj-all padding = "0" /> <mj-text font-family = "sans-serif" color = "# 8e8b85" /> <mj-class name = "pill" font-weight = "700" color = "# d5ad4b" border-radius = "50" border = "2px solid # d5ad4b" font-size = "16px "line-height =" 16px "padding =" 8 20 20 20 "inner-padding =" 10 75 10 75 "background-color =" transparent "/> <mj-class name =" desc "font-family =" Georgia "font-size =" 20px "color =" # 45495d "padding =" 25 5 10 10 "/> <mj-class name =" ico "font-family =" Helvetica "font-size =" 14px "align =" center "padding =" 0 0 "/> </ mj-attribute> </ mj-head>

(Как вы, возможно, заметили, мы пропустили единицы измерения в некоторых атрибутах, таких как отступы. Если вы это сделаете, MJML выведет атрибуты с px по умолчанию.)

Добавление контента

Теперь, когда стили определены в голове (вы можете увидеть Вот как ваш код должен выглядеть сейчас), давайте начнем добавлять контент в нашу электронную почту! Макеты MJML основаны на <MJ-раздел> создавать строки и <MJ-столбца> создавать столбцы внутри строк, что очень удобно для дизайна электронной почты. Обратите внимание, что за исключением компонентов высокого уровня, таких как <MJ-герой> а также <MJ-Navbar> , контент всегда должен быть завернут в <MJ-столбца> , который сам должен идти в <MJ-раздел> , даже если в разделе есть только один столбец.

Давайте посмотрим на это на двух примерах: предварительный заголовок и заголовок письма.

Здесь нет ничего особенного. Мы просто создаем текстовый заголовок, используя <MJ-текст> компонент, обернутый в столбец и предоставляющий ему несколько стилей MJML.

Hack: <mj-text> позволяет вам использовать HTML непосредственно внутри MJML, предоставляя вам полный контроль над содержимым и позволяя вам использовать, например, теги <span> и <a>, к которым вы привыкли.

<mj-section padding = «0» background-color = «# eeebe7»> <mj-column> <mj-text padding = «0 2» align = «center» font-size = «10px»> Последние советы, тренды, рецепты и многое другое </ mj-text> </ mj-column> </ mj-section> Заголовок письма

Трехколонный макет для блога, логотипа и реферальной ссылки

Заголовок немного сложнее, но его очень легко достичь с помощью MJML. Все, что нам нужно сделать, это создать раздел, который мы разделим на три равных столбца (поскольку столбцы равны, нам даже не нужно вручную устанавливать ширину). Мы будем использовать изображения, как в оригинальном письме, используя явный компонент <MJ-изображения> , который поставляется с общими атрибутами, которые вы ожидаете, включая src, padding и border.

По умолчанию столбцы будут складываться в мобильной версии нашей электронной почты. Здесь, поскольку мы хотим, чтобы эти три столбца оставались рядом даже на мобильных устройствах, мы обернем их в <MJ-группа> компонент, который будет препятствовать укладке столбцов.

Взлом: Как отмечалось в документации, из-за ошибки в iOS вам, возможно, придется использовать минификатор, иначе столбцы могут складываться на iPhone, даже если они заключены в <mj-group>. Интерфейс командной строки MJML поставляется с встроенный минификатор что вы можете использовать для запуска опции -m при рендеринге MJML.

<mj-section padding = "0" background-color = "# ffffff"> <mj-group> <mj-column> <mj-image align = "right" padding = "40 0 0 0" width = "100" HREF = "https://thrivemarket.com/blog?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru" SRC = "https://i1044.photobucket.com/albums/b447/ngarnier/ Процветать% 20Market / blog_zpscedcgvla.jpg "alt =" blog "title =" blog "/> </ mj-column> <mj-column> <mj-image padding =" 15 0 0 0 "href =" https: // thrivemarket.com/?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru "SRC =" https://i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/thrive-logo- 250_zps4lonavha.jpg "title =" logo "alt =" logo "/> </ mj-column> <mj-column> <mj-image align =" left "padding =" 40 0 ​​0 0 "width =" 100 "href = Название "https://thrivemarket.com/customer/account/login/referer/aHR0cHM6Ly90aHJpdmVtYXJrZXQuY29tL2ludml0ZT9jY29kZT1LRzZPQ0QzSCZ1YWV4cHRpbWU9MTc3ODYzNzg2MiZ1YXRva2VuPTE0NjJiOTc3YzFmYTcwYjA5YjU4NWYzYTg5NDNkNzlhNzA3OWFiMzE0MzkzZmU4OTg1MmZkODNmZDA1YjYzMWUmdWlkPTUwMTk4NTAmdXRtX2NhbXBhaWduPWRheTgmdXRtX2NvbnRlbnQ9bGVhZF93ZWxjb21lJnV0bV9tZWRpdW09bGlmZWN5Y2xlJnV0bV9zb3VyY2U9c2FpbHRocnU,/" SRC = "https://i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/refer_zpsnoo1uzvu.jpg" = "Приведи и выиграй" alt = "Приведи и выиграй" /> </ mj-column> </ mj-group> </ mj-section>

Макет одной колонки для GIF и CTA

Мы создадим еще один раздел, в который мы просто добавим изображение, текст и кнопку. Единственный новый компонент здесь <MJ-кнопка> , который должен быть достаточно понятным и который поставляется со стандартными атрибутами. Обратите внимание, что вы должны указать href, иначе текст кнопки может не отображаться в некоторых почтовых клиентах.

<mj-section padding = "20"> <mj-column> <mj-image padding = "5 0 23 0" width = "200px" src = "https://i1044.photobucket.com/albums/b447/ngarnier /Thrive%20Market/566f6a67e871e_zpskalhjefi.gif "/> <mj-text align =" center "font-size =" 16px "> Ваш ежедневный пункт назначения для здорового образа жизни </ mj-text> <mj-button padding =" 20 0 10 0" MJ-класс = "таблетка" HREF = "https://thrivemarket.com/blog?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"> подробнее </ MJ-кнопка> </ МДж -column> </ mj-section>

Да, для этого тоже есть компонент! Хорошей практикой является разделение разных строк на разные секции вместо того, чтобы помещать все в одну и ту же секцию, потому что это дает вам больший контроль над стилями (особенно через заполнение), а также облегчает выявление любых возникающих проблем.

<mj-section padding = "0 0 20 0"> <mj-column> <mj-divider border-width = "5px" border-color = "# EEEBE7" /> </ mj-column> </ mj-section >

Мы будем использовать тот же разделитель между телом и нижним колонтитулом позже.

тело

Теперь, когда у нас красивый заголовок Давайте начнем с того, что кажется сложной частью этого письма.

Двухколонный макет, который укладывается на мобильный

Двухколонный макет

Здесь мы создадим раздел для каждой строки из двух столбцов. Каждый столбец будет состоять из изображения, фрагмента текста и кнопки. Хорошая новость заключается в том, что благодаря гибридному подходу MJML нам не нужно ничего делать, чтобы изображения складывались на мобильных устройствах. Это отзывчиво по умолчанию!

Что касается стиля, нам не нужно много делать, потому что мы используем mj-classes pill и desc, которые мы создали ранее. Все, что нам нужно сделать, это добавить некоторые отступы, чтобы соответствовать стилю исходного письма.

Подсказка: из-за проблемы с игнорированием заданной ширины в Outlook 2000, 2002 и 2003, в MJML рекомендуется устанавливать размеры изображений, которые вы хотите отображать на этих клиентах.

<mj-section padding = "20 10 0 10"> <mj-column> <mj-image width = "280px" href = "https://thrivemarket.com/blog/foods-for-happiness?uaexptime=1778637862&uatoken= 1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e & UID = 5019850 & utm_campaign = day8 & utm_content = lead_welcome & utm_medium = жизненный цикл и utm_source = sailthru»SRC = "https://i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/5-foods_zps9escvg7g.jpg"/> <MJ-текст MJ-класс = «убывание»> <a href="https://thrivemarket.com/blog/foods-for-happiness?uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&uid=5019850&utm_campaign=day8&utm_content=lead_welcome&utm_medium=lifecycle&utm_source=sailthru"> 5 Продукты, чтобы увеличить Ваше счастье < / a> </ mj-text> <mj-button mj-class = "pill" href = "https://thrivemarket.com/blog/foods-for-happiness?uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3acome43t&_m_f_t_1_m_1_1_1_1_1_1_1_8_8_8_1_8_8_1_8_8_8_8_1_8_8_8_5 = жизненный цикл & utm_s ource = sailthru "> Подробнее </ mj-button> </ mj-column> <mj-колонка> <mj-image width =" 280px "href =" https://thrivemarket.com/blog/whiten-teeth- мгновенно активированный угль? uaexptime = 1778637862 & uatoken = 1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e & UID = 5019850 & utm_campaign = day8 & utm_content = lead_welcome & utm_medium = жизненный цикл & utm_source = sailthru»SRC = "https://i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/teeth_zpsr1sycjxi.jpg"/ > <MJ-текст MJ-класс = "убывание"> <A HREF = "https://thrivemarket.com/blog/whiten-teeth-instantly-activated-charcoal?uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&uid=5019850&utm_campaign=day8&utm_content=lead_welcome&utm_medium= lifecycle & utm_source = sailthru "> Моментально отбелить зубы активированным углем </a> </ mj-text> <mj-button mj-class =" pill "href =" https://thrivemarket.com/blog/whiten-teeth-instantly -активированный-древесный угль? uaexptime = 1778637862 & uatoken = 1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89 852fd83fd05b631e & uid = 5019850 & utm_campaign = day8 & utm_content = lead_welcome & utm_medium = lifecycle & utm_source = sailthru "> Подробнее </ mj-button> </ mj-column> </ mj-section>

Здесь мы видим, что для ссылок применяется стиль HTML по умолчанию. В дополнение к <mj-attribute> вы также можете встроить CSS прямо в MJML, используя <MJ-стиль> , Давайте сделаем это, обновив заголовок, чтобы раз и навсегда перезаписать стиль ссылок по умолчанию. Мы также создадим класс CSS для применения к тегам <a>, чтобы придать им правильный цвет (мы создаем класс, потому что ссылки в письме не должны иметь одинаковый цвет).

<mj-head> <mj-title> Узнайте о последних тенденциях </ mj-title> <mj-attribute> <mj-all padding = "0" /> <mj-text font-family = "sans-serif" color = "# 8e8b85" /> <mj-class name = "pill" font-weight = "700" color = "# d5ad4b" border-radius = "50" border = "2px solid # d5ad4b" font-size = "16px "line-height =" 16px "padding =" 8 20 20 20 "inner-padding =" 10 75 10 75 "background-color =" transparent "/> <mj-class name =" desc "font-family =" Georgia "font-size =" 20px "color =" # 45495d "padding =" 25 5 10 10 "/> <mj-class name =" ico "font-family =" Helvetica "font-size =" 14px "align =" center "padding =" 0 0 "/> </ mj-attribute> <mj-style> a {text-ornament: none; } .desc {color: # 45495d; } </ mj-style> </ mj-head>

Выполните те же шаги с другими разделами из двух столбцов.

Синяя секция с CTA

Синий раздел

Для создания этого раздела мы будем использовать знакомые нам компоненты: <mj-section>, <mj-column> и <mj-button>.

Сначала мы добавим цвет фона в наш раздел и некоторые отступы, чтобы он выглядел как положено. Затем нам просто нужно создать два столбца, один шире другого, используя атрибут width с процентами. Как обычно, столбцы будут складываться на мобильном телефоне. Поскольку кнопка отличается от других здесь, мы не будем использовать класс таблетки, а скорее создадим новый стиль вручную.

Подсказка: из-за слабой поддержки сокращенных цветов HEX в Internet Explorer мы рекомендуем использовать шестизначные цвета HEX. Это хак, который мы в какой-то момент реинтегрируем в MJML, чтобы убедиться, что трехзначные HEX-коды превращаются в шестизначные.

<mj-section background-color = "# 6d8be1" padding = "15 40 10 40"> <mj-column width = "60%"> <mj-text font-weight = "bold" color = "# ffffff" шрифт -size = "16px" padding = "0 0 10 0"> Получите все свои здоровые продукты на процветающем рынке! </ mj-text> </ mj-column> <mj-column width = "40%"> <mj-button background-color = "# ffffff" color = "# 45495d" font-weight = "800" font- family = "sans-serif" font-size = "16px" border-radius = "2px" inner-padding = "15 60"> Купить сейчас </ mj-button> </ mj-column> </ mj-section>

Последний раздел тела

Последний раздел тела

Чтобы создать заголовок, мы создадим макет из трех столбцов. Столбцы будут состоять из следующего, соответственно:

  • темно-синяя линия слева от заголовка,
  • название «Хотите больше советов, хитростей и вкусных рецептов?»,
  • синяя линия справа от заголовка.

Затем мы обернем три столбца в <mj-group>, чтобы они не складывались на мобильных устройствах.

Мы начнем создавать линии, используя компонент <mj-divider>, установив его border-width равным 2px и добавив немного отступов, чтобы он выглядел так, как мы хотим. По умолчанию разделитель заполнит столбец, в котором он содержится, чтобы он выглядел одинаково для всех устройств. Поэтому нам не нужно явно устанавливать ширину делителя.

Затем мы просто используем <mj-text> для добавления нашего заголовка, используя mc-класс desc (потому что мы хотим наследовать некоторые из стилей, установленных в этом классе) и переопределяя семейство шрифтов и свойства выравнивания, которые отличаются из этого класса. Мы могли бы также вручную установить стиль без использования desc mj-class.

Наконец, нам просто нужно использовать нашу кнопку с mj-классом pill, как мы делали раньше. Мы переопределяем внутренние отступы, потому что, согласно оригинальному дизайну, эта кнопка не такая широкая, как другие.

<mj-section padding = "40px 0 0 0"> <mj-group> <mj-column width = "12%"> <mj-divider border-width = "2px" padding = "10 0 0 10" /> </ mj-column> <mj-column width = "75%"> <mj-text padding = "0 0 20 0" mj-class = "desc" font-family = "Helvetica" align = "center"> < a class = "desc" href = "https://thrivemarket.com/blog?utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"> Хотите узнать больше советов, хитростей и вкусных рецептов? </a> </ mj-text> </ mj-column> <mj-column width = "13%"> <mj-divider border-width = "2px" padding = "10 10 0 0" /> </ mj-column> </ mj-group> </ mj-section> <mj-section padding = "5px"> <mj-column> <mj-image src = "https://img.thrivemarket.com/emails/ images / img-18.jpg "href =" https://thrivemarket.com/blog?utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru "/> </ mj-column> </ mj-column> </ mj-section> <заполнение раздела mj = "15px"> <mj-column> <mj-button mj-class = "pill" inner-padding = "12 25" href = "https://thrivemarket.com/blog?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585mut0_b038f068864685808958808959 lead_welcome & utm_medium = lifecycle & utm_campaign = day8 & utm_source = sailthru "> Прочитайте наш блог </ mj-button> </ mj-column> </ mj-section>

Ты можешь видеть как должен выглядеть наш шаблон MJML.

Нижний колонтитул электронной почты

заглавие

Мы оборачиваем наш заголовок в раздел и столбец, как мы видели ранее, и мы используем стиль desc, который мы создали ранее. Нам нужно изменить только несколько стилей, вручную установив разные выравнивание, размер шрифта и стиль шрифта из нашего mj-класса.

<mj-section background-color = "# EEEBE7" padding = "25"> <mj-column> <mj-text padding-top = "20px" mj-class = "desc" align = "center" font-size = "28px" font-style = "italic"> Оставайтесь на связи </ mj-text> </ mj-column> </ mj-section>

Раздел шести значков

Этот раздел состоит из шести значков с сопровождающим текстом ниже. Значки отображаются рядом на рабочем столе и переносятся на две строки из трех значков на мобильном телефоне. К настоящему времени вы, вероятно, знаете, что создавать такие макеты легко, если мы используем компонент <mj-column>. Чтобы иконки складывались в две строки, нам нужно только обернуть столбцы в две группы по три столбца в <mj-group>.

Чтобы оформить текст под иконками, нам просто нужно использовать созданный ранее ico mj-класс. Мы также создадим класс CSS с именем ico для применения к тегам a, как мы делали в разделе с двумя колонками.

<mj-section padding = "40 0"> <mj-group> <mj-column> <mj-image padding = "10" src = "https://i1044.photobucket.com/albums/b447/ngarnier/Thrive % 20Market / img-01_zpssvjtmopj.png ">> = KG6OCD3H & utm_content = lead_welcome & utm_medium = lifecycle & utm_campaign = day8 & utm_source = sailthru "> Paleo </a> </ mj-text> </ mj-column> <mj-column> <mj-image padding =" 10 "src =" https // i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/img-02_zpshj3vgh1w.png "HREF =" https://thrivemarket.com/gluten-free?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign = day8 & utm_source = sailthru "/> <mj-text mj-class =" ico "> <a class =" ico "href =" https://thrivemarket.com/gluten-free?uid=5019850&uaexptime=1778637862&uatoken=1462b97 7c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e & ccode = KG6OCD3H & utm_content = lead_welcome & utm_medium = lifecycle & utm_campaign = day8 & utm_source = image-<<>> <<>> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mj <m> <j> mjs_tj <m> <j> mjs_jjjmjjjjjjjjjjjjjjjjjjjjjjjjjhjjjjjjmjsjjjjmjjjjjjmjjjjjmjsjjjmjsjjj также, чтобы узнать, где вы работаете со своим именем. //i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/img-03_zpshvwomzpo.png "HREF =" https://thrivemarket.com/vegan?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign = day8 & utm_source = sailthru "/> <MJ-текст MJ-класс =" ICO "> <класс =" ICO "HREF =" https://thrivemarket.com/vegan?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium = жизненный цикл & utm_campaign = day8 & utm_source = sailthru "> Вегетарианец </a> </ mj-text> </ mj-column> </ mj-group> <mj-group> <mj-column> <mj-image padding =" 10 " SRC = "https://i1044.photobucket.com/albums/b447/ngarnie г / Thrive% 20Market / IMG-04_zpsyeczb1sp.png»HREF = "https://thrivemarket.com/ingredients/gmo-free?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"/> < MJ-текст MJ-класс = "ICO"> <класс = "ICO" HREF = "https://thrivemarket.com/ingredients/gmo-free?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source = sailthru "> Без ГМО </a> </ mj-text> </ mj-column> <mj-column> <mj-image padding =" 10 "src =" https://i1044.photobucket.com/ альбомы / b447 / ngarnier / Thrive% 20Market / IMG-05_zpsryppwpok.png "HREF =" https://thrivemarket.com/certifications/certified-organic?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm _campaign = day8 & utm_source = sailthru "/> <mj-text mj-class =" ico "> <a class =" ico "href =" https://thrivemarket.com/certifications/certified-organic?uid=5019850&uaexptime=1778637862&uatoken= 1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e & ccode = KG6OCD3H & utm_content = lead_welcome & utm_medium = жизненный цикл & utm_campaign = day8 & utm <column> mj <m> <m> <m> <m> /i1044.photobucket.com/albums/b447/ngarnier/Thrive%20Market/img-06_zpsoq4ulmbq.png "HREF =" https://thrivemarket.com/raw?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign= day8 & utm_source = sailthru "/> <MJ-текст MJ-класс = "ICO"> <класс = "ICO" HREF =" https://thrivemarket.com/raw?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium= Жизненный цикл и у tm_campaign = day8 & utm_source = sailthru "> Raw </a> </ mj-text> </ mj-column> </ mj-group> </ mj-section>

Еще раз, этого раздела легко достичь, используя компонент <mj-column>, используя один столбец на значок социальной сети и упаковывая все иконки в <mj-group>, чтобы они не складывались на мобильных устройствах. Единственная хитрость здесь - это точная настройка ширины изображений и отступов, чтобы результат соответствовал оригинальному дизайну.

Разделитель и текст

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

<mj-section background-color = "# EEEBE7" padding = "25 40"> <mj-column> <mj-divider /> <mj-text padding = "30 0 0 0" align = "center" font-size = "14"> <a class="footer" href="https://thrivemarket.com/blog?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"> Читайте наш блог </ а > <a class="footer" href="https://thrivemarket.com/"> Просмотр электронной почты в Интернете </a> </ mj-text> <mj-text align = "center" color = "# 45495d" шрифт -size = "10px" line-height = "14px"> <p> Пожалуйста, не нажимайте "ответить" на это письмо - мы не сможем отправить вам электронное письмо с этого адреса и помочь вам процветать! Если вам нужно что-нибудь, посетите наш <a class="footer" href="https://thrivemarket.com/faq?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"> FAQ </ а > или связаться с <a class="footer" href="https://thrivemarket.com/faq/contact?uid=5019850&uaexptime=1778637862&uatoken=1462b977c1fa70b09b585f3a8943d79a7079ab314393fe89852fd83fd05b631e&ccode=KG6OCD3H&utm_content=lead_welcome&utm_medium=lifecycle&utm_campaign=day8&utm_source=sailthru"> Member Services </a> в любое время, и мы будем рады помочь! </ p> <p> Мы не хотим, чтобы вы уходили, но если вы больше не хотите получать рекламные сообщения от нас, вы можете <a class = "footer" href = "https://thrivemarket.com/"> отмените подписку здесь </a> или <a class="footer" href="https://thrivemarket.com/"> измените свои настройки электронной почты </a> в любое время. </ p> <p> 4509 Glencoe Ave, Marina Del Rey, CA 90292 <br /> @ 2016, процветающий рынок, все права R зарезервировано </ p> </ mj-text> </ mj-column> </ mj-section>

Рендеринг HTML-файла и тестирование

Теперь у вас должно быть менее 240 строк MJML (вы можете проверить полный код ), тогда как исходный файл был чуть менее 800 строк HTML. Congrats! Вы только что создали свою первую отзывчивую электронную почту, используя MJML! Насколько легко это было?

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

Иди к Лакмусу (создайте учетную запись, если у вас ее еще нет), создайте новый проект и вставьте созданный ранее HTML-код в область кода. Вы сможете увидеть результаты в различных почтовых клиентах, нажав «Мгновенный предварительный просмотр» на правой панели. Ты можешь видеть результаты для основных почтовых клиентов, от Outlook 2003 до почтового ящика Gmail.

Идти дальше

Теперь, когда вы знаете, как использовать MJML для простого создания адаптивного электронного письма, почему бы не попробовать создать свой собственный компонент? Мой учебник проведет вас через этот шаг за шагом.

Что вы думаете о своем первом опыте работы с MJML? Не стесняйтесь протянуть руку в Твиттере и присоединиться к сообществу MJML сейчас, подписавшись на слабина канал. Вы также можете подписаться на рассылку быть в курсе последних новостей.

Похожие

30 основных идей для блога в моде + бесплатная шпаргалка
Регулярно публиковаться в блоге о моде - это весело, но может быть сложно найти новые интересные темы для отличного контента. Регулярные сообщения об одежде могут быть скучными, а иногда погода не достаточно хорошая, чтобы запечатлеть ваш #ootd. Это то время, когда хорошо, чтобы небольшая записная книжка была наполнена креативными идеями для вашего следующего поста в блоге о моде. Для всех блоггеров, которым нужно немного вдохновения для своего блога стиля, у нас есть 30 идей для модных постов,
Как создать анимацию в Phaser с текстурным атласом
... называемое текстурным атласом . Вот анимация, которую я недавно создал для игры, которую я создаю с использованием текстурного атласа: В этом уроке я расскажу, как использовать атлас texure для анимации, так что если вы хотите немного больше фона для спрайтов и как мы можем использовать
Microsoft начинает помечать uTorrent как вредоносное ПО
Этот сайт может зарабатывать партнерские комиссии по ссылкам на этой странице. Условия эксплуатации , Популярный торрент-клиент, известный как uTorrent, имеет миллионы пользователей, многие из которых используют его уже десять лет. uTorrent (или микро-торрент, как его иногда называли) приобрел популярность, оправдав свое имя минималистского, быстрого торрент-менеджера. В последние годы это стало раздутым и неуклюжим.
Как отобразить элементы с помощью метода Map в Java 8
... ставьте, что у вас есть набор значений температуры в градусах Цельсия, которые необходимо преобразовать в градусы Фаренгейта. До Java 8 вам нужно было бы перебирать коллекцию и преобразовывать каждое показание температуры в отдельности. В Java 8 преобразование каждой температуры может быть сделано только в одной строке кода. Ключом к достижению этой цели является использование метода map класса Stream. Этот метод отображает (т.е. переводит) каждый элемент коллекции на основе заданной лямбды
Как исправить проблему с «слишком большой мощностью» на iPad?
... ин с USB-портом на конце и один с гнездом для SD-карты"> Apple продает два адаптера камеры для iPad, один с USB-портом на конце и один с гнездом для SD-карты. Для 30-контактных iPad эти два пакета поставляются в комплекте, в то время как для нового iPad-адаптера Lightning требуются более дорогие версии, которые продаются отдельно. Эти адаптеры были действительно полезны, но пару лет назад Apple наложила ограничение на программное обеспечение, ограничив выходную мощность адаптеров от 100 мА
Любовная головоломка или головоломка как мотив для свадьбы и свадьбы
Еще одно вдохновение Zankyou на ведущую тему свадьбы и свадьбы - головоломка. Мотив может показаться простыней, однако он очень креативный и используется с фантазией, может быть очень интересной темой свадьбы. Загадкам можно придать символическое измерение, и тогда картонные элементы станут идеально подходящими для двух разных людей. Так как же вы можете использовать причудливо нарезанные кусочки целого, чтобы оживить и украсить день нашей свадьбы? Приглашения
Первый мобильный телефон без батареи делает звонки, используя внешнюю мощность
... на Исследователи из Вашингтонского университета изобрели мобильный телефон, который не требует батарей - серьезный скачок в продвижении за пределы зарядных устройств, шнуров и умирающих телефонов. Вместо этого телефон потребляет несколько микроватт энергии, которые ему требуются, от внешних радиосигналов или света. Команда также звонила по Skype, используя свой телефон без батареи, демонстрируя, что прототип
Антивирус для iPhone, существует?
Может показаться странным, что «Лаборатория Касперского» не предлагает антивирусное приложение для iOS, но есть хорошее объяснение: Apple не поддерживает антивирусные приложения в App Store, поскольку состояния что «Apple разработала платформу iOS с очень безопасным ядром» и, следовательно, ее операционной системе не требуется антивирус. Это кажется высокомерным, но это не абсурдная маркетинговая стратегия:
Как полностью отключить Wi-Fi и Bluetooth в iOS 11 для всех сетей и устройств
... сь поведение переключателей Wi-Fi и Bluetooth в обновленном Центре управления iOS 11 вызывает некоторую путаницу среди пользователей"> Apple изменилась поведение переключателей Wi-Fi и Bluetooth в обновленном Центре управления iOS 11 вызывает некоторую путаницу среди пользователей. Вот как вы полностью отключаете радио Wi-Fi и Bluetooth в вашем iPhone, iPad и iPod touch на
Антивирус для iPhone - он вообще существует?
... ия Касперского» не предлагает антивирусное приложение для iOS, но есть веская причина: Apple не допускает никаких надлежащих антивирусных приложений в App Store, поговорка «Apple разработала платформу iOS с безопасностью в своей основе» и что операционной системе не нужна антивирусная утилита. Это звучит довольно высокомерно, но это не маркетинговая ерунда: Apple iOS действительно разработана, чтобы быть очень безопасной.
CMS Made Simple, простой и эффективный менеджер контента
CMS Made Simple это приложение для публикации и управления контентом, который отличается своей простотой . Он имеет все, что нам нужно в инструментах этого типа, таких как управление шаблонами, настройка дизайна, безопасность и предлагает надежный и простой в управлении интерфейс. Кроме того, это еще одно приложение с открытым исходным кодом, которое мы можем установить в

Комментарии

Например, как мы празднуем как виртуальная команда и как мы проводим каникулы вместе?
Например, как мы празднуем как виртуальная команда и как мы проводим каникулы вместе? Поэтому на этой неделе мы собираемся потратить немного времени, чтобы поговорить о праздничных вечеринках для виртуальных команд. Теперь, когда мы работаем с глобальными командами, это возможность узнать о целой куче праздников. Поэтому первое, что я рекомендую для виртуальной команды, - это создать календарь праздников вместе и просто наметить, где все праздники для вашей виртуальной команды, это очень удобно,
Зачем заставлять пользователей тратить так много времени на чтение вашего контента, если у вас есть возможность обеспечить лучший пользовательский опыт?
Зачем заставлять пользователей тратить так много времени на чтение вашего контента, если у вас есть возможность обеспечить лучший пользовательский опыт? связанные с
Какое значение делает React Native принести на сцену, и как мы можем убедиться, что приложения, созданные с его помощью, хорошо приняты целевой аудиторией?
Но как насчет других разработчиков и менеджеров в вашем магазине? Если вы хотите начать создавать интерфейсы RESTful на работе, вам нужно объяснить, почему REST является основой будущих информационных систем и почему его стоит принять сейчас. В этой последней статье этой серии я рассмотрю концепции REST как основы для динамических, масштабируемых, ориентированных на ресурсы архитектур. Я покажу, как цели и видение REST соотносятся с более крупными планами для самой сети. Я также
Любой другой инструмент для восстановления пароля Excel, который вы используете, который вы хотели бы упомянуть?
Любой другой инструмент для восстановления пароля Excel, который вы используете, который вы хотели бы упомянуть? Оставить комментарий! Наслаждайтесь!
Как вы можете проверить, как мы попадаем в этот рейтинг сайтов?
Как вы можете проверить, как мы попадаем в этот рейтинг сайтов? Было несколько способов . Многие сайты имеют встроенные плагины, которые отображают свой собственный Page Rank. Вы можете проверить Page Rank самостоятельно на многих страницах сети, где находятся соответствующие модули. Достаточно было ввести название страницы и дождаться результата. Не менее популярным способом проверки рейтинга в Google было использование расширений для популярных
Сколько других людей будет иметь больше доверия к такой важной проблеме, как электронная музыка массово набирает популярность?
Сколько других людей будет иметь больше доверия к такой важной проблеме, как электронная музыка массово набирает популярность? «Как или вы могли видеть, как электронная музыка
Каковы некоторые из ваших идей для блоггеров как блогер моды и стиля?
Каковы некоторые из ваших идей для блоггеров как блогер моды и стиля? Какая из ваших любимых идей в блоге о моде? Поделитесь с нами в разделе комментариев! Если вам нужно больше вдохновения, посмотрите наш пост на влиятельные лица, чтобы следовать для SS18. Нужна подсказка для вашего первого или пятидесятого модного блога? Загрузите наш бесплатный шпаргалку и получите
Что это значит, кроме того, что пользователи должны получать меньше контента, который они потребляют пассивно?
Что это значит, кроме того, что пользователи должны получать меньше контента, который они потребляют пассивно? Это процент, никто не знает его, и, вероятно, он не определен «жестко» (за исключением рекламы, которая не может превышать 3 процента). Вы можете догадаться, что доля сообщений от друзей увеличится (вот что они являются «значимыми взаимодействиями») за счет контента, размещаемого брендами и СМИ на фан-страницах. Вопрос в том, возьмут ли они на 10 или 30 процентов больше новостей
Не знаете, как сделать определенные вещи на вашем устройстве Apple?
Не знаете, как сделать определенные вещи на вашем устройстве Apple? Дайте нам знать через [email protected], и в будущем учебное пособие может предоставить решение. Присылайте свои советы по использованию по адресу [email protected] .
Как вставить печатный текст в эти приложения?
Как вставить печатный текст в эти приложения? Конечно, с помощью панели ввода. Другим программным обеспечением для Windows XP Tablet PC Edition является панель ввода планшетного ПК, панель, закрепленная в нижней части экрана и позволяющая вводить данные с помощью пера планшета (ее также можно установить для всплывающих подсказок для тех, кто не любит потеря места на рабочем столе, занятого стыковкой панели). Панель ввода предоставляет пользователю ряд методов ввода на выбор. Возможно,
Абра акции - как использовать?
Абра акции - как использовать? Если вы выбрали один из указанных выше кодов скидок и не знаете, как его использовать, воспользуйтесь нашим советом. Скопируйте сгенерированный для вас код скидки и перейдите в предварительный просмотр виртуальной корзины в файле abra-meble.pl. Найдите место для ввода кода скидки , вставьте его и подтвердите ваш заказ. Система автоматически добавит скидку к вашему заказу.

Com/blog?
Com/?
Com/blog?
Com/blog/foods-for-happiness?
Com/blog/foods-for-happiness?
Com/blog/foods-for-happiness?
Com/blog/whiten-teeth- мгновенно активированный угль?
Com/blog/whiten-teeth-instantly-activated-charcoal?
Com/blog/whiten-teeth-instantly -активированный-древесный угль?
Com/blog?