Reuse and Recycle: A Brief Introduction to the New HTML5 Semantic Elements

This reuse and recycle series is going to be my attempt to reuse some of the material I’ve got laying around. I originally created this stuff for other projects. Since those projects won’t see the light of day, you guys get a bunch of cool content without too much (new) effort on my part.

Cool. On with the show.


New semantic elements

Since they’re of interest to the broadest audience- anyone who makes websites has to use markup- the  new semantic elements, like header, footer, section, and aside have likely had the greatest adoption of any of the new HTML5 features. The design of many of these was based on common usage patterns identified during a web census. For an obvious example the common pattern of id="header" and id="footer" patterns found across the web turned into standalone header and footer elements.

Others elements like aside, time and figure, were logical additions and enhancements to the existing roster of HTML elements.

The code sample below illustrates a sample HTML5 document. It starts with the simplified HTML5 doctype. While this isn’t strictly a semantic element it’s still worth pointing out. This was designed to be the simplest doctype possible that would trigger browsers to render the page in what’s referred to as standards mode. Indicating that a page is in standards mode instructs the browser to render it based on the various specifications that rule the web. This is a legacy of the broken CSS implementations seen in browsers like Internet Explorer and Netscape Navigator 4.0. When browser vendors recognized that rendering as close to standards as possible was a good thing, they had to do something to allow the pages that were rendered according to those broken implementations to still function. For those pages, they invented quirks mode- a mode which embraces the funky, broken things that browsers used to support. The rest of us have lived in standards mode ever since.

Following that, you’ll also see slightly simplified versions of the html and meta charset elements. The more interesting elements are found in the body. There, you’ll see four new elements: header, footer, article and time. The first three replace very common div ids and classes, describing typical page elements representing a site header, site footer and a typical content article. time defines a human readable element that can be styled and scripted with CSS and then an associated datetime attribute which allows for defined,  programmatic access to the underlying time data.

<html lang="en"> 
  <head>
    <meta charset="utf-8">
    <title>A Sample HTML5 Document</title>
    <meta name="description" 
      content="This is a  sample of an HTML5 Document, containing sever new semantic elements">
  </head>
  <body>
    <header>
      <h1>HTML5 is where it's at.</h1>
    </header>
    <article>
      <header>
        <h1>We Love  Semantic Elements</h1>
      </header>
      <p>This post  illustrates several of the new HTML5 semantic elements.</p>
      <p>They're  cool</p>
      <footer>
        <p>Posted at <time  datetime="2012-08-29">the end of August, 2012</time>
by <a  href="https://htmlcssjs.wpengine.com/" rel="me">Rob  Larsen</a></p>
      </footer>
    </article>
    <footer>
      <p>&copy; <a  href="https://htmlcssjs.wpengine.com/" rel="me">Rob  Larsen</a></p>
    </footer>
  </body>
</html>

Use of the new semantic elements is becoming quite common. While they don’t do anything special with these new elements, most browsers "support" them right now. The only exception is in older versions of Windows® Internet Explorer® which simply ignore unknown elements.  By default, you can’t style them or script them. Thankfully libraries like Modernizr and the HTML5Shiv snippet smooth the way for cross-browser use of the new elements in older versions of IE by using a tiny piece of code that celverly introduces those elements to the browser so that IE will learn to take notice of them.

For those of you into that sort of thing, Paul Irish offers an interesting history of this vital piece of programming in his blog post "The Story of the HTML5 Shiv"

I’m Not Dead. I’m Just Resting. Actually, I’m Not Resting. I’m Just Busy.

Hi. Remember me?

Me neither.

Sorry. I’ve been busy. I’ve got a big project at work that’s taken up a bunch of my time and a new book project has kicked off at the exact same time. Holy cow.


Some news. My book with Manning has been canceled. The project had some unforeseen hiccups and some scheduling issues and we ended up canceling the contract. I’m bummed that it didn’t work out because I think writing about the mobile space would have been a lot of fun.

I’ll see if I can reuse some of the material here.

This new book is more than enough to make up for that one. Hopefully I’ll be able to give you full details sooner rather than later.


I’m still hiring like crazy. If you’re a serious JavaScript developer in Boston, New York City, Bangalore or Gurgaon/Noida, then I’m the guy you need to talk to.

On that front, we now have 11 guys, only 2 of which were there when I started last October. If I’m lucky we’ll be up to 15 or 20 by the end of the year. That’s pretty cool.


I’m looking for help updating the documentation on the ant build script. I started to build out some of the docs myself, but I’d love some help building out some of the content to make sure people with less experience on the infrastructure side are able to get up and running smoothly.


more, soon.

Hopefully.

Oh Yeah… It’s Out. You’d Think I Would Have Mentioned That Before.

