Exploration

Archive: 11 January 2005

Recently I was doing some table styling for a client and ran into what I can only call tabular weirdness. There were two different things that I stumbled across, and interestingly, they were the kinds of problems you wouldn’t be likely to encounter in layout tables. These would come up much more often in data tables.

In the first case, the general idea was to put some space between the tables and the surrounding material, but as these were data tables, they came with captions. So I of course put the caption text in caption elements. That’s when things started to get inconsistent.

To be more precise, the problems began after I left Safari to check the page in other browsers.
In Safari, you see, the caption’s element box is basically made a part of the table box. It sits, effectively, between the top table border and the top margin. That allows the caption’s width to inherently match the width of the table itself, and causes any top margin given to the table to sit above the caption. Makes sense, right? It certainly did to me.

However, according to section 17.4 of CSS2.1 and the figure that accompanies it, the caption sits entirely outside the table’s box, and that includes the table’s margin. The two are still tied together by the generation of an anonymous box, but the upshot is that if you give the table left and right margins, then the caption does not follow suit. If you give the table a top margin, it pushes the caption away from the table.
This is the behavior evinced by Firefox 1.0, and as unintuitive as it might be, it’s what the specification demands.

The third piece of strangeness was found in IE/Win. What I’d done was simply said that some cell borders should be solid—nothing more complicated than border-bottom: 1px solid. The idea was that it would, as borders do, pick up the foreground color of the cell, but IE/Win had other ideas. As best I could tell, the borders were a light gray. You can see it happen in the testcase I constructed to create the images in this entry. Explicitly specifying a border color fixes the problem, of course, but it was a bit of weirdness I thought I’d pass along in case anyone runs into the same thing.