Advancing the Web – Part 1 of 2
CSS 3 and HTML 5 are somewhere down the chute, and will eventually be widely supported. Both are highly anticipated. Both address a lot of today’s problems in the web design world. But neither is good enough.
I know I’m not the first to bang on this drum. In fact, I’m basically about to parrot back the biggest complaints. The reason for this is that I haven’t seen the problems of both specs brought to light in the same place, which seems like a rather glaring mistake; they need to work hand-in-hand. Solving the issues of only one does not fix the whole problem.
HTML 5 — new limits on the same problem
The most noticeable problem with HTML today is found in the battle for semantics. We champion the need for semantic markup, but when it really comes down to it, we can only do half of the job: even the best designs still need a handful of abritrary
<div> tags here or there. We have to, because the CSS only works if we give have a hook to hang it on, and a truly semantic markup doesn’t give us enough.
The next version of HTML promises to correct this difficulty, and, to an extent, it does. It introduces more meaningful tags like
<nav>. These are a huge improvement on having a page with a dozen meaningless
<div> tags. But as John Allsopp has pointed out, these only address the problems of today, with little to no thought given for the future of the web.
What happens when need new trends in web design emerge, making common some other practice, such as a site map in the footer? What tag does that get? We have no idea what the web of tomorrow will need. And HTML 5 makes no room for that. Some day we will hit the limits of
<header>, just like we’ve hit the limits of
<div> today. Then what? Grumble and complain and wait around for the next long-overue spec? The next generation of HTML needs to be extensible by the designer, so that he can be tho one to define the constraints of his design, not some arbitrary spec.
CSS 3 — fun toys and not much more
Okay, I’ll admit it: I can’t wait to start using rounded corners, @font-face, and multiple backgrounds without care or difficulty once the CSS 3 spec is widely-supported. We’ve been hacking in these things for years, and it will be a breath of fresh air to see them finally become effortless. Hallelujah.
Now, the grocery list of things CSS 3 does not do (most of these are taken straight from Matt Wilcox):
- multiple columns of equal height
- set an unknown number of containers to equal width, summing to a maximum, defined width
- any sort of vertical grid (at least not when its contents are dynamic)
- move elements to a position relative to another element
In short: layout. Coding with a meaningful HTML source order, independent from the design of the page? That’s a dream. A designer has to do backflips to keep the HTML source order the way he knows it should be. It’s amazing what we’ve been able to do with floats and absolute positioning, but we all know it takes far more work to pull off than it should.
CSS styles elements, but it does not lay them out. Not really. It can’t do basic math; it can’t traverse nor control the DOM; it doesn’t allow you to set variables — I mean, after all these years, we still have to type in the same 6-digit hex code three dozen times in our stylesheets to color several elements the same. Isn’t it fun when we decide to change that color later? And that doesn’t even touch on the power variables would give over layout controls. We need a layout system, and CSS is not it.
Time for a change
We need to rethink this thing. The new specs are a step forward for now, but they are both ultimately only plugging holes when we need a new dam. So how do we start over without breaking the web? Well, I have an idea. And I am looking forward to sharing it.
Part 2 coming soon.