46 votes

Gmail ne tient pas compte de la mention "display:none".

J'ai une requête que Gmail ignore. display:none .

Que faire ? Dans un email HTML pour cacher une ligne ou un div.

3 votes

Si vous souhaitez que certains éléments soient cachés dans un courriel, le plus simple est de ne pas les inclure du tout.

1 votes

Quelle requête ? Veuillez expliquer davantage.

0 votes

@leppie Je pense qu'il veut dire une demande de support.

72voto

Sagar Points 618

Si style="display:none" ne fonctionne pas dans Gmail, mettez style="display:none !important;" et ça marche dans Gmail.

0 votes

C'est juste mon avis : La réponse de Pekka est plus logique. Si vous voulez cacher l'élément, débarrassez-vous-en tout simplement.

8 votes

@Jasper Vous vous cachez peut-être pour l'utiliser dans une requête média différente. Même si Gmail ne le prend pas en charge, d'autres applications de messagerie le font, comme l'application native d'iOS.

5 votes

Ce n'est pas une bonne réponse. Gmail ne respecte pas le paramètre display:none. La seule façon dont cela fonctionne est de mettre declare display:none!important inline sur l'élément. Mais si vous faites cela, vous ne serez pas en mesure de l'écraser.

44voto

Luke Points 424

Pour ceux qui rencontrent un problème similaire dans le cadre du développement d'une messagerie mobile/de bureau dans Gmail, si vous utilisez des media queries et affichez/cachez le contenu, la css intégrée ne pourra pas écraser la déclaration inline !important. À la place, vous pouvez utiliser overflow:hidden, comme suit :

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

Dans vos requêtes multimédias intégrées, vous annulerez naturellement ces styles pour révéler la division, puis masquer la version de bureau du contenu.

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

Malheureusement, la propriété height ne fonctionne pas dans Gmail, sinon ce serait une meilleure solution, étant donné que cela crée une section d'espace blanc sous le contenu visible égale à la hauteur de la div.

0 votes

Note : le texte ci-dessus doit être lu "display" et non "disply". J'ai essayé de modifier le commentaire mais stackoverflow ne permet pas les modifications de moins de 6 caractères.

1 votes

@luke THANK YOU ! Pour tous ceux qui lisent ceci dans le futur comme je viens de le faire. Si vous voulez vous débarrasser de cet espace blanc laid, il suffit de faire une hauteur de ligne : 1px ; puis dans votre requête média ajouter dans la hauteur de ligne appropriée. J'ai trouvé que cela fonctionnait mieux sur le TR que sur le div ou le td.

0 votes

À titre d'information, nous avons découvert que l'utilisation de cette méthode pour avoir une version mobile d'un courriel n'était pas idéale, car le transfert du courriel dans Outlook à une autre personne afficherait à la fois le contenu mobile et le contenu de bureau. Désormais, nous essayons de construire des e-mails uniquement en utilisant display:block sur les éléments de tableau (tr, td) afin de les adapter aux écrans mobiles.

29voto

Kiz Points 694

Bien qu'on ait déjà répondu à cette question, j'ai pensé que je pourrais proposer une solution qui a vraiment fonctionné pour moi, au cas où quelqu'un aurait ce problème à l'avenir. Il s'agit d'une combinaison des réponses ci-dessus et d'une autre solution que j'ai trouvée en ligne.

Le problème que je rencontrais concernait Gmail et Outlook. Comme indiqué dans l'OP, le contenu mobile que j'avais ne se cachait pas dans Gmail (Explorer, Firefox et Chrome) ou Outlook (2007, 2010 et 2013). J'ai résolu ce problème en utilisant le code suivant.

Voici mon contenu mobile :

<!--[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]-->

Et voici le 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;
  }

Corrections pour Outlook

Donc, comme vous pouvez le voir dans le code HTML ci-dessus, en enveloppant tout le contenu dans ces balises ;

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

cache le contenu pour les versions d'Outlook que j'ai mentionnées. Pour tous les autres clients de messagerie, le display:none; fonctionne très bien. J'ai également vu que vous pouvez aussi utiliser mso-hide:all pour cacher des choses pour Outlook mais j'ai pensé que c'était un peu plus facile que de placer ce code en ligne.

Corrections pour Gmail

Maintenant pour Gmail, vous pouvez voir que j'ai créé un "spécial". id appelé gmail que j'ai ensuite appliqué à un div à l'intérieur du <td> . J'ai essayé d'innombrables autres méthodes pour utiliser des choses telles que overflow:hidden en ligne et toutes sortes d'autres combinaisons, mais c'est ce qui a fonctionné pour moi.

Donc, pour résumer, le fait d'envelopper le contenu dans la balise <td> dans un <div> qui contient alors le overflow:hidden,width:0 etc puis en écrasant ces styles en donnant à la div un id de, dans mon cas gmail a résolu le problème pour moi.

Quoi qu'il en soit, peut-être que quelqu'un trouvera cela utile à l'avenir !

1 votes

Une réponse extraordinairement bonne à la question. Merci de l'avoir publiée un an plus tard - elle nous a sauvé la mise. L'idiotie du css de l'e-mail Gmail/Outlook a été un véritable fardeau, mais cela a résolu le problème de manière satisfaisante.

0 votes

Vous êtes le bienvenu, je suis heureux que cela ait aidé, trouver ce que c'était était comme trouver une mine d'or !

3 votes

VOUS ÊTES UN GÉNIE !!!! Il faut que ce soit la meilleure réponse votée pour de bon. J'ai essayé environ 7 approches différentes, toutes nécessitant des ajouts massifs de classes à mon css, et dans l'ensemble, ne fonctionnant pas sur tous les clients de messagerie. Cette solution était si simple et a fonctionné !!!!!

24voto

Ross Points 151

Utilisation de display:none !important; résout le problème avec gmail mais il est ensuite ignoré par Outlook 2007 et 2010. J'ai contourné ce problème en utilisant display:none; display:none !important; De cette façon, gmail utilise une version et Outlook 2007 et 2010 utilise l'autre.

1 votes

Vous pouvez utiliser mso-hide: all; pour Outlook 2007-13

7voto

darnzen Points 71

Il a déjà été dit display:none !important; fonctionne, mais personne n'a indiqué un cas d'utilisation pour cela, alors je vais en donner un sur lequel je travaillais lorsque j'ai trouvé cette question et cette solution sur SO.

Je créais un courriel en plusieurs parties avec du texte brut et du html. Dans la source, le html est généré à partir de fichiers modèles, et le texte brut est créé en supprimant les balises de l'e-mail complet.

Pour inclure du texte supplémentaire dans le texte brut qui n'est pas affiché dans le code html, le moyen le plus simple est de l'insérer dans une balise de type <div style="display:none !important> qui sera supprimée lors de la génération du texte en clair. Par exemple, si c'est votre modèle :

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

Le HTML sera rendu comme prévu (pas de tas de =) et le texte brut avec tous les div's supprimés sera :

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

0 votes

Ou encore plus simple : masquer le texte de sauvegarde si le récepteur n'a pas de support html dans son client et voit un tas de html illisible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X