How to increase the distance between table columns in HTML?

183,198

Solution 1

There isn't any need for fake <td>s. Make use of border-spacing instead. Apply it like this:

HTML:

<table>
  <tr>
    <td>First Column</td>
    <td>Second Column</td>
    <td>Third Column</td>
  </tr>
</table>

CSS:

table {
  border-collapse: separate;
  border-spacing: 50px 0;
}

td {
  padding: 10px 0;
}

See it in action.

Solution 2

Set the width of the <td>s to 50px and then add your <td> + another fake <td>

Fiddle.

table tr td:empty {
  width: 50px;
}
  
table tr td {
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <td>First Column</td>
    <td></td>
    <td>Second Column</td>
    <td></td>
    <td>Third Column</td>
  </tr>
</table>

Code Explained:

The first CSS rule checks for empty td's and give them a width of 50px then the second rule give the padding of top and bottom to all the td's.

Solution 3

If I understand correctly, you want this fiddle.

table {
  background: gray;
}
td {    
  display: block;
  float: left;
  padding: 10px 0;
  margin-right:50px;
  background: white;
}
td:last-child {
  margin-right: 0;
}
<table>
  <tr>
    <td>Hello HTML!</td>
    <td>Hello CSS!</td>
    <td>Hello JS!</td>
  </tr>
</table>

Solution 4

A better solution than selected answer would be to use border-size rather than border-spacing. The main problem with using border-spacing is that even the first column would have a spacing in the front.

For example,

table {
  border-collapse: separate;
  border-spacing: 80px 0;
}

td {
  padding: 10px 0;
}
<table>
  <tr>
    <td>First Column</td>
    <td>Second Column</td>
    <td>Third Column</td>
  </tr>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
  </tr>
</table>

To avoid this use: border-left: 100px solid #FFF; and set border:0px for the first column.

For example,

td,th{
  border-left: 100px solid #FFF;
}

 tr>td:first-child {
   border:0px;
 }
<table id="t">
  <tr>
    <td>Column1</td>
    <td>Column2</td>
    <td>Column3</td>
  </tr>
  <tr>
    <td>1000</td>
    <td>2000</td>
    <td>3000</td>
  </tr>
</table>

Solution 5

You can just use padding. Like so:

http://jsfiddle.net/davidja/KG8Kv/

HTML

   <table>
        <tr>
            <td>item1</td>
            <td>item2</td>
            <td>item2</td>
        </tr>
    </table>

CSS

 td {padding:10px 25px 10px 25px;}

OR

 tr td:first-child {padding-left:0px;}
 td {padding:10px 0px 10px 50px;}
Share:
183,198
idude
Author by

idude

Updated on July 08, 2022

Comments

  • idude
    idude almost 2 years

    Let's say I wanted to create a single-rowed table with 50 pixels in between each column, but 10 pixels padding on top and the bottom.

    How would I do this in HTML/CSS?

  • Mohammad Areeb Siddiqui
    Mohammad Areeb Siddiqui almost 11 years
    you didn't stated you want it for some columns!
  • Andres Scarpone
    Andres Scarpone almost 9 years
    The downside here is if you're striping rows or coloring them on hover: browsers won't extend the background color across the border space.
  • Ani Menon
    Ani Menon about 8 years
    This is not the best answer: It leaves a space in the left of first column: Refer this
  • Pwnball
    Pwnball over 7 years
    not relevant, also you should not use !important without a very good reason to do so.
  • png
    png over 5 years
    The fiddle attached to your post looks incomplete
  • Timmmm
    Timmmm over 5 years
    This makes a big white block. Wouldn't it be more sensible to use padding-left or margin-left instead?
  • Bruno Eberhard
    Bruno Eberhard over 2 years
    The block doesn't have to be #fff. 'transparent' works fine.