Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

CSS

Styles not being inherited on mobile or in certain emails (Dependency on "bgcolor"?)

I was working on some email templates today and noticed something weird. The styles I had defined in my style-sheet for the templates appeared just fine when viewing the templates in the browser and in our desktop version of Outlook, but when I sent out the test versions, the headers (#header) and footers (#footer) were different colors than had been defined in the style-sheet.

After a while, I figured out that, in the HTML, there were "bgcolor" attributes applied to the containers with those IDs ( < td > ). I tried to remove them, so that the styles from the style-sheet would take over in their place, but they didn't. When I removed the bgcolor attributes from the HTML, the containers just didn't show up at all.

Ultimately, I ended up just setting the bgcolor to the same colors as defined in the CSS, but I would still like to know why this is. Is it just that some platforms are still dependent on the bgcolor attribute, or could it be something to do with the way they handle the style-sheet? I don't think it has to do with the path to the style-sheet, because in the other environments, it loaded the styles just fine.

I have included the CSS code below, as well as the HTML from one of the templates.

Any assistance or insight would be greatly appreciated.

Also, just as a side-note, the "table[class=??], td[class=??]" code that makes up the first big bit of the CSS code, I am not sure what it does. It was just there from the person who built the templates originally.

Thanks!

/* email-template.css*/

/* Mobile-specific Styles */
@media only screen and (max-width: 660px) {
table[class=w0],td[class=w0] {
    width:0!important
}

table[class=w10],td[class=w10],img[class=w10] {
    width:10px!important
}

table[class=w15],td[class=w15],img[class=w15] {
    width:5px!important
}

table[class=w30],td[class=w30],img[class=w30] {
    width:10px!important
}

table[class=w60],td[class=w60],img[class=w60] {
    width:10px!important
}

table[class=w125],td[class=w125],img[class=w125] {
    width:80px!important
}

table[class=w130],td[class=w130],img[class=w130] {
    width:55px!important
}

table[class=w140],td[class=w140],img[class=w140] {
    width:90px!important
}

table[class=w160],td[class=w160],img[class=w160] {
    width:180px!important
}

table[class=w170],td[class=w170],img[class=w170] {
    width:100px!important
}

table[class=w180],td[class=w180],img[class=w180] {
    width:80px!important
}

table[class=w195],td[class=w195],img[class=w195] {
    width:80px!important
}

table[class=w220],td[class=w220],img[class=w220] {
    width:80px!important
}

table[class=w240],td[class=w240],img[class=w240] {
    width:180px!important
}

table[class=w255],td[class=w255],img[class=w255] {
    width:185px!important
}

table[class=w275],td[class=w275],img[class=w275] {
    width:135px!important
}

table[class=w280],td[class=w280],img[class=w280] {
    width:135px!important
}

table[class=w300],td[class=w300],img[class=w300] {
    width:140px!important
}

table[class=w325],td[class=w325],img[class=w325] {
    width:95px!important
}

table[class=w360],td[class=w360],img[class=w360] {
    width:140px!important
}

table[class=w410],td[class=w410],img[class=w410] {
    width:180px!important
}

table[class=w470],td[class=w470],img[class=w470] {
    width:200px!important
}

table[class=w580],td[class=w580],img[class=w580] {
    width:280px!important
}

table[class=w640],td[class=w640],img[class=w640] {
    width:300px!important
}

table[class*=hide],td[class*=hide],img[class*=hide],p[class*=hide],span[class*=hide] {
    display:none!important
}

table[class=h0],td[class=h0] {
    height:0!important
}

p[class=footer-content-left] {
    text-align:center!important
}

#headline p {
    font-size:30px!important
}

.article-content,#left-sidebar {
    -webkit-text-size-adjust:90%!important;
    -ms-text-size-adjust:90%!important
}

.header-content,.footer-content-left {
    -webkit-text-size-adjust:80%!important;
    -ms-text-size-adjust:80%!important
}

img {
    height:auto;
    line-height:100%
    outline:none;
    text-decoration:none;
    display:block
}
}

