Reposted from a discussion on pdxruby.
On Jun 14, 2008, at 3:02 AM, Bill Burcham wrote:
How does one resolve the Absolute Good of semantic HTML against the need for a CSS layout framework?
But I must ask: Semantic to whom? The framework? The browser? The web developer? The user? The user who peers into the HTML page to see how well/poorly it’s constructed?
Semantic HTML has always seemed like a misguided idea. I have no problem with the idea of expressing content semantically, but I’m not sure HTML is the right place to take the fullest advantage of semantic markup. It’s language is too limited, too concrete, and was designed with the analog of printed, mostly textual publications.
And CSS doesn’t help: its generally a one-to-one styling mechanism. It can bridge generic presentation with specific presentation (‘make this header Helvetica’), but it can’t provide more abstract functions: eg, creating a navigation system. This abstraction, I think, is what’s missing in the HTML/CSS universe.
At HTML’s inception, there were two worlds: one of pixel-level object interaction (CD-ROM/multimedia) and one of hypertext (SGML/running text). Tim Berners-Lee chose the latter. Interestingly, early HTML was all semantic: you marked up headings, paragraphs, citations, lists, etc. Here is the original ‘spec’ for HTML.
Most of those elements still function in modern HTML. And in fact this is the only way I’ve been able to keep myself sane and still do web development: use old-style HTML elements (h[1-6], p, em, ul/li, dd/dl/dt) for marking up the text structure, use logical elements (div, span) for defining areas that need special treatment, and very occasionally change the style of elements directly (eg, <p class=”foo”>). I will even check sites using the lynx/links text-mode browsers just to make sure I haven’t made a mess of it all.
Of course, technology has moved on and we’ve solved this in a few ways:
- Domain/content-type/browser detection: Instead of trying to make one perfect HTML/CSS page that properly renders on all browsers, give it up and create pages that are more specific for the user’s purpose. Just go full throttle and be unsemantic and concrete.
- Hold your nose and use a framework: I know this has been my attitude in my recent usage of YUI. Yeah, it looks sucky and is unintuitive, but it works and I know I will never again vent my frustration for ‘hacks modes.’ Of course, I still need a site-specific CSS file, but I find that its content is far simpler and less browser-dependent.
Bill Burcham continued:
Compare doing layout in semantic HTML and CSS to doing layout in Adobe InDesign for instance. I assert that the requirements addressed by the two approaches are roughly equivalent and yet you hardly have to be a high priest to do layouts in InDesign. You just lay things out. Sheesh.
But this is apples and oranges: you’re comparing semantic HTML/CSS with (presumably) non-semantic page layout.
Doing semantic layout in InDesign is actually a total pain. I do a lot of InDesign layouts (these days, probably more than websites), and am often irritated that I have to use “hacks” to, for example, get the first paragraph in a chapter flush left but remaining paragraphs indented. There’s no apparent way to do it other than a special substyle of a the paragraph with no indenting, and manually setting the first paragraph to that substyle. Worse, there’s no way to have the chapter title appear a few picas down on a page without either moving the text box handles, or adding a dummy pre-title line that has the appropriate amount of leading.
InDesign layout seems easier because the end result is just ink on paper; its semantic meaning is implicit in the relationships of the page elements. Your choice of paper size, spacing, line measures, type size, font, etc., all create a meaning (if the design is successful) that the reader understands. The effect is the same regardless of whether you (the designer) create the elements by directly specifying text blocks, fonts, etc., or whether you use InDesign’s XML markup, stylesheets, anchors, etc.
And this gets back to my original point: who is the semantics intended for? All that really matters, in the end, is that the user/reader sees the printed/web page and understands its meaning.