Strangely I posted some book updates last week and forgot to mention that Professional jQuery has been out for a couple of weeks now.. I haven’t seen it yet, but I like to know that it’s out there. Looking back on my work, I think it’s actually pretty good. Normally my own writing makes me cringe, but this stuff is still pretty good.

For those of you keeping track, my contribution was Chapters 10-14. Cesar Otero basically set up the basics of jQuery, and then I came along and talked about fancy stuff, like code optimization (Chapter 10: Writing Effective jQuery Code, Chapter 11: jQuery Template, and Chapter 13: Advanced Asynchronous Programming with jQuery Deferred,) plugin development (Chapter 12: Writing jQuery Plugins) and unit testing (Chapter 14: Unit Testing with QUnit.)

Bits and Bobs (Book Updates, the H5BP Ant Build Script, CanvasJS and My First Six Months at Sapient)

Time to share some random updates.

Mobile Web App in Practice

My Manning book has shifted tracks slightly. It was originally going to be a cookbook. It’s now part of Manning’s In Practice series so the title has changed to reflect that. With that slight adjustment out of the way we’re heading into serious production mode. For what it’s worth, my contribution is about 1/2 done at this point. The other authors are a little bit behind me, but they’ll start to crank soon. I’ll be sure to update once I have some solid dates.

Project Z

I won’t call it Project X since I worked on one of those already and I don’t want to confuse anyone that previously heard me talk about that behemoth. I signed a contract for another book project a few weeks ago. That’s in the planning stage right now. So much so I’m not even sure of the final title just yet. What’s interesting is that it’s a revised edition of a popular title by another author, so once we get the title sorted out and I can talk about it it’s going to be exciting.

I think it’s going to be a great project.

Sapient

Six months in, Sapient is going well. I’m enjoying myself personally and in terms of the big picture things are really starting to fall into place. I’ve got two excellent JavaScript engineers starting on my team in Bangalore this month. We’re really trying to build out a great team in India so it feels good to have found two strong guys to anchor our efforts over there.

What I’m trying to do now is build out the team here in North America. The focus is here in Boston, but I don’t think I’d turn our nose up at someone in New York or Toronto, for example. In Boston I’m looking for both senior and mid level people who are interested in building nutty JavaScript applications using bleeding edge technology. For example, my current project has me hacking away at both Raphael and D3. Fun times. If you’re an experienced front end engineer who’s tired of working on marketing sites and want to expand your horizons with some real application work, lemme know. I’d love to hear from you.

Also, I’m not a bad guy to work for (unless everyone is lying to me.)

CanvasJS

Call this a soft-alpha. I’ve been working (along with Bob Holt and Marc Neuwirth) on a little Canvas helper library called CanvasJS.

There are currently two areas of focus:

  • Chaining any method that doesn’t return an explicit value is chainable.
  • API Enhancements These range from new concepts (getting the boundingBox of the last operation, getting the currentPos (x and y) of the ‘cursor’,) missing methods (circle, rectangle) to convenience methods (canvas properties are now getter/setter methods.)

Additionally, I’m thinking it would be cool to offer polyfills for certain features that might have been missed in implementation or might be new to the specification.

Marc and I have both used it on projects at this point so I feel like it’s probably okay to talk about at this point. I’m going to buckle down and finish up the loose ends for a decent release. That’s basically documentation and a few API loose ends.

Here’s what the code looks like:

var ctx = new Canvas( &quot;ctx&quot; );           
ctx.reset();          
for ( var i = 0; i&lt;1000; i++ ){
  var color = 'rgb(0,' + Math.floor(255 - i/7) + ',' +  Math.floor(255 - i/100) + ')';
  ctx.beginPath()
     .line({
        x:.4*i,
        y:.4*i,
        angle: i, 
        distance:i * .40 
      })
     .strokeStyle(color)
     .stroke();
} 

And here it is in action.

I think it’s kind of cool.

H5BP Ant Build Script

Finally, we’ve been busy as hell on the Ant Build Script. In just the past couple of weeks we’ve simplified the way we handle concatenation (thanks dholth!) and added Less CSS (thanks Chris Rowe!) support. I’ve been really happy with the project since it’s split from the main HTML5 Boilerplate repo. We’ve got over 400 watchers and over 60 forks, which isn’t too shabby- we’re working our way up the “shell” rankings on github (we’re coming for you wemux). Which isn’t to say we don’t have a lot to do. We do. It’s just fun to watch the progress and feel like the project still has some good traction, even on its own.

My Presentation and Some Photos from the Redefining Perspectives Event in New Delhi

I did another version of HTML5 From the Front Lines (download: ppt and pdf.) It was well received. Judging by the 45 minute (!!!) question and answer session alone it was one of the best presentations I’ve ever done.

The Sapient team that put on the event was phenomenal.

Here are a couple of photos.

And here’s proof I was in India.