Esiste un equivalente della larghezza massima CSS che funziona nelle e-mail HTML?


115

Sto cercando di creare un messaggio di posta elettronica HTML che verrà visualizzato correttamente in tutti i client di posta elettronica ampiamente utilizzati. Sto avvolgendo l'intera email in una tabella e mi piacerebbe che avesse una larghezza fino al 98% della larghezza disponibile, ma non superiore a 800 pixel. Come questo: <table style="width:98%; max-width:800px;">

Ma non lo sto facendo in questo modo, poiché secondo questo Outlook 2007 non supporta la proprietà di larghezza CSS.

Invece, sto facendo questo: <table width="98%">

C'è un modo per impostare anche una larghezza massima senza fare affidamento sui CSS?


1
Ho aggiornato la risposta accettata a quella di @MarkNugent poiché sembra aver attirato un consenso, anche se è arrivato 4 anni troppo tardi per essermi utile. :)
Tim Goodman

Risposte:


225

Sì, c'è un modo per emulare max-widthutilizzando una tabella, offrendoti così un layout reattivo e compatibile con Outlook. Inoltre, questa soluzione non richiede commenti condizionali.

Supponi di volere l'equivalente di un centrato divcon max-widthdi 350px. Crei una tabella, imposta la larghezza su 100%. La tabella ha tre celle di seguito. Imposta la larghezza del centro TDsu 350(utilizzando l' widthattributo HTML , non CSS), e il gioco è fatto.

Se vuoi che il tuo contenuto sia allineato a sinistra anziché centrato, lascia fuori la prima cella vuota.

Esempio:

<table border="0" cellspacing="0" width="100%">
    <tr>
        <td></td>
        <td width="350">The width of this cell should be a maximum of 
                  350 pixels, but shrink to widths less than 350 pixels.
        </td>
        <td></td>
     </tr>
</table> 

Nel jsfiddle do un bordo al tavolo in modo che tu possa vedere cosa sta succedendo, ma ovviamente non ne vorresti uno nella vita reale:

http://jsfiddle.net/YcwM7/


18
Questa è la migliore risposta proprio qui tutti ^^^. Ignora la risposta accettata e la risposta condizionale.
Nick Manning

4
Solo per risparmiare un po 'di tempo a qualcun altro, è necessario almeno uno di quegli elementi <td> vuoti, altrimenti il ​​<td> con il contenuto si allungherà fino a riempire l'intero <tr>. Ma questa è sicuramente la migliore soluzione tra quelle offerte.
Chris Strickland

2
@Phyllis Sutherland Potresti provare a rimuovere la dimensione img in linea e sostituirla con:style="max-width: 100%; height: auto; width: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box;"
morespace54

5
fare attenzione a non aggiungere unità alla larghezza interna come ho fatto io altrimenti non funziona! cioè non fare larghezza = "350px"
magritte

3
@PhyllisSutherland ha trovato una correzione per le immagini: <img src="file.jpg" "width="350" alt="" style="display:block;width:100%" /> litmus.com/community/discussions/…
cbron

34

C'è un trucco che puoi fare per Outlook 2007 usando commenti html condizionali.
Il codice seguente assicurerà che la tabella di Outlook sia larga 800 px, non la sua larghezza massima ma funziona meglio che lasciare che la tabella si estenda su tutta la finestra.

<!--[if gte mso 9]>
<style>
#tableForOutlook {
  width:800px;
}
</style>
<![endif]-->

<table style="width:98%;max-width:800px">
<!--[if gte mso 9]>
  <table id="tableForOutlook"><tr><td>
<![endif]-->
    <tr><td>
    [Your Content Goes Here]
    </td></tr>
<!--[if gte mso 9]>
  </td></tr></table>
<![endif]-->
<table>

6
suggerimento eccellente, ma poiché è un selettore di ID e non una classe,
salveresti un

Questo è fantastico. Ad eccezione di un problema, impostando la larghezza, Outlook non consentirà che l'email si riduca di dimensioni inferiori alle dimensioni specificate. Non impostando la larghezza, l'email si espanderà a tutto lo schermo. Scegli il tuo veleno :)
Il coordinatore

13

La risposta breve: no.

La lunga risposta:

I formati fissi funzionano meglio per le email HTML. Nella mia esperienza è meglio fingere che sia il 1999 quando si tratta di e-mail HTML. Sii esplicito e utilizza attributi HTML (larghezza = "650") ove possibile nelle definizioni di tabella, non CSS (stile = "larghezza: 650 px"). Usa larghezze fisse, nessuna percentuale. Una larghezza del tavolo di 650 pixel è una scommessa sicura. Usa CSS in linea per impostare le proprietà del testo.

Non è una questione di ciò che funziona in "email HTML", ma piuttosto la pletora di client di posta elettronica e la loro capacità limitata (e talvolta deliberatamente così nel caso di Gmail, Hotmail, ecc.) Di rendere HTML.


Sì, è un po 'quello che mi aspettavo, ma ho pensato di chiedere.
Tim Goodman

35
L'impostazione di una larghezza fissa di 650 renderà le tue e-mail terribili nei client di posta elettronica mobili.
DrewB

6
-1: sembra terribile perché i dispositivi mobili hanno dimensioni relativamente piccole nel mondo reale. Ciò significa che senza zoom e panoramica, il testo nei tuoi disegni sarà illeggibilmente piccolo. Dai un'occhiata alla guida di Campaign Monitor Responsive Email Design .
Karl Horky

1
-1 anche perché ho affrontato questo problema anche nei client mobili e avere una larghezza fissa era esattamente il mio problema.
Brian FitzGerald

7
L'anno è il 2015. I dispositivi mobili sono ovunque. Stai dicendo di dimenticare i dispositivi mobili per la stupida prospettiva? Dico, dimentica le prospettive. E ogni altro prodotto di merda di Microsoft.
refaelio

5

Un po 'in ritardo per la festa, ma finirà. Ho lasciato l'esempio a 600, poiché è quello che la maggior parte delle persone userà:

Simile all'esempio di Shay, tranne che include anche la larghezza massima per funzionare sul resto dei client che hanno il supporto, nonché un secondo metodo per impedire l'espansione (media query) necessaria per Outlook '11.

Nella testa:

  <style type="text/css">
    @media only screen and (min-width: 600px) { .maxW { width:600px !important; } }
  </style>

Nel corpo:

<!--[if (gte mso 9)|(IE)]><table width="600" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td><![endif]-->
<div class="maxW" style="max-width:600px;">

<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td>
main content here
    </td>
  </tr>
</table>

</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->

Ecco un altro esempio di questo in uso: e-mail di conferma dell'ordine reattivo per dispositivi mobili?


0

Questa è la soluzione che ha funzionato per me

https://gist.github.com/elidickinson/5525752#gistcomment-1649300 , grazie a @ philipp-klinz

<table cellpadding="0" cellspacing="0" border="0" style="padding:0px;margin:0px;width:100%;">
    <tr><td colspan="3" style="padding:0px;margin:0px;font-size:20px;height:20px;" height="20">&nbsp;</td></tr>
     <tr>
        <td style="padding:0px;margin:0px;">&nbsp;</td>
        <td style="padding:0px;margin:0px;" width="560"><!-- max width goes here -->

             <!-- PLACE CONTENT HERE -->

        </td>
        <td style="padding:0px;margin:0px;">&nbsp;</td>
    </tr>
    <tr><td colspan="3" style="padding:0px;margin:0px;font-size:20px;height:20px;" height="20">&nbsp;</td></tr>
</table>

Potresti fornire un esempio più conciso, ci sono molte cose che non sono necessarie per risolvere la domanda
EdL

@EdL l'idea è che sia il modo più conciso per ottenere l'email-friendly max-width. L'intera cosa sostituirebbe <div style="max-width: ...px">...</div>. Per l'e-mail a cui stavo lavorando quando ho trovato questa sintesi, questa era l'unica soluzione che ha fatto sembrare le cose a posto in Outlook 2010, 2013 e 2016.
Henry

( rispetto al file immagine) generalmente si ottengono larghezze fisse.
EdL

Lasciando così com'è perché non è il mio codice - lo sto solo citando dall'essenza - ma ne ho fatto un wiki della comunità. Credo che sia necessario specificare esplicitamente 0px paddings e margins così come 0 cellpaddinge cellspacing. È possibile specificare line-heightche funzionerebbe come un sostituto per font-sizeriempire i tempi heightnon rispettati (vorrei testarlo su tutti tre poi su tutti tdper vedere esattamente dove è necessario). @EdL se riesci a ottenere una soluzione più leggera che funzioni così come questa sarebbe fantastico - per favore pubblicalo qui e in quella sintesi collegata
henry
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.