Text
In virtually every interface, displaying information via text is the core feature–and doing this semantically can require many different elements.
Paragraphs
The <p> tag is a block level element that encompasses a run of any length of text and can include links, images, break lines, and more.1 Avoid using blank <p> elements for spacing as screen readers will announce the element.
Lists
Lists of items can be grouped using the <li> tag for each items, along with a required parent element for either undorered <ul> lists or ordered <ol> lists.2 In addition, the <menu> tag can be used to wrap list items and is considered the same as a <ul>, except it’s semantically meant for interactive groups of items.
The main difference between <menu> and <nav> is that <menu> is not for site navigation. As a rule of thumb, use <menu> when grouping a list of buttons and <nav> when grouping a list of links.
- Item one
- Item two
- Item three
Labels
The <label> tag should only be used in association with elements such as <input>, <textarea>, <select>, and other valid form elements. Labels are considered a caption3 for these elements, and come with useful built-in functionality such as:
- focusing the associated element
- announcing the caption when a screen reader focuses the associated element
To get these benefits, you can add a for attribute that matches the associated element’s id attribute value. However, a simpler solution that nixes requiring a bunch of id attributes is to make the associated element a child of the label (this is also a great example of using the <span> tag to style the label text separately):
Addresses and dates
Use the <address> element for any content related to physical or digital addresses. Address details can be grouped together and include informative labeling inside of the element directly.
The <time> element should only be used for dates, either as a datetime or duration. Use the datetime attribute for machine readable values, which can help browsers present actions like “save to calendar”.
Empaphsis and importance
The <em> tag is for stress emphasis in a sentence structure while the <strong> tag is for text that is of significant importance. Because of this, it’s probably rare that you would want to use <em> in interfaces for non-literary text. A good example of using <strong> is with alert style content.
Warning! This action will delete all of your content.
Bold and italic
While the <strong> and <em> tags are sometimes considered replacements for <b> and <i> (as their default styling matches those tags), both are still valid and acceptable. Generally, the <b> tag can be avoided as its use cases match either <strong> or a styled <span>, but its usage is to visually note some text without signifying that it’s important.4
The <i> tag is primarily for calling out a block of text as separate5 and has become popular for displaying icons—as semantically meaningful icons can be composed using font ligatures and a screen readable label. There are a few caveats:
- Ensure a visible text label isn’t also present with the same value as screen readers will read the word twice.
- Avoid single character icons as that is not semantically meaningful.
Spans
The <span> element is an inline version of the generic <div> block element and while it is a useful text wrapping element, it should be used as a last resort if a more semantic text element isn’t appropriate.
The <span> element is however, perfect for when you need to style a block of text within a paragraph but it has no other semantic meaning that would warrant using <em>, <strong>, etc.