Some of these problems occur because HTML is inherently not designed to be "cascading". Notably, a CSS selector like col.c2 td doesn't work (and td.c2 is invalid).
<style> col.c1 { background-color:red } col.c2 { background-color:green } col.c3 { background-color:blue } </style> <table> <colgroup> <col class="c1" /> <col class="c2" /> <col class="c3" /> </colgroup> <tr> <td>will be red</td> <td>will be green</td> <td>will be blue</td> </tr> </table>
A better way is to use CSS3's :nth-child() syntax. This works better in numerous ways. However, it's not yet supported on most major browsers.
<style> td:nth-child(1) { background-color:red } td:nth-child(2) { background-color:green } td:nth-child(3) { background-color:blue } </style> <table> <tr> <td>will be red</td> <td>will be green</td> <td>will be blue</td> </tr> </table>BUT we can use jQuery to make all the advantages of :nth-child() work in every browser:
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function() { $("td:nth-child(2)").addClass("c2"); // alternatively $("td:nth-child(2)").css("background-color", "red"); }); </script>