Matthias and I were talking about website ‘templating’ — that is, making Web pages parameterised on the content.
We weren’t discussing the technical rationale behind it — constructive laziness is axiomatic — but how best to accomplish a separation of concerns between contributors. For example, frequently we co-operate with companies or individuals that specialise in design. Typically we want to impose a logical boundary so we can’t mess with their design and they can’t mess with our .. whatever bit we are doing.
Naturally, this is not a novel or uncommon goal and there are the soi disant standards XSLT and CSS that provide for just this thing. We’ve found that XSLT can be useful, but since it is a transformation language, it is too easy to cross the boundary of what appears versus how it appears. That leaves CSS.
So is CSS the right place to draw the line? If we provide the dynamic content and boilerplate as immutable HTML, can the designer do everything they want to?
As the CSS Zen Garden demonstrates, a great deal of a Web page’s appearance can be controlled with CSS — which is, after all, the idea; however, the Zen Garden creators concede that it requires some otherwise superfluous markup to get this range of control. There has to be some give and take between strictly semantic markup and markup that is amenable to styling. Plone‘s default templates do a decent job of this: without the CSS stylesheets the pages are still easy to follow. Modulo a few compromises with the form of the HTML, then, CSS can go a long way.
There are some things that CSS as it’s currently implemented won’t do. Briefly: it can’t reorder content, and in most cases it can’t replace or insert content (there’s also some kinds of layout it doesn’t provide for yet — multi-column flowed text, for example). For things like form design these are crucial.
On the other hand, form design really is part of the user interface, and not the content; so perhaps something like XForms can supplement CSS to cover all the bases.