HTML email. Everyone's first and last love.
I've built an table-based email that has a background image with text overlay as a 'hero' module. I used a background image on a div w/ inline CSS. Works great everywhere except Outlook 2010/2013, and Android Gmail native app.
Did android gmail app stop supporting background images?
Even this didn't work... bulletproof sample(backgrounds.cm) to illustrate and litmus says no go on outlook and android gmail app.
<table>
<tr>
<td background="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQNR9_Ru7wFZQLYHFXkeobjz0VoSFcC6-ieN7yWBa0dsnHhvZ8-IPSmpKw" bgcolor="#7bceeb" width="580" height="240" valign="top">
<!--[if gte mso 9]>
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:580px;height:240px;">
<v:fill type="fill" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQNR9_Ru7wFZQLYHFXkeobjz0VoSFcC6-ieN7yWBa0dsnHhvZ8-IPSmpKw" color="#7bceeb" />
<v:textbox inset="0,0,0,0">
<![endif]-->
<div>
Please work, please, darn it
</div>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
Good question. There's a lot of conflicting information about this topic.
For instance, this link suggests to inline all CSS, whereas this link suggests to embed all styles in the head. And even further - if this link is correct, Gmail's e-mail preprocessor strips sketchy-looking CSS from the email body altogether:
Gmail doesn't allow backgrounds (mostly). If you include any reference to a URL, your entire declaration will be ignored. For example:
background: #000; /*This will be accepted */
background: #000 url(http://www.test.com/test.jpg); /* This entire line will be ignored */
Anyway, I had a similar issue involving a background image not working on a <table> element, which I resolved* by way of adding a class to my table ...
<table class="table">
... with an accompanying stylesheet declaration:
<style>
.table {
background-image: url(https://www.example.com/image.jpg/);
}
</style>
I also added duplicate references to the image both via the background-image CSS property, and the background HTML attribute (because god knows what the Gmail preprocessor is doing).
<table class="table" background="https://www.example.com/image.jpg/" style="background-image: url(https://www.example.com/image.jpg/);">
*This won't work for Outlook, as Outlook doesn't support background images at all.
A couple of other ideas for your case: make sure the link is actually up and make sure the server is correctly configured to externally serve whatever kind of image this is supposed to serve up.
If all else fails, maybe you could try using a URL which resolves directly to an image. Gmail might strip all of that out it it makes the determination that it looks too sketchy.
I create a quiz application for android using phonegap framework, The first page of application contains a sign up form, i want to get user information. my code is
<table class="m">
<tr>
<td class="left">Name:</td>
<td class="right"><input class="t" type="text"/></td>
</tr>
<tr>
<td class="left">Image:</td>
<td class="right"><input class="t" type="text"/></td>
</tr>
<tr>
<td class="left">Email:</td>
<td class="right"><input class="t" type="text"/></td>
</tr>
<tr>
<td class="left">Phone:</td>
<td class="right"><input class="t" type="text"/></td>
</tr>
</table>
But when i click on the text field the android keyboard appears on the screen and also it changes the height of my layout, finally the first input field is lifted up and not visible to user
How can i fix this problem
I believe your html codes are too simple, may be it should be a little bit more complicated. In my case, I put the table inside the div tag, and set the width and height of the div by JavaScript according to the screen width and height of different phones and browsers.
Also, the font-size are set at a ratio with respect to the screen width so that actual font size seen by the user is approximately the same for different phone.
then, use the scrollheight of the div to make sure the user can see the focused input textbox when it is being edited.
i want to use drag and drop function in phonegap android application.
I tried it in all ways but its not working.
i used this
<script>
$(document).bind('pageinit', function() {
$( "#sortable" ).sortable();
});
i included all the necessary files there but still its not working
i want to use drag and drop on table row
<table style="width:100%">
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
</table>
in website i.e in web browser its working fine but on mobile application its not working.
Please help me out for this.
If you have been using jquery.ui it will work only on PC browsers, and wouldn't respond to touch. It you want to make it responsive to touch as well, you just need to include jQuery UI Touch Punch, in your head section after jQuery UI. And it should work fine. You can first test your app in Chrome simulator for various devices using ( Ctrl + Shift + I ) and selecting the desired device.
Hope this helps. Please mark as answer if this answers you.
I'm designing an email and I got a problem with autofit feature of the gmail app in Android and iPhone.
The email is doing well in other clients.
To prevent the auto, I've tried so far:
Setting max-width and min-width on table / wrapper
add meta viewport like this one:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
None of these are working.
Do you have an idea?
I was having the same problem. I added min-width to, not only the table, but the column (td) tag as well. This seemed to overwrite Gmail's auto fit feature.
Below is an example of how I implement this. I found the answer from this forum: https://www.emailonacid.com/forum/viewthread/566/#827
<table width="590" height="900" border="0" cellpadding="0" cellspacing="0" style="margin:0 auto; min-width:590px;">
<tr>
<td style="font-size: 1px; line-height: 1%; mso-line-height-rule: exactly; min-width:295px;">
<a href="#">
<img style="display:block;border:0px;line-height:50%;" src="example.jpg" width="295" height="900" alt="">
</a>
</td>
<td style="font-size: 1px; line-height: 1%; mso-line-height-rule: exactly; min-width:295px;">
<a href="#">
<img style="display:block;border:0px;line-height:50%;" src="example.jpg" width="295" height="900" alt="">
</a>
</td>
</tr>
</table>
As you can see, I set the table to a min-width of 590px; and each column (td) has a min-width of 295px. The same as the image size.
I'm struggling against this problem at the moment, and the thing I'm planning to test next, is taking a "Mobile First" tack to designing the emails. I'm going to design the emails for width of 320-480px and use media queries to make the larger for desktop clients instead of designing for 600px wide and making it smaller. I hope that this will make the emails look great in the GMail App where media queries are not supported.
I just heard of two resources that seem pretty good, check out:
lit.ms/KISSresources and www.responsiveemailresources.com
I am having problems with the auto resize feature of the android browser. The widths on my site are going a bit haywire when the device is in portrait mode.
What I would like to do is
Have the same version of the site for both desktop and mobile users.
Allow the user to zoom in and out as they please.
I currently have the following in my head
<meta name="viewport" content="width=1100">
I found the following blog post which describes my problem.
This is definitely caused by the auto-fit layout
("kLayoutFitColumnToScreen" in the Android WebKit source code). Just
try the test with auto-fit disabled and everything is rendered
correctly (at least on my Android device).
The auto-fit mode on Android seems to shrink certain elements' width
without affecting their positioning, or the positioning of other
elements. So if you have a containing block with width: 1000px and
text that spans 100% of that width, the container may remain 1000px
wide but the text inside it will wrap at the screen width.
http://www.quirksmode.org/blog/archives/2009/09/css_width_unrel.html
Is there a way to stop this autofit mode from kicking in? I don't want to disable zooming.
Update:
I am still searching for a solution if anyone knows of one.
Have found someone with the same problem (although they are using tables)
Spanned columns collapsing on Android web-browser (when using auto-fit pages)
http://code.google.com/p/android/issues/detail?id=22447&can=4&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
I have been experiencing this problem and found a solution that works for me.
I have one main <div> with some nested <div> elements inside. The HTML is very basic. I found that one <div> within my main <div> would wrap its text as if I had double-tapped the text to zoom in on it. This <div> only contained text. This behavior occurred only in portrait orientation, and it corrected after double-tapping or switching orientation.
Since this problem is an Android bug, no CSS or HTML can really fix it. However, the following CSS resolved the problem satisfactorily for me; and I didn't have to turn off "Auto-fit pages":
I added a CSS background-image to the <div>. I just used a transparent, one-pixel PNG as the background.
div { background-image: url(../img/blank.png); }
Just furthering the answers above which worked for me with an important caveat: the redraw time in IE8 makes the 1x1 transparent pixel method unusable on that target on a decent size canvas.
Since CSS can't detect auto-fit, or android browsers (chrome on Android seems fine anyway), my workaround was to
target smaller devices (since IE8 tends to be desktop), and
only target the relevant 'p' tags (autofit only targets some 'p' tags), so if we apply this fix only where it is needed then we keep the redraw performance impact as low as possible.
My workaround (based on Demetic's answer above):
/* work around mobile device auto-fitting */
#media only screen and (max-device-width: 800px) {
#content p {
background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==);
background-repeat:repeat;
}
}
On my website '#content' is where the 'p' tags reside that are being auto-fitted, naturally you'd need to change this. 'body' will work, yes, but the more specific the lower the impact on redraw time.
It may be worth adding in a portrait-only detection mode since auto-fit doesn't seem to be targeted at landscape - but I haven't tested it on enough devices to confirm that this is always true.
I just wanted to confirm that Delbert's solution was the only thing that worked for me. It's not completely apparent as to why this works, but it works. I've done some fairly exhaustive searching on the issue, and the links from Tom's original post seems to include about all there is out there.
For what it's worth, I tried some fairly aggressive attempts at correcting the width of some <p> tags nested deeply within a chain of <div> tags using some of the proposed solutions here:
* { background-color: transparent; } did not work for me.
However, * { background-image: url("/image/pixel.png"); DID work for me (where pixel.png is a 1x1 transparent PNG). I eventually relaxed this to apply only to my nested <p> tags, and found that my paragraphs were finally spanning the intended, correct width.
I also confirmed that the behavior is a result of the "Auto-fit web pages" setting. I do not own an Android, but experienced these issues using the emulator.
Thanks again to Delbert for the tip.
Same problem here. The content within my <p> tags is smushed to left side. No good solution found yet though I've found that if I add a background color to my <p> tag it "fixes" the issue. I'm still trying to find a real fix though since adding a background color is not ideal.
*{background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}
Yes it seems that Android 4.x is in cause. Really annoying because it is the default behaviour !
It completely destroy all my websites...
I didn't found any solution at the moment.
The proper behaviour is to fit the text with the width of your screen when you double tap the area. It seems that this feature is active even when not zoomed.
I simply add a transparent png image as a repeated background. This also works for H1, H2, H3... tags that seem to be plagued by the same narrow-column problem. By using a transparent png, it allows me to still assign a background color or show whatever is behind the element. This is not perfect, but it is the simplest solution I have found that does not rely on any browser-specific hack and seems to work well in all other mobile browsers I have seen.
Although, I have noticed the same behavior on SPAN tags as well, and the above does not seem to work for this element... weird!
give Width in % instead of px, like width:100%;
I have nearly the same problem with p tags and li's they are much smaller then the surrounding container, but only with Android 4.x. With Android 2.3.x and Android 3.x "auto-fit pages" has no negative side effect.
Seems they tried to improve something, but it worked better before, that's annoying.
This appears to be a programming issue with Android. But in your mobile browser under Settings=>Advanced uncheck Auto-fit pages and this can be resolved. But we may not want our users to abide. So for the time being a simple hack as to placing a transparent background image should not be ruled out as a temporary solution. Using Drupal as a framework and Omega as my responsive theme and knowing my layout regions and outer DIVs are set to {display:block width:100%} this drove me nuts for a few minutes. But the transparent image worked nicely.
I set a min-width and a width on the td where my email content lives and is now working fine in Android's gmail app where versions use autofit mode.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Gmail Issue</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="50%" valign="top"></td>
<td width="1100" valign="top" style="min-width:1100px;"></td>
<td width="50%" valign="top"></td>
</tr>
</table>
</body>
</html>
One thing is for sure, the auto-fit 'feature' is causing a lot of gray hair for developers.
I solved the issue by inserting a transparent image, 1 pixel tall and 650 pixels wide (the width of my email) at the very top of my email.
Even with auto-fit enabled my email now renders as it's supposed to.
<table width="100%" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td width="100%" valign="top" bgcolor="#ffffff" style="padding-top:20px">
<!-- HERE'S THE MAGIC -->
<table width="650" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="1">
<img src="spacer.png" width="650" height="1" style="width:650px; height:1px;" />
</td>
</tr>
</table>
<!-- END THE MAGIC -->
<!-- Start Wrapper-->
<table width="650" border="0" cellpadding="0" cellspacing="0">
<tr>
<td >
REST OF EMAIL HERE
</td>
</tr>
</table>
<!-- End Wrapper-->
</td>
</td>
</table>
By adding a background image to your css, auto-fit will be disabled.
Other posters have suggested adding a single pixel transparent background, but you can actually just add an empty background image to the top of your css stylesheet and skip the additional http request and redraw.
div, p {
background-image: url();
}
I have tested it in my emulator and my Galaxy SII and it seems to work the same as adding an actual url.