HTML, CSS and Tables: The Beauty of Data - Embracing CSS and separating "what is what" and "what it looks like"
(Page 6 of 7 )
With MSIE6 and Gecko being released, we are able to completely separate the HTML markup and the presentation.
Instead of repeating the visual information or use a lot of classes in each HTML document, we create a roughly 700 bytes big CSS file and apply it to each of the documents. Instead of classes, we use the element names and use descendant selectors. Changes are done in the CSS exclusively. Removing the classes cuts down our table to 1.3KB and 30 lines of markup.
Creating the desired "hairline" effect of our table requires some CSS skill. A quite robust way of doing it is to define a border on the left and the top for the table, and a border on the right and the bottom for the inner elements like cells and headers in our CSS.
Our CSS:
table {
border:1px solid #000;
border-collapse:collapse;
font-family:arial,sans-serif;
font-size:80%;
}
td,th{
border:1px solid #000;
border-collapse:collapse;
padding:5px;
}
#fn,#dp,#ar{width:58px;}
#fr,#to{width:138px;}
caption{
background:#ccc;
font-size:140%;
border:1px solid #000;
border-bottom:none;
padding:5px;
text-align:left;
}
thead th{
background:#9cf;
text-align:left;
}
tbody th{
text-align:left;
background:#69c;
}
tfoot td{
text-align:right;
font-weight:bold;
background:#369;
}
tbody td{
background:#999;
}
tbody tr.odd td{
background:#ccc;
}
However, to ensure that our lines meet, we need to set the cellspacing attribute in our HTML to 0, and cellspacing is a deprecated attribute for XHTML.
For XHTML documents we can use the border-collapse selector in the CSS to achieve the effect.
Lets take a look, shall we?
Our markup:
<table summary="This table lists all the flights by XYZ Air leaving London today.">
<caption>Flight Schedule</caption>
<thead>
<tr>
<th id="fn" scope="col">Flight Number:</th>
<th id="fr" scope="col">From:</th>
<th id="to" scope="col">To:</th>
<th id="dp" scope="col">Departure:</th>
<th id="ar" scope="col">Arrival:</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="5">Total: 3 flights</td>
</tr>
</tfoot>
<tbody>
<tr>
<th scope="row">BA 3451</th>
<td>Heathrow</td>
<td>Nuremberg</td>
<td>19:20</td>
<td>19:50</td>
</tr>
<tr class="odd">
<th scope="row">BA 1254</th>
<td>Luton</td>
<td>Alicante</td>
<td>19:40</td>
<td>20:50</td>
</tr>
<tr>
<th scope="row">LH 331</th>
<td>Heathrow</td>
<td>Hamburg</td>
<td>20:00</td>
<td>20:20</td>
</tr>
</tbody>
</table>
Next: Our CSS >>
More HTML Articles
More By Chris Heilmann