/* Client-specific Styles */
#outlook a {
    padding:0
}

/* Force Outlook to provide a "view in browser" button. */
body {
    width:100%!important
}

.ReadMsgBody {
    width:100%
}

.ExternalClass {
    width:100%;
    display:block!important
}

/* Force Hotmail to display emails at full width */
/* Reset Styles */
/* Add 100px so mobile switch bar doesn't cover street address. */
body {
    background-color:#ececec;
    margin:0;
    padding:0
}

img {
    outline:none;
    text-decoration:none;
    display:block
}

a img {
    border: none;
}

br,strong br,b br,em br,i br {
    line-height:100%
}

h1,h2,h3,h4,h5,h6 {
    line-height:100%!important;
    -webkit-font-smoothing:antialiased
}

h1 a,h2 a,h3 a,h4 a,h5 a,h6 a {
    color:#004631!important
}

h1 a:active,h2 a:active,h3 a:active,h4 a:active,h5 a:active,h6 a:active {
    color:#004631!important
}

/* Preferably not the same color as the normal header link color.  There is limited support for psuedo classes in email clients, this was added just for good measure. */
h1 a:visited,h2 a:visited,h3 a:visited,h4 a:visited,h5 a:visited,h6 a:visited {
    color:#004631!important
}

/* Preferably not the same color as the normal header link color. There is limited support for psuedo classes in email clients, this was added just for good measure. */
table td,table tr {
    border-collapse:collapse
}

.yshortcuts,.yshortcuts a,.yshortcuts a:link,.yshortcuts a:visited,.yshortcuts a:hover,.yshortcuts a span {
    color:#000;
    text-decoration:none!important;
    border-bottom:none!important;
    background:none!important
}

/* Body text color for the New Yahoo.  This example sets the font of Yahoo's Shortcuts to black. */
/* This most probably won't work in all email clients. Don't include code blocks in email. */
code {
    white-space:normal;
    word-break:break-all
}

#background-table {
    background-color:#ececec
}

/* Webkit Elements */
#top-bar {
    border-radius:6px 6px 0 0;
    -moz-border-radius:6px 6px 0 0;
    -webkit-border-radius:6px 6px 0 0;
    -webkit-font-smoothing:antialiased;
    background-color:#004631;
    color:#fff
}

#top-bar a {
    font-weight:700;
    color:#fff;
    text-decoration:none
}

#footer {
    border-radius:0 0 6px 6px;
    -moz-border-radius:0 0 6px 6px;
    -webkit-border-radius:0 0 6px 6px;
    -webkit-font-smoothing:antialiased
}

/* Fonts and Content */
body,td {
    font-family:"Lato",Helvetica,Arial,san-serif
}

.header-content,.footer-content-left,.footer-content-right {
    -webkit-text-size-adjust:none;
    -ms-text-size-adjust:none
}

/* Prevent Webkit and Windows Mobile platforms from changing default font sizes on header and footer. */
.header-content {
    font-size:12px;
    color:#fff
}

.header-content a {
    font-weight:700;
    color:#fff;
    text-decoration:none
}

#headline p {
    color:#fff;
    font-family:'Georgia',serif;
    font-size:36px;
    text-align:center;
    margin-top:0;
    margin-bottom:30px
}

#headline p a {
    color:#fff;
    text-decoration:none
}

.article-title {
    font-size:18px;
    line-height:24px;
    color:#5C6942;
    font-weight:700;
    margin-top:0;
    margin-bottom:18px;
    font-family:"Lato",Helvetica,Arial,san-serif
}

.article-title a {
    color:#7a2426;
    text-decoration:none
}

.article-title.with-meta {
    margin-bottom:0
}

.article-meta {
    font-size:13px;
    line-height:20px;
    color:#ccc;
    font-weight:700;
    margin-top:0
}

.article-content {
    font-size:13px;
    line-height:18px;
    color:#444;
    margin-top:0;
    margin-bottom:18px;
    font-family:"Lato",Helvetica,Arial,san-serif
}

.article-content a {
    color:#004631;
    font-weight:700;
    text-decoration:underline
}

