The state of HTML5

The W3C recently announced “HTML5 Definition Complete” which has left me feeling even more awkward than usual. Perfection is an unreachable target but the announcement feels premature because so much of what we do in the browser is still just a hack, building websites should be like assembling an engineered construction kit but it feels like we’ve swapped bolts for a sticky plaster. Early un-guided development has been superseded with working group harmonisation (of sorts) but even HTML5 editor Ian Hickson admits, “The Web technology stack is a complete mess”. Is the Open Web Stack really worthy of the surrounding hype and dependency on it?

Backwards compatibility and robustly fail-safe nature of HTML have been great enablers; sharing digitally without technical knowledge has changed the World, but using the same tools to build sophisticated interfaces can seem crazy. HTML was designed to markup documents (HTML5 does this better than ever) and is quite unsuited to building dynamic applications — even WML was stateful! The superb one-man effort to speculate an HTML6 specification shows our little markup lexicon is small and powerful enough to whip into even smarter shape but such changes would certainly take a decade or more.

Even the features that are designed in public with wide review end up implemented and used before they're "done", and once they're used they can't be changed

Ian Hickson, HTML5 Doctor

Unlike HTML new CSS and JavaScript features have been adopted hastily due to browser vendors pushing their prototype innovations into general releases—the obvious downside to which is that competitors can feel forced to add support too before it is ready. Creating sandboxed environments or switching on experimental support as part of developer tools should not be the exception, we need time to test a proposal before using it for real.

CSS3 has provided a long-list of decorative features that have saved us countless hours image slicing and nesting empty elements, so now that the fluff has been established we’re getting to grips with important issues. We’re learning quickly how and when to use media queries effectively but struggling to specify an effective layout mechanic to truly separate content and presentation. Most of us are still hacking layouts by corrupting floats but flexbox has almost fully landed and grid layout is next, although taming the mindfuck of screen size, resolution and aspect ratio is a huge battle to fight.

JavaScript is designed to be extensible and makes the Web Stack a base to re-appropriate. Frameworks such as AngularJS are increasingly using the HTML document as a vessel for injected content written in a more appropriate manner. Unfortunately for standardistas it doesn’t look like web components are going to provide the tidy API developers crave, XHTML modularisation looked like a solid foundation but unfortunately what is being worked on seems—at best—awkward. Web components sound great (and I’m sure they will be one day) but in their current form, tricky.

The messiness of the web stack is a strong argument for building platform specific applications but there is an increasingly interwoven software ecosystem evolving. Apps on iOS and Android are often no more than thin clients but Open webOS, Ubuntu, Firefox OS, BlackBerry 10, Gnome and Windows 8 are all utilising HTML5 technologies at various levels of their architecture.

I think we are approaching an equilibrium between native code and the open web stack; HTML is an open vocabulary for semantic content, CSS is expressive and portable and JavaScript is the glue between the layers. Write once, deploy anywhere is not yet feasible but a shared skill set is revealing itself.