2010-10-25 72 views
42

我有一個查詢,gmail忽略了「display:none」 - 該怎麼辦?在電子郵件HTML隱藏arow或divGMail忽略「display:none」

+3

如果你想某些事情被隱藏在電子郵件中,最簡單的方法是不包括它們。 – 2010-10-25 10:32:09

+1

什麼查詢?請解釋更多。 – leppie 2010-10-25 10:32:14

+0

@leppie我認爲他的意思是支持請求 – 2010-10-25 11:04:49

回答

68

如果style =「display:none」在gmail中不起作用,請將style =「display:none!important;」 它在gmail中有效。

+0

只是我的看法:佩卡的答案更有意義。如果你隱藏了這個元素,那就把它們全部清除掉。 – Jasper 2012-10-31 23:07:38

+8

@Jasper您可能正在使用不同的媒體查詢。即使Gmail不支持,其他郵件應用程序也可以這樣做,例如iOS本機應用程序。 – 2013-05-24 22:33:23

+4

這不是一個好的答案。 Gmail不尊重展示:無。這種方法的唯一方法是,如果將聲明顯示:none!重要地嵌入元素中。但是,如果你這樣做,你將無法覆蓋它。 – davidcondrey 2014-01-07 08:32:16

6

完全從您的源代碼中刪除元素。

電子郵件客戶端對一些CSS規則非常嚴格。另外,看到電子郵件裏面沒有JavaScript可以執行,display: none無論如何都沒有功能,是嗎?

+1

找到答案它爲gmail style =「display:none!important;」工作 – Sagar 2010-10-25 12:06:43

+6

許多移動設備都支持媒體查詢,所以如果您正在設計一個響應式應用程序,那麼這個應用程序有幾個用例。 – Twistar 2013-01-30 07:22:18

+1

JavaScript與「display:none」有什麼關係? – Jamey 2014-03-18 23:07:54

7

已經有人說display:none !important;的作品,但是沒有人說過這個用例,所以當我在SO上發現這個問題和解決方案時,我會給出一個。

我正在用plain/text和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將呈現爲預期(沒有一堆='S)和純文本的所有div的剝離將是:

This is part of an html message template. 
========================================= 
This is some footer text below a black line. 
+0

甚至更​​簡單:如果接收者在其客戶端沒有html支持並且看到一堆不可讀的html。 – user1111929 2012-08-04 16:17:41

23

使用display:none !important;解決了Gmail的問題,但Outlook 2007和2010忽略了這個問題。使用display:none; display:none !important; 瞭解了這一點。這樣gmail使用一個版本,Outlook 2007和2010使用另一個版本。

+0

你可以使用'mso-hide:all;'爲Outlook 2007-13 – 2016-04-14 21:21:36

42

對於那些到達與此類似的問題與Gmail和移動/桌面電子郵件開發有關的問題 - 如果您使用媒體查詢和顯示/隱藏內容,嵌入式CSS將無法覆蓋inline!重要聲明。相反,你可以使用溢出:隱藏,像這樣:

<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的高度低於空白的部分。

+0

注意上面應該是讀取顯示而不是顯示。我試圖編輯評論,但stackoverflow不會允許少於6個字符的編輯。 – greatwitenorth 2013-04-29 18:48:07

+1

@luke謝謝! 對於任何正在閱讀這篇文章的人,就像我剛纔那樣。如果你想擺脫那個醜陋的空白空間。只是做一個行高:1px;然後在媒體查詢中添加適當的行高。我發現它在TR而不是div或td上效果最好。 – Travis 2013-11-21 21:34:22

+0

只是爲了說明一下,我們發現使用這種方法獲得移動版本的電子郵件並不理想,因爲將Outlook中的電子郵件轉發給其他人將顯示移動和桌面內容。現在我們嘗試使用表格元素(tr,td)上的display:block來創建電子郵件,以適應移動屏幕。 – Luke 2013-11-22 08:07:56

6

感謝您對我的幫助。

嘗試使用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; 
} 
} 
+3

歡迎來到Stack Overflow!請不要添加「謝謝」作爲答案。投入一些時間在網站上,你將獲得足夠的[特權](http://stackoverflow.com/privileges)來滿足你喜歡的答案,這就是堆棧溢出方式表示感謝。 – 2012-12-05 11:40:12

+0

謝謝!該解決方案對我來說效果最好。上面的那些留下了隱藏元素的空白空間。 – Kus 2013-03-26 04:43:50

26

雖然這已經回答了我想我要湊錢了一個解決方案,真正的情況下,任何人都爲我工作在未來有這個問題。這是上述答案和我在網上找到的其他內容的組合。

我遇到的問題是Gmail和Outlook。根據OP,我所擁有的移動內容不會隱藏在Gmail(資源管理器,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我那麼<td>內應用到一個div。我嘗試了其他方法使用其他方法,如overflow:hidden內聯和所有其他組合的方式,但這是爲我工作。

因此,在短期,包裹在<div><td>內容,然後包含overflow:hidden,width:0等然後通過這個DIV的id,在我的情況gmail覆蓋這些樣式解決了這個問題對我來說。

無論如何,也許有人會在未來發現這有幫助!

+1

非常好的回答這個問題。感謝一年後的發佈 - 它保存了我們的培根。 Gmail/Outlook電子郵件css idiocy一直是一個真正的拖延,但這很好地解決了它。 – jpwynn 2014-01-30 03:46:58

+0

非常歡迎,我很高興這有助於解決問題,就像尋找金礦! – zik 2014-01-31 10:44:32

+3

你是一個天才!這需要成爲真正的最佳答案。我嘗試了大約7種不同的方法,他們都需要在我的css中添加大量的類,總而言之,並不適用於所有電子郵件客戶端。這很簡單,很有用! – 2014-04-04 20:04:20

2

爲了隱藏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.

+0

您的標記看起來很奇怪,MSO的標記是什麼樣的?當然,你不會重複它。 – crmpicco 2015-09-21 15:10:24

+0

我的標準模板在這裏,如果你想查看它:https://github.com/dcondrey/html-email/blob/master/template/campaign.html它會呈現出可預見的跨越更多的客戶端比任何其他模板你會發現。 – davidcondrey 2015-09-21 17:11:10

+0

您的電子郵件模板中是否有桌面/行的顯示/隱藏表格或行?我有一大堆類似'hide-for-desktop'和'hide-for-small'的類,這是Zurb Ink文檔的一部分。我沒有看到在標準模板中處理Outlook和GMail的這種設置的任何示例。一般來說,我發現我的模板可以在_either_ GMail或Outlook中使用,但不能同時使用這兩種模板。 – crmpicco 2015-09-22 08:43:17

-3

如果您遇到的問題與Gmail的數目爲三個規定的修復工作對我來說也是如此。我使用了一種類似的方法,使用div標籤和覆蓋行,然後在頭文件標籤中定義一個CSS樣式,該標籤專用於gmail。任何時候,我想從Outlook桌面隱藏一些東西,我會做以下事情:if!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> 
1

我有一種情況,我只是有幾句話。我用font-size:0px ;.

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

它爲我工作。

0

建立在丹S.,我經常使用的另一個例子。

@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> 
0

非常高興,我想與大家分享這個消息,Gmail現在支持「顯示:無」通過EmailMonks上測試CSS屬性。但是你需要在使用'display:none'的時候使用CSS來應用一個類,以便不被內嵌工具修改。

你可以閱讀更多here