.article-content img {
    max-width:100%
}

.article-content ol,.article-content ul {
    margin-top:2px;
    margin-bottom:24px;
    margin-left:19px;
    padding:0
}

.article-content li {
    font-size:13px;
    line-height:20px;
    color:#444
}

.article-content li a {
    color:#004631;
    text-decoration:underline
}

.article-content p {
    margin-bottom:15px
}

.footer-content-left {
    font-size:12px;
    line-height:15px;
    color:#fff;
    margin-top:0;
    margin-bottom:15px
}

.footer-content-left a {
    color:#fff;
    font-weight:700;
    text-decoration:none
}

.footer-content-right {
    font-size:11px;
    line-height:16px;
    color:#fff;
    margin-top:0;
    margin-bottom:15px
}

.footer-content-right a {
    color:#fff;
    font-weight:700;
    text-decoration:none
}

#footer {
    background-color:#69813A; /* This is the correct color for the footer, and shows properly in browser on desktop, but on mobile, it is a navy blue */
    color:#fff
}

#footer a {
    color:#fff;
    text-decoration:none;
    font-weight:700
}

#permission-reminder {
    white-space:normal
}

#street-address {
    color:#fff!important;
    white-space:normal
}

#header {
    background-color:#69813A; !important
}
    <!--[if gte mso 9]>
    <style _tmplitem="722" >
    .article-content ol, .article-content ul {
       margin: 0 0 0 24px;
       padding: 0;
       list-style-position: inside;
    }

    <![endif]-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>WWU | Visit Confirmation</title>
    <meta name="viewport" content="width=320, target-densitydpi=device-dpi">
    <link rel="stylesheet" type="text/css" href="//www.williamwoods.edu/email-template/email-template.css">
</head>
<body>
<table id="background-table" border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody><tr>
        <td align="center" bgcolor="#ececec">
            <table class="w640" style="margin:0 10px;" border="0" cellpadding="0" cellspacing="0" width="640">
                <tbody><tr><td class="w640" height="20" width="640"></td></tr>

                <tr>
                    <td class="w640" width="640">

                    </td>
                </tr>



<!--START OF THE TEXT HEADER-->
                <tr>
                <td id="header" class="w640" align="center" bgcolor="#69813A" width="640">

    <table class="w640" border="0" cellpadding="0" cellspacing="0" width="640">
        <tbody><tr><td class="w30" width="30"></td><td class="w580" height="30" width="580"></td><td class="w30" width="30"></td></tr>
        <tr>
            <td class="w30" width="30"></td>
            <td class="w580" width="580">
                <div id="headline" align="center">
                    <p>
                        <a href="http://www.williamwoods.edu">
                        <img src="http://www.williamwoods.edu/_files/images/WWAllWhiteBox.png" width="300" height="auto" style="margin: auto;"></a>
                    </p>
                </div>
            </td>
            <td class="w30" width="30"></td>
        </tr>
    </tbody></table>


</td>
                </tr>
<!--END OF THE TEXT HEADER-->          

                <tr><td class="w640" bgcolor="#ffffff" height="30" width="640"></td></tr>
                <tr id="simple-content-row"><td class="w640" bgcolor="#ffffff" width="640">
    <table class="w640" border="0" cellpadding="0" cellspacing="0" width="640">
        <tbody><tr>
            <td class="w30" width="30"></td>
            <td class="w580" width="580">
                <repeater>

                    <layout label="Text only">
                        <table class="w580" border="0" cellpadding="0" cellspacing="0" width="580">
                            <tbody><tr>
                                <td class="w580" width="580">
                                    <p class="article-title" align="center"><singleline label="Title">Visit Registration Confirmation</singleline></p>
                                    <div class="article-content" align="left">
                                        <multiline label="Description">
                                            <p>Thank you, $$txtVisitorName$$!</p>
                                            <p>We have received your request and an admission counselor will be in contact with you shortly. If you have any questions, 
                                            please feel free to email <a href="mailto:admissions@williamwoods.edu">admissions@williamwoods.edu</a> or call us at 1-800-995-3159.
                                            </p>                                            
                                            <p>We look forward to meeting you!</p>
                                            <p>Sincerely,</p>
                                            <p>WWU Admissions Staff</p>
                                        </multiline>
                                    </div>
                                </td>
                            </tr>
                            <tr><td class="w580" height="10" width="580"></td></tr>
                        </tbody></table>
                    </layout>                                      

                </repeater>
            </td>
            <td class="w30" width="30"></td>
        </tr>
    </tbody></table>
