Gmail игнорирует display:none

У меня есть запрос, что Gmail игнорирует display:none.

Что делать? В электронной почте HTML для скрытия строки или div.


person Sagar    schedule 25.10.2010    source источник
comment
Если вы хотите, чтобы определенные вещи были скрыты в электронном письме, самый простой способ — не включать их вообще.   -  person Klaus Byskov Pedersen    schedule 25.10.2010
comment
Какой запрос? Пожалуйста, объясните больше.   -  person leppie    schedule 25.10.2010
comment
@leppie Я думаю, он имеет в виду запрос в службу поддержки   -  person Pekka    schedule 25.10.2010


Ответы (12)


Если style="display:none" не работает в Gmail, поставь style="display:none !important;" и будет работать в Gmail.

person Sagar    schedule 25.10.2010
comment
Просто мое мнение: ответ Пекки имеет больше смысла. Если вы скрываете элемент, просто избавьтесь от него целиком. - person Jasper; 01.11.2012
comment
@Jasper Возможно, вы скрываетесь для использования в другом медиа-запросе. Даже если Gmail не поддерживает его, другие почтовые приложения поддерживают его, например, родное приложение iOS. - person Leandro Alves; 25.05.2013
comment
Это плохой ответ. Gmail не учитывает display:none. Это сработает только в том случае, если вы поместите декларацию display:none!important в строку элемента. Но если вы это сделаете, вы не сможете перезаписать его. - person davidcondrey; 07.01.2014
comment
Прекрасно работает, если вы хотите внедрить некоторую разборчивую информацию, которая не должна отображаться пользователю. - person Avishai; 20.01.2014
comment
Это может работать с gmail (и вы можете перезаписать его с помощью классов), но больше не работает в Outlook, так как ему не нравится !важно - person Some Developer; 21.01.2015

Для тех, кто обращается сюда с аналогичной проблемой, связанной с разработкой электронной почты для мобильных устройств и настольных компьютеров в Gmail и Gmail: если вы используете медиа-запросы и показываете/скрываете контент, встроенный css не сможет перезаписать встроенное объявление !important. Вместо этого вы можете использовать overflow:hidden, например:

<div class="mobile" style="width:0; overflow:hidden;float:left; display:none"></div>

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

@media only screen and (max-width: 480px) {
 .mobile {
  display : block !important;
  width : auto !important;
  overflow : visible !important;
  float : none !important;
 }
 .desktop {
  display : none !important;
 }
}

К сожалению, свойство height не работает в Gmail, в противном случае это было бы лучшим решением, учитывая, что это создает раздел пробелов под видимым содержимым, равный высоте div.

person Luke    schedule 13.11.2012
comment
обратите внимание, что приведенное выше следует читать на дисплее, а не на дисплее. Я пытался отредактировать комментарий, но stackoverflow не позволяет редактировать менее 6 символов. - person greatwitenorth; 29.04.2013
comment
@Luke СПАСИБО! Всем, кто читает это в будущем, как я только что. Если вы хотите избавиться от этого уродливого белого пространства. просто сделайте высоту строки: 1px; затем в вашем медиа-запросе добавьте правильную высоту строки. Я обнаружил, что лучше всего он работает с TR, а не с div или td. - person Travis; 22.11.2013
comment
Просто чтобы отметить, мы обнаружили, что использование этого метода для мобильной версии электронной почты не является идеальным, поскольку пересылка электронной почты в Outlook другому человеку будет отображать как мобильное, так и настольное содержимое. Теперь мы пытаемся создавать электронные письма только с использованием display:block для элементов таблицы (tr, td), чтобы адаптировать их для мобильных экранов. - person Luke; 22.11.2013
comment
К сведению, этот обходной путь больше не работает. Gmail ОЧЕНЬ старается не дать людям условно определить их платформу. - person Crates; 06.10.2014
comment
Он по-прежнему работает в Gmail, но вам нужно использовать max-height: 0 и использовать его на уровне блока (div — он не работает с таблицей или строкой таблицы). - person vard; 23.10.2015
comment
Да! Попробовав несколько вариантов, настройка max-height: 0 у меня сработала! - person Adam Loving; 18.11.2015

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

Проблема, с которой я столкнулся, касалась Gmail и Outlook. Согласно OP, мобильный контент, который у меня был, не скрывался в Gmail (Explorer, Firefox и Chrome) или Outlook (2007, 2010 и 2013). Я решил это, используя следующий код.

Вот мой мобильный контент:

