- Beginner Recipe: How to markup figures and captions using the figure and figcaption elements
- Beginner Recipe: How to markup the date and time using the <time> element
- Beginner Recipe: Make a Native Toggle Widget with the <details> element
- Beginner Recipe: How to Correctly Use the <address> Element
- Beginner Recipe: Highlight Text with the <mark> Element
- Beginner Recipe: Tracking the Completion of a Task with the <progress> Element
- Beginner Recipe: Measuring with the <meter> Element
- Beginner Recipe: How and When to Use the <s> element
- Beginner Recipe: Changes to existing elements
- Recipe: Wrapping links around elements
- Intermediate Recipe: Adding more semantic information with Microdata
- Intermediate Recipe: Using WAI-ARIA with HTML5
- Advanced Recipe: Markup an Article Page with Comments
Beginner Recipe: Changes to existing elements
The <cite> element
The cite element has been tweaked in HTML5. In HTML4 cite allowed content developers to mark up the name of a speaker/author of a quote:
<cite>Julies Caesar</cite> once said, <q>I came, I saw, I conquered.</q>
It is also used inside blockquote, which is technically incorrect in HTML 4, but nonetheless is commonly used:
<blockquote> <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.</p> <cite>A Person who spoke Latin</cite> </blockquote>
However in HTML5, cite represents the title of a work, such as a book, or a song. The HTML5 Specification specifically says that a person's name is not the title of a work.
So as we can use it to mark up a title of work, we could use something like:
<p>One of my favourite books is <cite>The Day of the Jackal</cite> by <b>Frederick Forsyth</b></p>
(The HTML5 Specification suggests using the b element for author names.)
This change in HTML5 to disallow cite from author names has caused a bit of a stir. Well worth a read is http://24ways.org/2009/incite-a-riot by Jeremy Keith which goes into great depth about the issue. To sum it up:
- The cite element in HTMl5 is no longer backward compatible;
- The spec is telling us to use a semantically meaningless element (<b>) to mark up semantically meaningful content
So you have a decision to make – do what the spec says or, as many continue to do, use cite for names. It’s worth keeping an eye on the cite element to see if its definition changes.
The <ol> element
The ol (ordered list) element has been redefined so it now has three acceptable attributes
- start
- reversed
- type
Used in Listing 2.7, the reversed attribute is new to HTML5 and will, when at least one browser chooses to implement it, enable us to reverse a list that counts down to one.
Listing 2.7
<h1>My favorite colors</h1> <ol reversed> <li>Red</li> <li>Green</li> <li>Blue</li> </ol>
This will render like this (no browser currently supports this):
My favorite colors
- 3 Blue
- 2 Green
- 1 Red
The start attribute was deprecated in HTML 4 and so the page would fail validation if start was used. This has proved an annoyance on several occasions for this author and we are glad to tell you that it is now back and perfectly acceptably in HTML5. So if you are required to start an ordered at two then use:
<ol start="2"> <li>here we go</li> .... </ol>
Also back from the dead is the type attribute. Previously if we wanted to change the display of the list types, say to roman numerals (e.g., i, iv, x), we had to use CSS. But we can do this again in the HTML. Take the Listing 2.8 mark up for example:
Listing 2.8
<ol> <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <ol> <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li> <li>Aliquam tincidunt mauris eu risus.</li> <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <ol> <li>Aliquam tincidunt mauris eu risus.</li> <li>Vestibulum auctor dapibus neque.</li> </ol> </li> <li>Vestibulum auctor dapibus neque.</li> </ol> </li> <li>Aliquam tincidunt mauris eu risus.</li> <li>Vestibulum auctor dapibus neque.</li> </ol>
The above code would create this:
- Lorem ipsum dolor sit amet,
consectetuer adipiscing elit.
- Aliquam tincidunt mauris eu risus.
- Lorem ipsum dolor sit
amet, consectetuer adipiscing
elit.
- Aliquam tincidunt mauris eu risus.
- Vestibulum auctor dapibus neque.
- Vestibulum auctor dapibus neque.
- Aliquam tincidunt mauris eu risus.
- Vestibulum auctor dapibus neque.
Using the type attribute, we can change the type of numbering we get on the lists, without the need for CSS. There are five types to choose from:
type="1" = 1, 2, 3,4, 5
type="a" = a, b, c, d, e
type="A" = A, B, C, D, E
type="i" = i, ii, iii, iv, v
type="I" = I, II, III, IV, V
- Lorem ipsum dolor sit amet,
consectetuer adipiscing elit.
- Aliquam tincidunt mauris eu risus.
- Lorem ipsum dolor sit
amet, consectetuer adipiscing
elit.
- Aliquam tincidunt mauris eu risus.
- Vestibulum auctor dapibus neque.
- Vestibulum auctor dapibus neque.
- Aliquam tincidunt mauris eu risus.
- Vestibulum auctor dapibus neque.
Using the different types, in our content we could refer to item "1.b.ii" if you needed to, rather than "1.3.2". Browsers will correctly implement the type attribute, but at the time of writing, it causes a validation error.
The <dl> element
In HTML4, dl was a "definition list", which should have contained a term and then a definition, but its own definition and use was never very clear and so was misused or ditched in favor of another element.
In HTML5 it has been repurposed as a description or association list. It is easier to get an understanding of this element by diving into some examples. In Listing 2.9 we use dl to create a glossary. We've put the glossary in an aside because I have assumed here that it is inside an article, likely on about web development.
Listing 2.9
<aside> <h2>Glossary</h2> <dl> <dt>HTML</dt> <dd>HTML, which stands for HyperText Markup Language, is the predominant markup language for web pages.</dd> <dt>PHP</dt> <dd>PHP: Hypertext Preprocessor is a widely used, general-purpose scripting language that was originally designed for web development to produce dynamic web pages.</dd> </dl> </aside>
In Listing 2.10 a dl is used to mark up movie credits.
Listing 2.10
<h1>The Shawshank Redemption</h1> <dl> <dt>Director:</dt> <dd>Frank Darabont</dd> <dt>Writers:</dt> <dd>Stephen King</dd> <dd>Frank Darabong </dd> <dt>Cast</dt> <dd>Tim Robbins</dd> <dd>Morgan Freeman</dd> <dd>Bob Gunton</dd> ... </dl>
Above we have used multiple values (dd) to the one key (dt). It might be argued that each section of credits (Director, writers, etc) could be in a section of its own, such as:
<article> <header> <h1>The Shawshank Redemption</h1> <time>1994</time> </header> <section> <h1>Director</h1> <h2> Frank Darabont</h2> <p>(bio)</p> </section> <section> <h1>Writers</h1> <h2>Stephen King</p> <p>(bio)</p> <h2> Frank Darabont</h2> <p>(bio)</p> </section> </article>
It really depends on your content, and then how you want your content to be structured.
<p><b>Dr. Egon Spengler</b>: There's something very important I forgot to tell you.</p> <p><b>Dr. Peter Venkman</b>: What?.</p> <p><b>Dr. Egon Spengler:</b>: Don't cross the streams.</p> <p><b>Dr. Peter Venkman:</b>: Why?</p> <p><b>Dr. Egon Spengler:</b>: It would be bad.</p> <p><b>Dr. Peter Venkman:</b>: I'm fuzzy on the whole good/bad thing. What do you mean, "bad"?</p> <p><b>Dr. Egon Spengler:</b>: Try to imagine all life as you know it stopping instantaneously and every molecule in your body exploding at the speed of light.</p> <p><b>Dr Ray Stantz::</b>: Total protonic reversal.</p> <p><b>Dr. Peter Venkman:</b>: Right. That's bad. Okay. All right. Important safety tip. Thanks, Egon.</p>
The <small> element
In HTML4, the small element was used to reduce the size of text. However, this was and is a presentational issue, so CSS is used for this purpose. Now, in HTML5 the small element is used for displaying small print, such as copyright information, terms and conditions or license/legal information:
<p><small>This site is licensed under a <a href="http://creativecommons.org/ licenses/by-nc/2.0/uk/">Creative Commons Attribution-Non-Commercial 2.0</a> share alike license. Feel free to change, reuse modify and extend it.</small></p>
As small is inline content, you can embed it within another element if necessary, such as strong, which would give importance to this small print:
<p><strong><small>This content belongs to me! Don’t steal it, otherwise there will be serious, serious trouble.</small></strong></p>
The <b> and <strong> elements
In HTML 4, the b element was for bold, but that has changed. Now it is purely presentational; it should be used to style a section of text which doesn't convey any importance.
You will often see the first paragraph of an blog entry is styled differently, often in bold text.
<h2>Dark energy and flat Universe exposed by simple method</h2> <p><b class="lead">Researchers have developed a simple technique that adds evidence to the theory that the Universe is flat.</b></p> <p>Moreover, the method - developed by revisiting a 30-year-old idea - confirms that "dark energy" makes up nearly three-quarters of the Universe.</p>
We wouldn’t use a strong element because we don’t want to add importance to the first paragraph; we are just styling it differently. However, you could also use some CSS (p:first-of-type, or h2+p) to style this instead of using b. In Listing 2.11, b is used to add color styles to some of the text.
Listing 2.11
<style> b.red {color: red;} b.green {color: green;} b.blue {color: blue;} </style> <h1>My favourite colours</h1> <ol reversed> <li><b class="red">Red</b></li> <li><b class="green">Green</b></li> <li><b class="blue">Blue</b></li> </ol>
The strong element is used to show a text with strong importance, so we now normally use this to generate the bold effect, and you can nest strong to increase the importance of the content.
<p><strong>Do not eat my cookies</strong> and <strong><strong>do not drink my milk</strong></strong></p>
The <i> and <em> elements
The i element was, in HTML 4, for styling text in italics. Now though it represents text that is in an alternative voice or mood. The HTML5 Specification gives some examples of its use, which include: a dream, a technical term, a thought, or a ship name,
<p>I’m having fish tonight <i>(and then I think I’ll have cookies, I haven’t had cookies for ages)</i>.</p>
In contrast, the em element represents emphasis which changes the meaning of a sentence. Depending on what word, or words are to be emphasized:
<p>I thought I was meeting friends at 8pm but my wife says it’s <em>9pm</em></p>
Moving the em would cause the sentence to change its meaning
<p><em>I</em> thought I was meeting friends at 8pm but my <em>wife</em> says it’s 9pm</p>
The <abbr> element
The abbr element isn’t new in HTML5, and it hasn’t been redefined. So why bother mentioning it? Well, abbr has been merged with acronym. Now, the abbr element represents an abbreviation or an acronym. You can use the title attribute to expand the abbreviation, which normally means a tooltip for the user.
<p><abbr title="HyperText Markup Language">HTML</abbr> is the best thing since sliced web</p>
An abbreviation is different to an acronym – NATO is an acronym, whilst BBC is an abbreviation. In HTML 4, both tags were available, but due to confusion by content authors over which to use, acronym has been scrapped, so now use abbr for both.
The <hr> element
The hr element was used to create a horizontal line in a document. Its definition has been tweaked slightly so it now represents a break, after a paragraph, such as a scene change in a book. Usually this will be styled to display a line, or a fancy graphic between sections. It is not used very often these days as CSS can be used to add space/a graphic/a line/decoration at the bottom or top of necessary sections, such as a p, div, article or section.