Có tương đương với CSS max-width hoạt động trong email HTML không?


114

Tôi đang cố gắng tạo một email HTML sẽ hiển thị chính xác trong tất cả các ứng dụng email được sử dụng rộng rãi. Tôi gói toàn bộ email trong một bảng và tôi muốn nó có chiều rộng bằng 98% chiều rộng có sẵn, nhưng không lớn hơn 800 pixel. Như thế này: <table style="width:98%; max-width:800px;">

Nhưng tôi không làm theo cách đó, vì theo Outlook 2007 này không hỗ trợ thuộc tính chiều rộng CSS.

Thay vào đó, tôi đang làm điều này: <table width="98%">

Có cách nào để cũng đặt chiều rộng tối đa mà không cần dựa vào CSS không?


1
Tôi đã cập nhật câu trả lời được chấp nhận cho câu trả lời từ @MarkNugent vì điều đó dường như đã thu hút được sự đồng thuận - ngay cả khi đã quá muộn 4 năm để có ích cho tôi. :)
Tim Goodman

Câu trả lời:


224

Có, có một cách để mô phỏng max-widthbằng cách sử dụng bảng, do đó cung cấp cho bạn cả bố cục đáp ứng và thân thiện với Outlook. Hơn nữa, giải pháp này không yêu cầu nhận xét có điều kiện.

Giả sử bạn muốn tương đương với một ở giữa divvới max-widthcủa 350px. Bạn tạo một bảng, đặt chiều rộng thành 100%. Bảng có ba ô liên tiếp. Đặt chiều rộng của trung tâm TDthành 350(sử dụng widththuộc tính HTML , không phải CSS), và bạn làm.

Nếu bạn muốn nội dung của mình được căn trái thay vì căn giữa, chỉ cần bỏ đi ô trống đầu tiên.

Thí dụ:

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

Trong jsfiddle, tôi cung cấp cho bảng một đường viền để bạn có thể thấy những gì đang xảy ra, nhưng rõ ràng là bạn sẽ không muốn có một đường viền trong cuộc sống thực:

http://jsfiddle.net/YcwM7/


18
Đây là câu trả lời hay nhất ngay đây mọi người ^^^. Bỏ qua câu trả lời được chấp nhận và câu trả lời có điều kiện.
Nick Manning

4
Chỉ để tiết kiệm cho người khác một lúc nào đó, ít nhất một trong những phần tử <td> trống đó là cần thiết, nếu không thì <td> có nội dung sẽ kéo dài để lấp đầy toàn bộ <tr>. Nhưng đây chắc chắn là giải pháp tốt nhất trong số những giải pháp được cung cấp.
Chris Strickland

2
@Phyllis Sutherland Bạn có thể thử để loại bỏ kích thước img inline và thay thế nó bằng cách: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
hãy cẩn thận không thêm các đơn vị vào chiều rộng bên trong như tôi đã làm, nếu không nó không hoạt động! tức là đừng làm width = "350px"
magritte

3
@PhyllisSutherland tìm thấy một sửa chữa cho hình ảnh: <img src="file.jpg" "width="350" alt="" style="display:block;width:100%" /> litmus.com/community/discussions/...
cbron

34

Có một thủ thuật bạn có thể thực hiện cho Outlook 2007 bằng cách sử dụng các nhận xét html có điều kiện.
Đoạn mã dưới đây sẽ đảm bảo rằng bảng Outlook có chiều rộng 800px, không phải chiều rộng tối đa nhưng nó hoạt động tốt hơn so với việc để bảng kéo dài trên toàn bộ cửa sổ.

<!--[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
gợi ý tuyệt vời, nhưng vì nó là một selector id và không phải là một lớp, bạn muốn tiết kiệm một số cách gõ bằng attr chiều rộng trên các yếu tố bảng
Steve Wasiura

Điều đó thật tuyệt. Ngoại trừ một vấn đề, bằng cách đặt chiều rộng, Outlook sẽ không để email thu nhỏ bất kỳ kích thước nào nhỏ hơn kích thước đã cho. Bằng cách không đặt chiều rộng, email sẽ mở rộng ra toàn màn hình. Chọn chất độc của bạn :)
Điều phối viên

13

Câu trả lời ngắn gọn: không.

Câu trả lời dài:

Các định dạng cố định hoạt động tốt hơn cho các email HTML. Theo kinh nghiệm của tôi, tốt nhất bạn nên giả vờ là năm 1999 khi nói đến email HTML. Hãy rõ ràng và sử dụng các thuộc tính HTML (width = "650") nếu có thể trong định nghĩa bảng của bạn, không phải CSS (style = "width: 650px"). Sử dụng chiều rộng cố định, không có tỷ lệ phần trăm. Chiều rộng bảng rộng 650 pixel là một đặt cược an toàn. Sử dụng CSS nội tuyến để đặt thuộc tính văn bản.

