Remove spacing between table cells and rows

CssHtml TableHtml Email

Css Problem Overview


I'm designing an HTML email template, which forces me to use tables. In the code below, I'm having trouble (1) removing the spacing below the placeholder image and (2) removing the space between the image and the caption. Here's a screenshot of how it looks in Chrome 15 on OS X 10.6.8.:

enter image description here

<!DOCTYPE HTML>
<html>
<head>
    <title>Email Template</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
    <table style="border: 1px solid #b50b32; margin: 30px auto; width: 600px; padding: 0; border-spacing: none;" cellspacing="0" cellpadding="0">
        <tr>
            <td id="main" style="background-color: #f2f2f2;">
                <h2 style="color: #b50b32; font-family: 'Lucida Grande', Arial, sans-serif; font-size: 22px; font-weight: normal; padding: 15px; margin: 25px 0; background-color: #fff;">Major headline goes here</h2>
                <table class="main-story-image" style="float: left; width: 180px; margin: 0 25px 25px 25px;">
                    <tr><td style="padding: 0; border: 1px solid red;"><img src="placeholder.jpg" width="180" height="130" style="border: none; margin: 0; padding: 0;" alt="Placeholder" /></td></tr>
                    <tr><td style="padding: 0; border: 1px solid red;"><p class="image-caption" style="background-color: #bebebe; color: #333; font-family: 'Lucida Grande', Arial, sans-serif; margin: 0; padding: 5px;">Caption.</p></td></tr>
                </table><!--/.main-story-image-->
                <p style="margin: 0 50px 25px 25px;">Lorem ipsum dolor sit amet.</p>
                <p><a href="">Click here to read more </a></p>
                <div style="clear: both;"></div>
            </td><!--/#main-->
        </tr>
    </table>
</body>
</html>

The red borders are there only to show the outlines of the cells. I don't want them there in the final version.

Css Solutions


Solution 1 - Css

Add border-collapse: collapse into the style attribute value of the inner table element. You could alternatively add the attribute cellspacing=0 there, but then you would have a double border between the cells.

I.e.:

<table class="main-story-image" style="float: left; width: 180px; margin: 0 25px 25px 25px; border-collapse: collapse">

Solution 2 - Css

It looks like the DOCTYPE is causing the image to display as an inline element. If I add display: block to the image, problem solved.

Solution 3 - Css

I had a similar problem. This helps me across main email clients. Add:

  • attributes cellpadding="0", cellspacing="0" and border="0" to tables
  • style border-collapse: collapse; to tables
  • styles padding: 0; margin: 0; to each element
  • and styles font-size: 0px; line-height: 0px; to each element which is empty

Solution 4 - Css

You have cellspacing="0" twice, try replacing the second one with cellpadding="0" instead.

Solution 5 - Css

Nothing has worked. The solution for the issue is.

<style>
table td {
    padding: 0;
}
</style>

Solution 6 - Css

If you see table class it has border-spacing: 2px; You could override table class in your css and set its border-spacing: 0px!important in table; I did it like

table {
      border-collapse: separate;
      white-space: normal;
      line-height: normal;
      font-weight: normal;
      font-size: medium;
      font-style: normal;
      color: -internal-quirk-inherit;
      text-align: start;
      border-spacing: 0px!important;
      font-variant: normal;   }
                 

It saved my day.Hope it would be of help. Thanks.

Solution 7 - Css

Used font-size:0 in parent TD which has the image.

Solution 8 - Css

I had a similar problem and I solved it by (inline)styling the td element as follows :

<td style="display: block;"> 

This will work although its not the best practice. In my case I was working on a old template that had been styled using HTML tables.

Solution 9 - Css

Hi as @andrew mentioned make cellpadding = 0, you still might have some space as you are using table border=1.

Solution 10 - Css

Put display:block on the css for the cell, and valign="top" that should do the trick

Solution 11 - Css

If the caption box is gray then you can try wrapping the image and the caption in a div with the same background color of gray---so a "div" tag before the "tr" tag...This will mask the gap because instead of being white, it will be gray and look like part of the gray caption.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoe MorninView Question on Stackoverflow
Solution 1 - CssJukka K. KorpelaView Answer on Stackoverflow
Solution 2 - CssJoe MorninView Answer on Stackoverflow
Solution 3 - CssPetr HladíkView Answer on Stackoverflow
Solution 4 - CssayypView Answer on Stackoverflow
Solution 5 - CssdrupalView Answer on Stackoverflow
Solution 6 - CssTazView Answer on Stackoverflow
Solution 7 - CssSatish UpadhyayView Answer on Stackoverflow
Solution 8 - CssNJENGAHView Answer on Stackoverflow
Solution 9 - CssVijay KumarView Answer on Stackoverflow
Solution 10 - Cssuser2115923View Answer on Stackoverflow
Solution 11 - CssamhpView Answer on Stackoverflow