Способ скрыть таблицы в HTML e-mail в встроенном css-только чтобы показать их позже через медиа-запрос
Я работаю над своим первым мобильным шаблоном для электронной почты, используя медиа-запросы. Пока все хорошо, медиа-запросы классные, и я обязательно буду использовать это в своих проектах веб-дизайна.
однако я сталкиваюсь с одной трудностью; у меня довольно сложный дизайн заголовка (фоновое изображение с логотипами Facebook и youtube на нем, которые ссылаются на соответствующие страницы), поэтому он нарезан определенным образом. Это делает его не слишком легко сделать в мобильной версии, и я подумал возможно, я мог бы исправить это по-другому: использовать две разные таблицы заголовков, одну-на больших устройствах, а другую-на маленьких устройствах.
мобильная часть не проблема, так как они интерпретируют встроенный CSS довольно хорошо.
но я не могу скрыть полную таблицу для других почтовых клиентов. Я попробовал дисплей:нет, позиция: абсолютная с верхней и левой-9999px и т. д...
У кого-нибудь есть решение для этого? Это сэкономит мне много времени.
7 ответов
хорошо, кажется, я сам нашел решение:
Inline, на элементах внутри таблицы, которые будут скрыты в обычной, не мобильной версии, я помещаю следующие свойства:
line-height:0px;
font-size:0px;
height:0px;
margin:0;
padding:0;
Я тестирую его прямо сейчас с таблицей с одним tr, одним td и одним p внутри td.
Я ставлю эти свойства почти на каждый элемент:
<table cellpadding="0" cellspacing="0" border="0" align="center" id="hidden">
<tr class="showmobile" style="line-height:0px;font-size:0px;height:0px;margin:0;padding:0;">
<td class="showmobile" style="line-height:0px;font-size:0px;height:0px;margin:0;padding:0;">
<p class="showmobile" style="color:White; line-height:0px;font-size:0px;height:0px;margin:0;padding:0;">Testing this shiznit</p>
</td>
</tr>
</table>
Я также даю этим элементам класс "showmobile", которым я манипулирую таким образом во внутреннем таблица стилей в голове:
tr[class="showmobile"]
{
line-height:125% !important;
font-size:16px !important;
height:30px !important;
}
td[class="showmobile"]
{
line-height:125% !important;
font-size:16px !important;
height:30px !important;
}
p[class="showmobile"]
{
line-height:125% !important;
font-size:16px !important;
height:30px !important;
}
этот способ выбора классов, я получил от удивительной HTML электронной почты boilerplate @ http://htmlemailboilerplate.com/ -> Ссылка на эту статью: http://www.campaignmonitor.com/blog/post/3457/media-query-issues-in-yahoo-mail-mobile-email/ - >в основном, это делает Yahoo mail играть хорошо и не применять CSS в медиа-запрос, когда это не нужно.
вывод: я протестировал его на четыре платформы: GMail, Outlook 2010, Lotus Notes (я знаю!), и iPhone 3G. Все они дают ожидаемый результат, за исключением Outlook, который по-прежнему показывает 1 пиксельную линию. С некоторым умным контентом (раскраска текста, чтобы подняться в фоновом режиме), это очень хорошо скрывается.
Я буду держать вас в курсе, если я столкнусь с какими-либо проблемами с определенными почтовыми клиентами.
поместите таблицу в тег div html и добавьте ее стиль как дисплей:нет !важно!--2--> в медиа-запросов.
после боя я смог придумать.
- вы не можете использовать высота. Gmail заменяет его на min-height.
- не точно соответствуют цвету bg и тексту
- изображения должны быть сделаны высотой и шириной 1px, а затем увеличены с медиа-запросами
- вы все еще можете получить некоторые элементы, отображаемые на экране в gmail-попробуйте сделать их как можно незаметнее
в CSS:
@media all and (max-width: 480px) {
.mobile-hide {
width:1px !important;
display:none !important;
color:#fff;
}
.mobile-show {
display:block !important;
line-height:125% !important;
font-size:14px !important;
height:auto !important;
color:#666 !important;
}
.mobile-image {
width:350px !important;
height:446px !important;
}
.w800 {width:400px !important;}
}
HTML:
<table class="w800" width="800">
...
<tr><td>
<a href="http://mylink"><img src="image.jpg" width="300" height="300" border="0" alt="My Sweet Image" /></a>
</td>
<!-- a big fat image on the right for big screens only -->
<td class="mobile-hide">
<img class="mobile-hide" src="image2.jpg" width="450" height="500" border="0" alt="" />
<span class="mobile-hide">
My Text with a <a href="http://mylink" class="mobile-hide">link</a></span>
</td></tr>
...
</table>
<!-- a new table at the bottom for small screens only, "one column" -->
<table width="400" style="width:400px; margin:0 auto;">
<tr><td class="mobile-show" style="line-height:0px;font-size:0px;height:0px;margin:0;padding:0;">
<img class="mobile-image" src="image2.jpg" width="1" height="1" border="0" alt="" />
<span class="mobile-show" style="font-size:1px; color:#ffe;">
My Text with a <a href="http://mylink" style="text-decoration:none; color:#ffe;" class="mobile-show">link</a></span>
</td></tr>
</table>
Я придумал немного более элегантное решение, которое, похоже, работает во всех популярных почтовых клиентах webmail & desktop, кроме Lotus Notes 6 & 7 (предсказуемо). Здесь мы идем:
<style>
@media only screen and (max-width: 480px) {
.invisible { max-height: none !important; font-size: 12px !important; display: block !important; }
}
...
.invisible { max-height: 0px; font-size: 0; display: none; }
</style>
вот мои результаты - как вы думаете, это тоже жизнеспособное решение?
вот что я использую для html-писем, чтобы скрыть и показать контент. Простой, легко понять классы "мобильный" и "рабочий стол". "Мобильный" - это дисплей только для мобильных устройств. "Рабочий стол" отображается только для рабочего стола.
*[class=mobile]{display:none;}
@media only screen and (max-width:600px) {
*[class=desktop]{display:none !important;}
*[class=mobile]{display:block !important;width:auto !important;max-height:inherit !important;overflow:visible !important;float:none !important;}
*[class="block"]{display:block !important;padding:5px;}
}
но если вы хотите, чтобы ваша электронная почта работала, как вы надеетесь в Outlook и Gmail, вам нужно пойти немного дальше. Эти почтовые клиенты будут отображать настольную версию, независимо от этого. Но вы не хотите, чтобы они отображали мобильный контент, поэтому оберните все свои мобильный контент в условном комментарии, показанном в примере ниже. Это покроет вас для Outlook.
чтобы заставить Gmail вести себя, вам нужно обнулить все ваши элементы и развернуть их в CSS, который Gmail в любом случае будет полностью игнорировать. Все встроенное, что вы не хотите показывать Gmail, должно быть width: 0;max-height: 0;overflow: hidden;
вот когда CSS (пример выше вступает в игру. Объявление второго класса в запросе media расширяет блок до размер approprate для отображения на мобильных устройствах и Gmail скрывает его.
<!--[if !mso]><!-->
<td class="mobile" style="width: 0;max-height: 0;overflow: hidden;">
<img alt="" border="0" src="http://www.placehold.it/150x150" style="display:block;" width="100%">
</td>
<!--<![endif]-->
последнее, но не менее важное, эта последняя часть еще не протестирована.. У меня возникли проблемы с Windows Mobile, чтобы скрыть то, что я хочу скрыть. Я думаю, что разработка моего условного комментария решит проблему, изменив его следующим образом:
<!--[if !mso]><!--><![if !IEMobile]>
<td class="mobile" style="width: 0;max-height: 0;overflow: hidden;">
<img alt="" border="0" src="http://www.placehold.it/150x150" style="display:block;" width="100%">
<![endif]><!--<![endif]-->
но опять же, эта последняя часть, которую я еще не тестировал, будет тестировать завтра на самом деле, но если кто-то хочет разработать на Windows Мобильный пожалуйста. Все остальное я тщательно проверил.
вам нужно установить:
style="vertical-align:top;line-height:0px;font-size:0px;height:0px;margin:0;padding:0;mso-hide:all;"
Это даст вам наибольшую невидимость в нескольких приложениях электронной почты, затем вы можете использовать медиа-запросы для отмены эффектов.
litmus.com может служить отличным инструментом для этого.
display:none
получает раздели gmail!
чтобы скрыть таблицы из gmail, отобразите его как блок С нулевой высотой:
Установите встроенный стиль для каждой таблицы в: display:block; overflow:hidden; height: 0; max-height: 0;
помните чтобы применить встроенный стиль к любым дочерним таблицам скрытой таблицы. Класс переопределения phoneTableOnly
нужно только перейти на родительский стол.
пример ниже покажет только таблицы на устройствах, которые поддерживают запросы мультимедиа с максимальной шириной 640px. Идеальный для мобильного меню, которое вы не хотите показывать на настольных компьютерах и gmail.
<style type="text/css">
/*Note: This stylesheet is ignored by gmail.*/
@media only screen and (max-width: 640px) {
/*Restore tables:*/
table[class="phoneTabletOnly"], table[class="phoneTabletOnly"] table {
display: table !important;
overflow: visible !important;
height: auto !important;
max-height: none !important;
}
}
</style>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="phoneTabletOnly" style="display:block; overflow:hidden; height: 0; max-height: 0;">
<tbody>
<tr>
<td>
<table cellpadding="0" cellspacing="0" border="0" style="display:block; overflow:hidden; height: 0; max-height: 0;">
<tbody>
<tr>
<td>
This will be hidden in gmail.
</td>
</tr>
</tbody>
</table>
<table cellpadding="0" cellspacing="0" border="0" style="display:block; overflow:hidden; height: 0; max-height: 0;">
<tbody>
<tr>
<td>
This will also be hidden in gmail.
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
PS. Испытания в лакмус.