I have a strong belief in HTML that means something. HTML can be viewed as a vessel for delivering content; however, HTML- and especially more so with HTML5- defines a mechanism with which we can not only deliver content, but describe what the content is. This is what is called semantic markup; it is not an obtuse buzzword, but rather an important design methodology.
It is easy to fall into one of two pitfalls: "just get the thing done" and "write the minimal amount of code possible". One is caused by a developer who does not understand (or does not care to understand) the importance of markup; one is caused by a developer who is foregoing semantics in favor of misguided "efficiency" gains, whether personally (writing less code) or for the server (sending less code.) However, in the long run, this serves only as a barrier to maintainance and usability.
There was a large movement towards using
div tags for markup, moving away
from monolithic table-based markup. This was done in order to reduce the
coupling between styles and content, making changes easier, content easier
to consume, and code easier to maintain. It also allowed designs to be fluid,
flowing around the content rather than constraining content into boxes. Instead
of shuffling table cells, we now only have to switch out a class, or in extreme
examples, the order of a few
div containers in order to update a design. This
was an important step forward in the evolution of modern web development.
However, while progressive, divs were found to be meaningless. No reasonable
heirarchy of data could be constructed; a side-bar was virtually indistinguishable
from main content, a site's heading didn't stand out except through primitive
HTML5 then gave us elements such as
aside, and more; new properties and attributes such as input types
and input placeholders; and more (which you can read about in the
W3C Specs and at the excellent
html5 doctor. html5- true html5, not
"marketing buzzword" html5- has a rich and beautiful focus on semantic markup
that allows for clear consumption and maintainance of content.
It is not only html5 that has semantic meaning, though; looking back through
html4 and earlier iterations gives us examples of
hr for splitting content
table for data,
form for form,
a for links. Many of these base
tags are, however, ignored or forgotten in return for generic
built using generic elements, and images are simply
div tags with background
images. We have begun to lose meaning not only to the browsers that consume our
content, but also to ourselves, as developers. With semantic elements, one can
article tag and understand where it begins and ends without following
a chain of generic
div tags; with a
form, one can understand that its
contained inputs are part of a collection to be submitted, rather than a random
cluster of inputs, any of which might be sent out to a server; with an
know it goes somewhere, and with a
button, we know it performs an action.
Semantically relevant code is both code and documentation. With consistency,
we have to write. Instead of coupling our styles to our code, as we may have
coupled our content to tables in the past, let us define code that uses
elements that can describe what the content is. Style a
time element instead
coerced into acting like buttons.
Thus we may reduce our code and provide meaning to our content, while providing a normalized experience to machines who read our content, be they search engines, browsers, or screen readers.
This post is dedicated to my colleague, Tony DeSylva, for whom I wrote this.