CodeBlanks Logo Icon CodeBlanks

Challenge - Intermediate capstone

Write a docs site that combines all intermediate topics.

Bring the intermediate level together

This documentation site combines every intermediate topic. It has a full <!DOCTYPE html> skeleton, semantic landmarks (<header>, <nav>, <main>, <aside>, <footer>), advanced text tags, and an accessible table.

A skip link moves keyboard users straight to the main content. The form section includes <fieldset>, <legend>, <label for> and validation attributes.

Practice Write a documentation site

Write a complete documentation site. Include <!DOCTYPE html>, <html> with lang, and a <head> with charset/viewport/<title>. In the body add a skip link (targeting the id on main) and <header>+<nav>, <main>, <aside>, <footer>. Inside <main> put an <article> with an <h2> and a <pre><code> block, plus a <table> with <caption> and a scoped <th>. Inside <aside> put a form with <fieldset>+<legend>, <label for>↔id, required and pattern.

Starter code

index.html
<!-- document type and root -->

<!-- metadata: charset, viewport, title -->

<!-- body: skip link, header, main, aside, footer -->

Sample solution

index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Keyboard API docs</title>
</head>
<body>
  <a href="#content" class="skip-link">Skip to content</a>
  <header>
    <h1>Keyboard API docs</h1>
    <nav aria-label="Main menu">
      <a href="/home">Home</a>
      <a href="/posts">Articles</a>
    </nav>
  </header>
  <main id="content">
    <article>
      <h2>Setup</h2>
      <p>Run the following command in your terminal:</p>
      <pre><code>npm install keyboard</code></pre>
    </article>
    <section>
      <h2>Release notes</h2>
      <table>
        <caption>Version history</caption>
        <thead>
          <tr><th scope="col">Version</th><th scope="col">Date</th></tr>
        </thead>
        <tbody>
          <tr><td>1.0</td><td><time datetime="2026-01-15">15 January 2026</time></td></tr>
        </tbody>
      </table>
    </section>
    <aside>
      <h2>Feedback</h2>
      <form>
        <fieldset>
          <legend>Contact</legend>
          <label for="email">Email</label>
          <input type="email" id="email" name="email" required>
          <label for="msg">Message</label>
          <input type="text" id="msg" name="msg" required pattern="[A-Za-z0-9 ]{5,100}">
        </fieldset>
      </form>
    </aside>
  </main>
  <footer>
    <address>info@keyboard.example</address>
  </footer>
</body>
</html>

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 What should the skip link target?

  • main Correct answer
  • header
  • footer
  • aside

Explanation: The skip link points to the id on main.

2 Skip link

Question
<a href="____" class="skip-link">Skip to content</a>
Answer
<a href="#content" class="skip-link">Skip to content</a>

Explanation: The # sign references an id.

3 Topic and its tag

Term Meaning
abbreviation abbr
code block pre>code
form group fieldset
column styling colgroup

All lessons in Intermediate