<!--[if !mso 9]><!-->
<tr>
  <td style="padding-bottom:20px;" id="mobile">
    <div id="gmail" style="display:none;width:0;overflow:hidden;float:left;max-height:0;">
  <table cellspacing="0" cellpadding="0" border="0">
    <tr>
      <td>
    <img src="imageurl" style="border:0;display:block;width:100%;max-height:391px;" />
          </td>
    </tr>
    <tr>
          <td style="border-left-style:solid;border-left-width:1px;border-left-color:#d5e1eb;border-right-style:solid;border-right-width:1px;border-right-color:#d5e1eb;background:#f7fafd;padding-top:15px;padding-bottom:15px;font-family:Arial,Helvetica,sans-serif;font-size:22px;color:#1c1651;padding-left:10px;padding-right:10px;text-align:left;" id="mobiletext" align="left">We're now on Twitter</td>
    </tr>
    <tr>
      <td style="border-left-style:solid;border-left-width:1px;border-left-color:#d5e1eb;border-right-style:solid;border-right-width:1px;border-right-color:#d5e1eb;background:#f7fafd;font-family:Arial,Helvetica,sans-serif;font-size:13px;color:#585858;padding-left:10px;padding-right:10px;text-align:left;line-height:24px;" id="mobiletext"><a href="#" style="text-decoration:none;color:#0068ca;">Follow us now</a> for some more info.
      </td>
    </tr>
    <tr>
      <td>
        <img src="imageurl" style="border:0;display:block;width:100%;max-height:37px;" />
          </td>
    </tr>                               
  </table>  
    </div>
  </td>
</tr>
<!--<![endif]-->

А вот и CSS:

@media only screen and (min-width:300px) and (max-width: 500px) { /* MOBILE CODE */
*[id=mobile] {
    width:300px!important;
    height:auto!important;
    display:block!important;
    overflow:visible!important;
    line-height:100%!important;
  }
*[id=gmail] {  
    display:block!important;
    width:auto!important;
    overflow:visible!important;
    float:none !important;
    height:inherit!important;
    max-height:inherit!important;
  }

Исправления для Outlook

Итак, как вы можете видеть из приведенного выше HTML-кода, все содержимое заключено в эти теги;

<!--[if !mso 9]><!--> <!--<![endif]-->,

скрывает содержимое версий Outlook, о которых я упоминал. Для всех остальных почтовых клиентов display:none; работает просто отлично. Я также видел, что вы также можете использовать mso-hide:all, чтобы скрыть что-то для Outlook, но я подумал, что это немного проще, чем встроенный код.

Исправления для Gmail

Теперь для Gmail вы можете видеть, что я создал «особый» id под названием gmail, который затем применил к div в <td>. Я пробовал БЕСЧИСЛЕННОЕ количество других методов использования таких вещей, как overflow:hidden inline и всевозможных других комбинаций, но это то, что сработало для меня.

Короче говоря, обернув содержимое в <td> в <div>, который затем содержит overflow:hidden,width:0 и т. д., а затем перезаписав эти стили, присвоив div id из, в моем случае gmail решил проблему для меня.

В любом случае, может быть, кому-то это пригодится в будущем!

person zik    schedule 10.05.2013
comment
Необычайно отличный ответ на вопрос. Спасибо, что опубликовали это год спустя — это спасло наш бекон. Идиотизм электронной почты Gmail/Outlook css был настоящим препятствием, но это прекрасно решило эту проблему. - person jpw; 30.01.2014
comment
Добро пожаловать, я рад, что это помогло, выяснить это было все равно, что найти золотую жилу! - person zik; 31.01.2014
comment
ТЫ ГЕНИЙ!!!! Это должен быть лучший ответ, получивший наибольшее количество голосов по-настоящему. Я пробовал около 7 различных подходов, все они требовали огромных дополнений классов к моему css, и в целом не работали во всех почтовых клиентах. Это было так просто и РАБОТАЕТ!!!!! - person Riveascore; 05.04.2014
comment
проверил это, он может скрыть, но не может показать. я думаю, причина в том, что медиа-запросы не поддерживаются в gmail. поэтому все, что находится внутри экрана @media only и (min-width: 300px) и (max-width: 500px), игнорируется gmail. - person Erwin Kaddy; 12.08.2014
comment
Это какая-то гениальная работа! Вы действительно проделали выдающуюся работу. Это наиболее универсальное и наилучшее решение, с которым я столкнулся, в основном потому, что вы позаботились об адаптивных стилях, а также хорошо структурировали его, чтобы справиться с наихудшим возможным случаем! Палец Вверх Мужик!!! - person Azan Abrar; 08.05.2015
comment
Спасибо за этот ответ, действительно очень помог, кажется, работает надежно. - person István Ujj-Mészáros; 15.04.2016
comment
@ErwinKaddy, возможно, вы обсуждаете приложение Gmail и веб-сайт Gmail. - person Eoin; 29.08.2017

Использование display:none !important; решает проблему с gmail, но затем Outlook 2007 и 2010 игнорирует ее. Обойти это с помощью display:none; display:none !important; Таким образом, gmail использует одну версию, а Outlook 2007 и 2010 — другую.

person Ross    schedule 08.11.2012
comment
Вы можете использовать mso-hide: all; для Outlook 2007-13. - person István Ujj-Mészáros; 15.04.2016

Уже было сказано, что display:none !important; работает, но никто не указал вариант использования для этого, поэтому я дам тот, над которым я работал, когда нашел этот вопрос и решение на SO.

Я создавал электронное письмо, состоящее из нескольких частей, с обычным текстом и html. В исходнике html генерируется из файлов шаблонов, а обычный текст создается путем удаления тегов из полного электронного письма.

Чтобы включить дополнительный текст в обычный текст, который не отображается в html, самый простой способ — обернуть его в <div style="display:none !important>, который будет удален при создании обычного текста. Например, если это ваш шаблон:

<p>This is part of an html message template.</p>
<div style="display:none !important">=================================</div>
<div style="border-top:3px solid black;margin-top:1em;">
   <p>This is some footer text below a black line</p>
</div>

HTML будет отображаться так, как ожидалось (без множества =), а обычный текст со всеми удаленными элементами div будет выглядеть так:

This is part of an html message template.
=========================================
This is some footer text below a black line.
person darnzen    schedule 29.06.2012
comment
Или еще проще: скрыть текст резервной копии, если получатель не поддерживает html в своем клиенте и видит нечитаемую кучу html. - person user1111929; 04.08.2012

Полностью удалите элемент из исходного кода.

Клиенты электронной почты очень строго относятся к некоторым правилам CSS. Кроме того, учитывая, что JavaScript не может быть выполнен внутри электронной почты, display: none в любом случае не имеет там никакой функции, не так ли?

person Pekka    schedule 25.10.2010
comment
Нашел ответ. Он работает для gmail style=display:none !important; - person Sagar; 25.10.2010
comment
Многие мобильные устройства поддерживают медиа-запросы, поэтому, если вы разрабатываете адаптивный дизайн, у него есть несколько вариантов использования. - person Twistar; 30.01.2013
comment
Какое отношение JavaScript имеет к display: none? - person Jamey; 19.03.2014
comment
@ Джейми, какой смысл скрывать элемент, если вы не собираетесь его отображать при некоторых обстоятельствах? Поддержка Media Queries в клиентах удручающая. litmus.com/help/email-clients/media-query-support как еще это сделать, кроме как с JS? - person Pekka; 19.03.2014
comment
@Twistar и GMail позволяют использовать медиа-запросы в электронной почте? - person Pekka; 19.03.2014
comment
@Pekka При определенных обстоятельствах вы можете захотеть что-то полностью скрыть. Но вы правы, gmail не поддерживает медиа-запросы, так что это бесполезно конкретно для gmail. - person Jamey; 19.03.2014
comment
@Джейми, но я не вижу причин иметь в электронном письме элемент, который я не хочу показывать. (Или, по крайней мере, без законных причин. Возможно, таким образом можно переправить пиксель слежения, понятия не имею. Но это было бы действительно злом!) - person Pekka; 19.03.2014
comment
Я использую его для создания div с текстом предварительного просмотра. - person Vigrant; 01.04.2014
comment
Это могло быть хорошим ответом несколько лет назад, но в настоящее время проблема более тонкая. Сначала мы разрабатываем наши электронные письма для мобильных устройств, а затем используем медиа-запросы, чтобы предоставить версию, удобную для большого экрана, где это возможно. display: none удобно скрывать определенные элементы в версии для большого экрана. - person rinogo; 12.01.2016

Спасибо за это, очень полезно для меня.

Попробуйте max-height для Gmail, это должно поднять его. затем используйте max-height:inherit !important; в CSS это должно устранить проблему с интервалом:

<div class="mobile" style="display:none; width:0px; max-height:0px; overflow:hidden;">

@media only screen and (max-width: 480px) {
.mobile {
display:block !important;
margin: 0;
padding:0;
overflow : visible !important;
width:auto !important;
max-height:inherit !important;
}
}
person Dan S    schedule 05.12.2012
comment
Добро пожаловать в Stack Overflow! Пожалуйста, не добавляйте спасибо в качестве ответов. Потратьте некоторое время на сайт, и вы получите достаточно привилегий, чтобы голосовать за ответы, которые вам нравятся, что является способом выражения благодарности Stack Overflow. - person Martijn Pieters; 05.12.2012
comment
Спасибо! Это решение сработало для меня лучше всего. Те, что выше, оставили мне пустое пространство там, где был скрытый элемент. - person Kus; 26.03.2013

Чтобы скрыть элемент в электронном письме в формате HTML и заставить его работать в Gmail, вам нужно обнулить его и настроить размер в CSS (что Gmail проигнорирует).

Вот так:

<style>
    @media only screen and (max-width: 480px) { 
    *[class~=show_on_mobile] {
        display : block !important;
        width : auto !important;
        max-height: inherit !important;
        overflow : visible !important;
        float : none !important;
    }
</style>

<table border="0" cellpadding="0" cellspacing="0">
<tr>
<!--[if !mso]><!-->
    <td style="width: 0; max-height: 0; overflow: hidden; float: left;">
    </td>
</tr>
<!--<![endif]-->
</table>

Кроме того, добавленный условный комментарий относится к Outlook 07.

person davidcondrey    schedule 07.01.2014
comment
Ваша разметка выглядит странно, как выглядит разметка для MSO? Вы точно не дублируете. - person crmpicco; 21.09.2015
comment
Мой стандартный шаблон находится здесь, если вы хотите просмотреть его: github.com/dcondrey/html-email/blob/master/template/ Он будет предсказуемо отображаться на большем количестве клиентов, чем любой другой шаблон, который вы найдете. - person davidcondrey; 21.09.2015
comment
У вас есть таблицы или строки в вашем шаблоне электронной почты, которые вы показываете/скрываете для настольных компьютеров/мобильных устройств? У меня есть куча таблиц с такими классами, как hide-for-desktop и hide-for-small, которые являются частью документации Zurb Ink. Я не вижу примеров обработки такой настройки для Outlook и GMail в вашем стандартном шаблоне. Как правило, мой шаблон работает в либо GMail, либо в Outlook, но не в обоих. - person crmpicco; 22.09.2015

У меня есть ситуация, в которой я просто сказал пару слов. Я использовал размер шрифта: 0px;.

<div style="font-size:0px">foo bar</div>

Это сработало для меня.

person Roshan Singh    schedule 27.05.2014

Опираясь на Дэна С., еще один пример, который я часто использую.

@media only screen and (max-width: 480px) and (min-device-width: 320px) and (max-device-width: 480px) {
  p[class="hidden"] { /* I use this format to get past Yahoo Mail */
    display: block !important;
    visibility: visible !important;
    max-height: none !important;
  }
}

<td>
  <p class="hidden" style="display:none;visibility:hidden;max-height:0px;">You can't see me.</p>
</td>
person RuHa    schedule 26.09.2014

С большим удовольствием я хотел бы поделиться этой новостью со всеми, что Gmail теперь поддерживает свойство CSS display:none при тестировании EmailMonks< /а>. Но вам нужно применить класс с CSS при использовании «display: none», чтобы инструмент встраивания вас не коснулся.

Вы можете прочитать больше здесь

person Kevin George    schedule 31.08.2016

Если у вас возникли проблемы с Gmail, исправление, указанное в пункте три, сработало и для меня. Я применил аналогичный подход, используя теги div и переопределения в строке, а затем определив стиль CSS в теге заголовка, характерном для gmail. Каждый раз, когда я хочу что-то скрыть от рабочего стола Outlook, я делаю следующее: если !mso. См. пример ниже:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <style type="text/css">
    So my code looks like this: 
    @media screen and (max-width : 480px) { div[id=gmail] {display:block!important;
        width:100%!important;
        overflow:visible!important;
        float:none !important;
        height:inherit!important;
        max-height:inherit!important;}
    }
    </style>
    <title></title>
    </head>
    <body>

<!--And the in the i have the following setting inline-->
<table>
<tr>
<td>
<div id="gmail" style=
"display:none;width:0;overflow:hidden;float:left;max-height:0;">
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#E9E9E8"
align="center"><![if !mso]>
<tr>
<td valign="top">
<table width="133" bgcolor="#FFFFFF" style=
"border: 1px solid #c6c6c5;" cellpadding="0" cellspacing="0">
<!--My content--></table>
</td>
</tr>
<![endif]></table>
</div>
</td>
<!--This worked for me in Android 4.2 /4.1 /apple iOS
desktop web based: gmail, yahoo, Aol, Outlook.com in IE / FF and Chrome
desktop: outlook 2010--></tr>
</table>
</body>
</html>
person user3351203    schedule 25.02.2014