Search code examples
emailresponsive-designnewsletteryahoo-mail

How to make responsive email work with yahoo mobile app?


I have created an email template that is tested to work properly on desktop clients like gmail/yahoo/outlook and also tested correct responsive behavior on mobile gmail app. I am using Android/Galaxy S4.

The responsive styles are not effective on yahoo mobile app. Infact, it is not reading the CSS rules from 'style'. Though, desktop chrome set to mobile views (using Inspect -> toggle device toolbar) and logging in to yahoo mail shows the email reading the responsive styles.

Question: Does yahoo mobile app not support responsiveness? Or, does it particularly need additional hacks?


Update: I tried moving the CSS styles from head to body. It then reads the styles. But having styles in the body may not to be a good idea, gmail mobile app now ignores it.


Here is the email code that I am using:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Sample Page</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="x-apple-disable-message-reformatting">
    <style>
        body {
            mso-line-height-rule:exactly;
            -ms-text-size-adjust:100%;
            -webkit-text-size-adjust:100%}
        table, td {
            mso-table-lspace: 0pt;
            mso-table-rspace: 0pt}
        table {
            border-collapse: collapse;
            border-spacing: 0;margin: 0 auto}
        img, a img {
            border:0 none;
            height: auto;
            line-height: 100%;
            outline: none;
            -ms-interpolation-mode: bicubic}
        a[x-apple-data-detectors] {
            color: inherit !important;
            text-decoration: none !important;
            font-size: inherit !important;
            font-family: inherit !important;
            font-weight: inherit !important;
            line-height: inherit !important}
        .x-gmail-data-detectors, .x-gmail-data-detectors *, .aBn {
            border-bottom: 0 !important;
            cursor: default !important}
        .a6S {
            display:none !important;
            opacity:0.01 !important}
        img.g-img + div {
            display:none !important}
        .button-link {
            text-decoration: none !important}
        @media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
            .ios-gm-fix {
                min-width: 375px !important;}
        }
    </style>
    <style>
        #email-container {
            border:1px solid #CCC;
            border-radius:3px;
            border-collapse:separate}
        .desktop-view {color:blue}
        .mobile-view {color:#444}
        @media only screen and (max-width: 480px) {
            #email-container-wrap {
                width:100% !important;
                padding:0 !important}
            #email-container {
                border:none;border-radius:0}
            .desktop-view {color:#444}
            .mobile-view {color:blue}
            #email-contents {
                padding:15px 22px !important;
                font-size:16px!important}
        }
    </style>
</head>
<body width="100%" bgcolor="#FFFFFF" style="margin:0 auto;padding:0;height:100%">
    <center style="width=100%;background=#ffffff">
    <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#F0F0F0" class="ios-gm-fix" style="margin:0;width:100%;line-height:100%"><tbody>
        <tr>
            <td align="center" valign="top" width="100%" style="padding:0;margin:0;height:100%;width:100%">
                <div id="email-container-wrap" style="width:600px;max-width:600px;padding:25px 0;margin:0 auto">
                    <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" id="email-container" style="background-color:#ffffff"><tbody>
                        <tr>
                            <td align="center" valign="top" width="100%" id="email-contents" style="font-family:arial,helvetica,sans-serif;font-size:13px;line-height:18px;color:#333333;padding:20px 35px">
                                <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%"><tbody>
                                    <tr>
                                        <td align="center" valign="top" width="100%" id="email-header">
                                            <table  role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%"><tbody>
                                                <tr>
                                                    <td align="left" valign="top" width="100%"></td>
                                                </tr>
                                            </tbody></table>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td align="center" valign="top" width="100%" id="email-body">
                                            <table  role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%">
                                                <tbody>
                                                    <tr>
                                                        <td align="left" valign="top" width="100%">
                                                            <table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%"><tbody>
                                                                <tr>
                                                                    <td align="left" valign="top" width="100%" class="desktop-view" style="padding:3px 0 16px">
                                                                        <span>On Desktop, there will be a border and gray background on all sides.</span>
                                                                    </td>
                                                                </tr>
                                                                <tr>
                                                                    <td align="left" valign="top" width="100%" class="mobile-view" style="padding:3px 0 16px">
                                                                        <span>On Mobile, the border and background will not exist.</span>
                                                                    </td>
                                                                </tr>
                                                            </tbody></table>
                                                        </td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td align="center" valign="top" width="100%" id="email-footer">
                                            <table  role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%"><tbody>
                                                <tr>
                                                    <td align="left" valign="top" width="100%">
                                                    </td>
                                                </tr>
                                            </tbody></table>
                                        </td>
                                    </tr>
                                </tbody></table>
                            </td>
                        </tr>
                    </tbody></table>
                </div>
            </td>
        </tr>
    </tbody></table>
    </center>
</body>
</html>

Solution

  • On Android, Yahoo only supports <style> tags in the <body>, not in the <head>. But Gmail only supports <style> tags in the <head>, not in the <body>. C'est la vie!

    Since we're only dealing with ~20 lines of code (assuming the 2nd <style> tag in your example), you might try duplicating this <style> tag so it appears in both the <head> and <body>. I don't know for certain if this will work, but it's worth testing.