Both these articles have been a huge success in terms of page views and shares, which was quite unexpected. So, I thought it was time to write a similar article based on job interview questions on HTML and this is the result of my effort. Have fun!
1. Markup validation
Consider the following markup:
<figure> <picture> <source media="(min-width: 40em)" srcset="large.jpg 1024w, medium.jpg 640w, small.jpg 320y"> <img src="medium.jpg" alt="London by night"> </picture> <figcaption>A landscape of London by night</figcaption> </figure>
Is it valid? If not, can you explain why?
The markup uses the picture element, which is a pretty new addition to the specification. The code is all valid apart from the last image specified in the
320y isn’t a valid value. If the
y is replaced with a
w, it becomes valid though.
Can you explain the definition of the
main element? What is its goal? Are the two specifications (WHATWG and W3C) in agreement on its definition?
main element has two different definitions depending on the specification used.
The W3C specification describes it as the main content of the page, that is, the content that describes the main topic of a page or is the central functionality of an application. The specification also states that a document must not include more than one
The WHATWG specification doesn’t assign any semantic value to the
main element and describes it as a container for the dominant contents of another element. Also, according to WHATWG, you don’t have a limit in the number of times you can use the
main element in a single document. If you have multiple
article elements on a page, you may want to markup the main content of each
article with a separate
Consider the following snippet:
<header> <h1>Main title</h1> <form action="/" method="get"> <input type="search"> <input type="submit"> </form> </header> <ul> <li><a href="/">Home</a></li> <li><a href="/products">Products</a></li> <li><a href="/about">About</a></li> </ul> <main> <article> <h1>Main title</h1> <p>This is the content of this section</p> </article> </main> <footer> <small>Copyright &copy; Aurelio De Rosa 2014</small> </footer>
Can you improve its accessibility using WAI-ARIA roles where appropriate, taking into account older technologies?
The code can be rewritten as follows:
<header role="header"> <h1>Main title</h1> <form action="/" method="get" role="search"> <label for="search">Search:</label> <input id="search" type="search"> <input type="submit"> </form> </header> <nav role="navigation"> <ul> <li><a href="/">Home</a></li> <li><a href="/products">Products</a></li> <li><a href="/about">About</a></li> </ul> </nav> <main role="main"> <article role="article"> <h1>Main title</h1> <p>This is the content of this section</p> </article> </main> <footer role="contentinfo"> <small>Copyright &copy; Aurelio De Rosa 2014</small> </footer>
To improve the accessibility, the main navigation list has been wrapped with a
nav element. To improve the accessibility in older technologies that don’t support the new semantic elements, the role of
contentinfo have been added to the
footer elements respectively.
Other improvements have been made on the search form. First of all the form has been marked using the
search role. Then, an explicit
label element has been added to give context for the
input field, and it has been associated with the
input through the use of the
Describe when it’s appropriate to use the
small element and provide an example.
In HTML 4.01 the
small element was a presentational element to mark up smaller text. In HTML5 it should be used semantically to represent legal disclaimers, caveats, and so on. The text may well be “small”, but this isn’t required.
An example of its use is shown below:
<img src="image.jpg" alt="London by night"> <small>The copyright of this image is owned by Aurelio De Rosa</small>
Subheadings are one of the most common elements in any website. A few years ago the
hgroup tag was introduced to address this need, but it has since been removed from the specs. Can you describe why
hgroup was dropped and how the markup can be addressed today?
hgroup element was introduced to group multiple heading elements (
h6) in order to avoid the creation of an unintended sublevel in the hierarchy. To understand what problem it tried to address, let’s consider the following markup:
<article> <h1>Main title</h1> <h2>This is a subtitle</h2> <p>This is the content of this section</p> </article>
Learn PHP for free!
Make the leap into server-side programming with a comprehensive cover of PHP & MySQL.
RRP $11.95 Yours absolutely free
Outlining the document hierarchy of the previous snippet gives us the following representation:
h1 | ---h2 | p
This simple schema shows that the paragraph content of the snippet is seen as the content of the
h2 instead of the
h1, regardless if this was the intended behavior or not. So if the intention was simply to create a subheading and to associate the
h1, the original markup was incorrect.
hgroup element was introduced to address this issue with ease. Therefore, it was removed from the HTML5 specification in April 2013, due to lack of implementations and lack of use cases, making its use invalid.
A possible solution to create a subtitle so that the paragraph is associated to the
h1 is shown below:
<article> <h1> Main title <span>This is a subtitle</span> </h1> <p>This is the content of this section</p> </article>
6. Images and accessibility
alt attribute mandatory on
img elements? If not, can you describe a scenario where it can be set to an empty value? Does an empty value affect accessibility in any way?
The alt attribute is mandatory on
img elements but its value can be empty (i.e.
alt=""). An empty value is recommended when the image shown is used for decorative purposes only and therefore isn’t part of the content of the page. With regards to accessibility, if the
alt attribute is empty, screen readers will ignore the image. This is highly recommended because using a value of something like “Content separator” will only disturb the user when this text is spoken.
Is it possible to express a date range using a single
No, it isn’t possible. The information can be expressed using two time elements though. For example to describe a time interval ranging from November 6, 2014 to November 9, 2014, a developer can write:
<time datetime="2014-11-06">6</time>- <time datetime="2014-11-09">9 November 2014</time>
What’s the difference between the
meter element and the
The meter element represents a scalar measurement within a known range, or a fractional value. This element isn’t a good fit to measure something like external temperature because it doesn’t have a fixed range. However,
meter can be used to describe the occupied memory of a hard disk.
The progress element is used to show the completion progress of a task. Unlike the
meter element, the progress described by
progress can be indeterminate. For example you could describe that a given task is progressing but that it is unknown when the task will be completed.
What is the
longdesc attribute? Can you explain its purpose?
longdesc attribute of the
img element has been around since HTML 4 and is also valid in HTML5. This attribute is designed to provide a more detailed description of an image, compared to the information offered in the
alt attribute. The interesting thing is that instead of providing a description by itself (like the
alt attribute does),
longdesc points to a hyperlink containing the description.
An example of the use of
longdesc is presented below:
<img src="italy.jpg" alt="This image represents the map of Italy" longdesc="italy.html#description"> <!-- other content here ... --> <section id="description"> <h2>Italy</h2> <p>The shown map of Italy illustrates its division in regions...</p> </section>
What is the
mark element? Can you describe an example of use for this element?
The mark element represents highlighted text. A typical use is to highlight every instance of the keyword or keywords searched by a user.
In this article I’ve discussed ten potential interview questions that you can use to test your knowledge of HTML. The questions you may be asked in your next interview may include one or more of these.
To help you study up on these and other semantics-related topics, be sure to check out the links provided in the article to the spec, and here are some further SitePoint resources:
- 5 Obsolete Features in HTML5
- A Guide to the HTML5 ‘time’ Element
- 20 HTML Elements for Better Text Semantics
- Replacing Radio Buttons Without Replacing Radio Buttons
- Everything You Need to Know About HTML’s ‘pre’ Element
Have you been asked some other interesting HTML questions in interviews? Share them with us, they may help other developers when doing interviews for positions in the future.
Jump Start Git, 2nd Edition
Visual Studio Code: End-to-End Editing and Debugging Tools for Web Developers