</td></tr>
                <tr><td class="w640" bgcolor="#ffffff" height="15" width="640"></td></tr>

                <tr>
                <td class="w640" width="640">
    <table id="footer" bgcolor="#69813A" class="w640"  border="0" cellpadding="0" cellspacing="0" width="640">
        <tbody><tr><td class="w30" width="30"></td><td class="w580 h0" height="30" width="360"></td><td class="w0" width="60"></td><td class="w0" width="160"></td><td class="w30" width="30"></td></tr>
        <tr>
            <td class="w30" width="30"></td>
            <td class="w580" valign="top" width="360">
                <img editable="true" label="Image" src="http://www.williamwoods.edu/_files/images/icons/favicon-96x96.png" class="w101" border="0" width="101">

            </td>
            <td class="hide w0" width="60"></td>
            <td class="w160" valign="top" width="160">
            <p id="street-address" class="footer-content-right" align="right">William Woods University<br/>
One University Avenue<br/>
Fulton, Mo 65251<br/>
1.800.995.3159</p>
            </td>
            <td class="w30" width="30"></td>
        </tr>
        <tr><td class="w30" width="30"></td><td class="w580 h0" height="15" width="360"></td><td class="w0" width="60"></td><td class="w0" width="160"></td><td class="w30" width="30"></td></tr>
    </tbody></table>
</td>
                </tr>
                <tr><td class="w640" height="60" width="640"></td></tr>
            </tbody></table>
        </td>
    </tr>
</tbody></table></body></html>

Just fyi (for you or anyone looking at this question), the attribute selectors at the top of your CSS (table[id=whatever]) were there because Yahoo! didn't properly render media queries, but it wasn't designed to handle attribute selectors. So if you put your CSS in as normal (.header or #footer) then Yahoo! would render it, even if it was only supposed to work on a mobile device based on your media query. Use attribute selectors though, and Yahoo! would ignore it since it didn't recognize it.

This has been resolved though and Yahoo! now correctly handles media queries so you can stop using them if you are sick of all the typing.

Thanks for the insight, Nicholas Tillman; I figure I'll probably just leave them be. It's just the one style-sheet after all. :)

Thanks!

2 Answers

You can't really depend on stylesheets with email. The engines that render emails are not nearly as standards compliant as the engines that render webpages. Unfortunately, that means that you've got to code emails like we coded webpages in the 90s: with tables, inline styles, and hacks for different email clients.

It can be a pain in the butt.

Fortunately, tools have been developed that take a little bit of the edge off. One kind of tool converts stylesheets to inline styles. Automattic makes one that is fairly active, juice.

Good luck (and, condolences)!

Thanks!

I noticed in your question that you say that you don't think the problem was the "path to the stylesheet".

Actually, that is without a doubt a large part of the problem. External stylesheets should never be used in HTML emails. You can embed your styles at the top (pretty much necessary for the mobile styles of responsively designed emails) but for desktop email clients, you should never depend on them.

Nearly every major desktop email client (Gmail, Outlook.com, Yahoo!, etc.) strips or otherwise mangles even embedded stylesheets in emails. Mobile emails fair much better with them so long as you are using the native mail app for the device. External stylesheets are almost a lost cause across the board.

To save a lot of frustrating debugging time, use an inliner tool like Jeff Jacobson-Swartfager recommended or just code your email with the styles inline from the get-go. Some broadcast email providers' software feature a tool that will take your embedded stylesheet and convert it to inline styles when it is sent, but if you aren't sure it will do that, use an inliner tool. Mailchimp makes a simple to use one as well.