I recently found out that I need to use the cellspacing attribute in my table, but I was wondering if I could get it to work only horizontally. I don't want it to vertically spread out, that messes up the layout of my entire page.
-
1possible duplicate of [How to set cellspacing in tables only horizontally](http://stackoverflow.com/questions/12970826/how-to-set-cellspacing-in-tables-only-horizontally) – ivan_pozdeev Jul 10 '15 at 15:43
3 Answers
A better way than setting cellspacing="10"
is to use CSS. You can use the following CSS to target the table's cell spacing.
table {
border-spacing: 10px 0;
}
The first value specifies the horizontal spacing, and the second value specifies the vertical spacing.
-
1The `border-spacing` property is not recognized by IE 8 and earlier. – Jukka K. Korpela Jun 06 '12 at 06:22
-
2This isn't working for me in Chrome. A transparent border as described here does: http://stackoverflow.com/questions/656207/css-horizontal-table-cell-spacing-how – BA TabNabber Nov 22 '16 at 17:17
-
10
-
Yeah, I know it's ugly and abhorrent to the separation of content and styling, but adding spacer (invisible) columns seems the only thing that consistently works across all platforms.
Here I put some empty table data in the first row and gave them a width (in pixels). I made corresponding empty table data in the successive rows. It feels real old school, but it's simple and works.
<table>
<tr>
<td>some content for column 1</td>
<td width="18" />
<td>other content for 2nd visible column (actually column 3)</td>
<td width="18" />
<td>content for 3rd visible column (actually column 5)</td>
</tr>
<tr>
<td><img src="image_for_column 1.png" /></td>
<td />
<td><img src="image_for_column 2.png" /></td>
<td />
<td><img src="image_for_column 3.png" /></td>
</tr>
</table>

- 11,034
- 6
- 68
- 83
-
It’s worth noting that though this works visually, it messes with the content and semantics. A preferred method would facilitate CSS and not interfere with the way other (non-visual) systems interpret the data. – ACJ Nov 05 '18 at 13:54
-
1@ACJ Did you read the first part of the first sentence? I whole-heartedly acknowledge this limitation. But this is included for completeness. And sometimes the extra time taken for setting up a new CSS file isn't worth it--old school. – SMBiggs Nov 12 '18 at 04:05
-
Yes, I did. I felt like providing some emphasis and clarification as this issue is important to me. – ACJ Nov 21 '18 at 10:23
-
1I think this is the only answer for things like HTML tables for emails. – Grallen Apr 01 '22 at 20:13
If you just need to set cell contents apart, use spacing inside cells (and set cellspacing=0
in HTML). This is universally supported by CSS-enabled browsers.
If you really need to separate the cells themselves, so that there is spacing between their borders or their colored background, then border-spacing
would solve the problem, but only in supporting browsers.
Depending on the context, you might even consider simulating cell spacing by putting cell contents in a div
, set to cover the cell area except desired padding, which will then look like cell spacing. You would then set any desired border or background on those div
elements.

- 195,524
- 37
- 270
- 390