Vấn đề không phải là những gì hoạt động trong "email HTML", mà là sự đa dạng của các ứng dụng email và khả năng hiển thị HTML của họ bị hạn chế (và đôi khi cố tình như vậy trong trường hợp của Gmail, Hotmail, v.v.).


Vâng, đó là những gì tôi mong đợi, nhưng tôi nghĩ là tôi sẽ hỏi.
Tim Goodman,

35
Đặt chiều rộng cố định là 650 sẽ làm cho email của bạn trông khủng khiếp trong các ứng dụng email trên thiết bị di động.
DrewB

6
-1: Trông thật khủng khiếp vì các thiết bị di động có kích thước tương đối nhỏ trong thế giới thực. Điều này có nghĩa là nếu không phóng to và xoay, văn bản trong thiết kế của bạn sẽ nhỏ đến mức khó đọc. Hãy xem hướng dẫn Campaign Monitor Thiết kế email đáp ứng .
Karl Horky

1
-1 cũng bởi vì tôi cũng vừa xử lý vấn đề này trong ứng dụng khách di động và việc có chiều rộng cố định chính xác là vấn đề của tôi.
Brian FitzGerald,

7
Năm là 2015. Thiết bị di động ở khắp mọi nơi. Bạn đang nói rằng hãy quên đi các thiết bị di động vì một triển vọng ngu ngốc? Tôi nói, hãy quên đi cái nhìn. Và mọi sản phẩm tồi tệ khác của Microsoft.
refaelio

5

Đến bữa tiệc hơi muộn, nhưng điều này sẽ hoàn thành. Tôi để ví dụ ở mức 600, vì đó là những gì hầu hết mọi người sẽ sử dụng:

Tương tự như ví dụ của Shay ngoại trừ điều này cũng bao gồm chiều rộng tối đa để hoạt động trên phần còn lại của các máy khách có hỗ trợ, cũng như phương pháp thứ hai để ngăn việc mở rộng (truy vấn phương tiện) cần cho Outlook '11.

Trong đầu:

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

Trong cơ thể:

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

Đây là một ví dụ khác về điều này đang được sử dụng: Email xác nhận đơn hàng đáp ứng cho thiết bị di động?


0

Đây là giải pháp phù hợp với tôi

https://gist.github.com/elidickinson/5525752#gistcomment-1649300 , cảm ơn @ 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>

Bạn có thể cung cấp một ví dụ ngắn gọn hơn, có rất nhiều thứ trong đó mà không được yêu cầu để giải quyết các câu hỏi
EDL

@EdL ý tưởng là đó cách ngắn gọn nhất để thân thiện với email max-width. Toàn bộ điều này sẽ thay thế <div style="max-width: ...px">...</div>. Đối với email tôi đang làm việc khi tôi tìm thấy ý chính này, đây là giải pháp duy nhất giúp mọi thứ trở nên ổn định trong Outlook 2010, 2013 và 2016.
henry

@henry Tôi đã đề cập nhiều hơn đến tất cả các thuộc tính kích thước phông chữ cellpadding, v.v. Hình ảnh là một thứ khó khăn vì trừ khi bạn chỉ định width = "500" làm thuộc tính, trong đó 500 là chiều rộng tính bằng pixel, triển vọng sẽ làm cho hình ảnh ở kích thước đầy đủ ( wrt. tệp hình ảnh) điều này thường dẫn đến chiều rộng cố định.
EdL

Để nguyên điều này vì nó không phải là mã của tôi — Tôi chỉ trích dẫn nó từ ý chính — nhưng tôi đã biến nó trở thành wiki cộng đồng. Tôi tin rằng nó cần thiết để xác định một cách rõ ràng 0px paddings và margins cũng như 0 cellpaddingcellspacing. Có thể việc chỉ định line-heightsẽ hoạt động như một sự thay thế cho font-sizeviệc điền vào những khoảng thời gian heightkhông được tôn trọng (tôi muốn kiểm tra nó trên tất cả các trs và sau đó trên tất cả các tds để xem chính xác vị trí cần thiết). @EdL nếu bạn có thể nhận được một giải pháp nhẹ hơn hoạt động tốt và điều này sẽ tuyệt vời - vui lòng đăng nó ở đây và trong ý chính được liên kết đó
henry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.