Perhaps it is because my mind is still trapped in the world of tables, but, regardless of what I do, I can’t seem to be satisfied with CSS layout.
CSS either needs an excellent tutorial for fluid (not pixel based) layout using the current model, or it needs to implement one of the two major models for layout: tables, packing. While I enjoy the flexibility CSS offers, not being able to place particular portions of a document into a predetermined grid makes layout — layout as we have always known it, at least — impossible.
The table method, employed by pre-CSS browsers was replaced because it mixed content with layout. While I agree that the separation of these entities is a good thing, I still desire interesting looking layout, which requires this level of flexibility. The packing method, employed by various graphical toolkits like GTK and TK, works as well, if not better than, tables for layout. However, this isn’t supported in pre-CSS browsers, and isn’t currently in the CSS spec, so it is doubtful that it will occur.
Absolute positioning in CSS (if it worked in all browsers) is promising, however, still not flexible enough. I need a way to say that a particular element should show up below or above another element without having to nest elements simply for layout purposes (as that defeats the purpose of CSS to begin with). I need to be able to do this positioning without relying on pixels. Even relying on pixels would be okay, if different units of measurement could be added together. An example of this: I have a header running across the top of the page, and I would like to place another element immediately below it. I know the header is “1ex” tall with “2ex” worth of padding and a “2px” border on the bottom. I should be able to position an element at “0 + 3ex + 2px”. However, even being able to do addition of different units can cause problems when text wraps onto the next line and you have no method of knowing that that occurred.
All in all, while the current CSS model can be FORCED to operate correctly, it either requires using markup for layout, decreases available functionality, or doesn’t perform as desired with browser windows of varying size and fonts that are sized by the user.