Join James Williamson for an in-depth discussion in this video Structuring content with HTML5, part of CSS: Page Layouts.
- View Offline
In our last movie we extended the meaning of our content through using class and id attributes. Prior to HTML5, that was almost all we had in the way of adding semantic value to our code. However, HTML5 introduces a whole new set of elements that help us write more specific code, and we're going to check that out by updating our homepage to be HTML5. Now, to do that, I have the index.htm file open. It's actually found in the 02_07, but it's just continuing our last exercise, so if you still have that file open, you can just go ahead and modify that one as well.
That's not a problem. Now, a little bit about HTML5 before we start. I know a lot of people are saying, okay, is HTML5 ready? Can we go ahead and use this as of this recording? I am recording this early in 2012. The answer is yes, we certainly can. We most certainly can use HTML5, especially the semantic elements. Maybe some of the more complicated API stuff, like canvas and things like that, you might want to wait until it matures a little bit more within the browsers. But the structural elements, absolutely, because there's an easy way to support the structural elements in older browsers. And as we start working in some of the labs, I will discuss that.
But for this movie, just focus on the fact that the HTML5 elements that we're going to be using help us organize and add meaning to our code. Okay. So the first thing I am going to do, I am just going to go through each one of these elements, and I am going to talk about whether or not an HTML5 element would be better choice for this. And the first element, when I look at this, it's pageHeader. It says, "Header content goes here," and we do have a header element in HTML5, so I am going to change this from a div tag to a header--and I have to remember to do that for both the opening and the closing tag. Now, we also are faced with the choice of should we remove the id and class attribute, because this is descriptive? It says, hey, this is header content.
And in some cases the answer to that is going to be, yes, and in some cases it is going to be no. In this case, the answer is going to be no, because elements may have headers. So, for example, you might have an article or a section that also has a header. So in that sense this might not be the only header on the page, and so because of that, I do still want to identify this as being the page's header, so I will keep the id for this particular element. I will do the same thing for nav. We do have a navigational element, n-a-v, so Nav. And I have to remember to change both the opening and the closing tag and, again, I'm going to leave the id in there as well.
Now, the two elements that we've used so far, header and nav, they're very descriptive in terms of what type of content that is. This is the header of the container that I am inside of. Navigation says this is a navigational aid, some type of menu, some type of construct like that. But we also have some more general-purpose content tags that we can use. So, for example, the content region right here that's sort of surrounding all three of these elements, I am going to change that from being a div tag to being a section. Now, a section of content basically says that this is grouped content, it all belongs together, but it's not something that I want to stand by itself, not freestanding.
Think about it this way: Would you syndicate this entire section? In this case, no, I would not. Now, I'm looking at my banner and I'm thinking, are there any of the HTML5 structural elements that can help me out here? And the answer to that is no. Sometimes div is exactly the right choice. In this case, I just need a generic grouping of content to say, hey, this is a banner. It doesn't need to be any specific section. It doesn't need to be an article, that sort of thing. But that's the other thing that I need to point out about these HTML5 structural elements is that if you look at the page as a table of contents, as maybe an outline that you could create, each of those particular tags creates a node within that outline, or an item in the table of contents.
The banner, I don't really-- it's not important enough for that. I don't want it to do that. So in this case I'm using sort of a generic div tag for that. Now, for the home article, Article content goes here, that sort of gives away the tag I want to use for that. I am just going to use article. Now, the article element, what that does is it basically surrounds a grouping of content that can stand on its own, that if it was read all by itself or syndicated by itself or exported out by itself would make sense and would just live on its own outside of this page. In this case, this article certainly would do that, so I am going to choose article.
Now, I am going to make another change here now. I am going to keep that id, but the element below it, the sidebar, we have a brand-new element that isn't necessarily called sidebar; it's called an aside. And I am going to replace, not only the div tag itself, but the id as well with just a generic aside tag. All right! So what is an aside? Well, an aside tag is related content. It's content that relates to siblings within its container. So in this case, because this article and the aside are inside this section, it's basically saying that this content and the aside relates to this article content without actually being a part of the article.
Now, we could, if we wanted to, give it an id. It wouldn't hurt to say sidebar or related content or something like that, but in this case I think the aside works all by itself without having to necessarily need an identifier for it. And as you can tell, a lot of these are judgment calls. Now, the next thing I am going to do is I am going to go down to my very last div tag and I am going to replace it with a footer. Once again, because the different articles and sections can have footers, so we might end up with, depending upon how complex our page gets, we might end up with multiple footers, so I am going to keep that id on there as well, all right. I am going to go ahead and save that page.
So now we have our basic page structure, and it's a lot richer in terms of its organization and semantic content. Now, I know one movie really isn't enough to really appreciate what HTML5 can do for your site, so if you're intrigued by this, I recommend going out and reading the HTML5 specification, which you can find on w3.org. Or you can go to the WHATWG homepage which is whatwg.org, WHATWG, if you want to read through the specification. And if you're interested in looking at a few more titles of this in the lynda.com Online Training Library, I have an HTML5 First Look title and an HTML5 Structure and Semantics course that might be worth checking out as well. All right! So in our next movie, we're going to finish up by taking a closer look at how page structure and layout relate to each other as we explore building the internal structure of our page.
- Reviewing the box model
- Calculating em and percentage values
- Controlling how elements display
- Creating fixed, fluid, and responsive layouts
- Structuring content with HTML5
- Floating elements
- Using relative, absolute, or fixed positioning
- Defining column spacing
- Creating grid-based assets and layouts
- Considering mobile-design-specific issues
- Working with multi-column text
- Enhancing page design CSS Sprites