Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spacing between thead and tbody

I have a simple html table like this:

<table>   <thead>     <tr><th>Column 1</th><th>Column 2</th></tr>   </thead>   <tbody>     <tr class="odd first-row"><td>Value 1</td><td>Value 2</td></tr>     <tr class="even"><td>Value 3</td><td>Value 4</td></tr>     <tr class="odd"><td>Value 5</td><td>Value 6</td></tr>     <tr class="even last-row"><td>Value 7</td><td>Value 8</td></tr>   </tbody> </table> 

And I would like to style it the following way:

  • header row with a box-shadow
  • whitespace between the header row and the first body row

Box Shadow on Header + Spacing to Body

I have tried different things:

table {     /* collapsed, because the bottom shadow on thead tr is hidden otherwise */     border-collapse: collapse; } /* Shadow on the header row*/ thead tr   { box-shadow: 0 1px 10px #000000; } /* Background colors defined on table cells */ th         { background-color: #ccc; } tr.even td { background-color: yellow; } tr.odd td  { background-color: orange; }  /* I would like spacing between thead tr and tr.first-row */  tr.first-row {     /* This doesn't work because of border-collapse */     /*border-top: 2em solid white;*/ }  tr.first-row td {     /* This doesn't work because of border-collapse */     /*border-top: 2em solid white;*/     /* This doesn't work because of the td background-color */     /*padding-top: 2em;*/     /* Margin is not a valid property on table cells */     /*margin-top: 2em;*/ } 

See also: http://labcss.net/#8AVUF

Does anyone have any tips on how I could do this? Or achieve the same visual effect (i.e. bod-shadow + spacing)?

like image 902
Ben Avatar asked Feb 13 '12 10:02

Ben


People also ask

Does thead have to be before Tbody?

The <thead> must appear after any <caption> or <colgroup> element, even implicitly defined, but before any <tbody> , <tfoot> and <tr> element.

How do you prevent page break between thead and tbody?

Add a wrapper to your table and add a before pseudo-element to it. This element won't actually take up any space (due to the negative margin-bottom), but its height will be used when calculating where to put the page break, forcing the browser to push the table to the next page if it's too close to the bottom.

How do I add a margin in Tbody?

Another way of applying some margin on a <tbody> element is to use a ::before or ::after pseudo element. This way we basically add a new (empty) row which we can use to add some space at the beginning of our <tbody> elements.


2 Answers

I think I have it in this fiddle and I updated yours:

tbody:before {     content: "-";     display: block;     line-height: 1em;     color: transparent; } 

EDIT better & simpler:

tbody:before {     content:"@";     display:block;     line-height:10px;     text-indent:-99999px; } 

This way text is really invisible

like image 52
sinsedrix Avatar answered Oct 13 '22 04:10

sinsedrix


Moreover you can use Zero-Width Non-Joiner to minimize sinsedrix CSS:

tbody:before {line-height:1em; content:"\200C"; display:block;} 
like image 33
user2718944 Avatar answered Oct 13 '22 05:10

user2718944