Elements
The Page Method: Level 1 — HTML Elements
In The Page Method, an Element is the smallest physical building block. In web development, these map directly to individual HTML tags in their natural state. Each preview shows the element in the site’s design system — toggle to Raw to see it with no CSS classes applied.
Interaction Elements
<button>Standard actionUse for any action that does not navigate to another location — submitting forms, opening dialogs, toggling state. Keyboard accessible by default. Never replace with a styled <div> or <span>.
<input type="submit">Form submissionThe default form submission trigger inside a <form>. Functionally identical to <button type="submit"> but the label is the value attribute, not inner content.
<a>A clickable destination or anchorUse whenever the result of an interaction is navigating to a URL, a page anchor, or an external resource. The rule: if it takes you somewhere, use <a>. If it does something, use <button>.
<input type="checkbox">Multiple choiceAllow independent on/off selection for each option. Each checkbox is a separate binary choice. Always pair with a <label> and group related checkboxes inside a <fieldset>.
<input type="radio">Single choiceEnforce a single selection from a mutually exclusive set. All radios sharing the same name attribute form a group — selecting one deselects the others. Always group with <fieldset>.
<input type="range">A physical slider for valuesBest when relative position matters more than a precise number — volume, brightness, budget sliders. Pair with a visible readout so the current value is always clear.
065100
Text & Content Elements
<h1>Structural title — top levelThe primary heading of the page. One per page only. Describes the main topic and forms the root of the document outline. Screen readers and search engines give it the highest weight.
Design principles that last
<h2>Structural title — second levelThe primary section heading. Use to divide the main page content into named regions. Multiple <h2>s on a page is correct and expected.
Understanding the user
<h3>Structural title — third levelA sub-section heading inside an <h2> section. Use to break a long section into scannable named subsections.
Cognitive load in interfaces
<h4>Structural title — fourth levelRarely needed outside of deeply structured documents. If you reach h4 regularly, consider whether your content hierarchy is too deep.
Attention and visual hierarchy
<h5>Structural title — fifth levelTypically only found in deeply nested document structures like technical specs or legal documents. Prefer flatter structures in most UIs.
Focus state requirements
<h6>Structural title — sixth levelThe smallest semantic heading. In practice, reaching h6 usually indicates the content should be restructured or split. Can work well styled as an uppercase label.
Further reading
<p>ParagraphThe default block container for prose. Every standalone sentence or paragraph of body copy belongs in a <p>. Never simulate paragraphs with <br> pairs or naked <div>s.
Good design is as much about what you leave out as what you put in. Clarity emerges from constraint, not addition.
<blockquote>A standalone quoteA section of content quoted from another source. Should contain the quoted text (often in a <p>) and ideally a <cite> for attribution. Not valid for general callouts with no source.
“The best interfaces are the ones you don’t notice.”
<span>A generic text stringAn inline container with no semantic meaning. Use it when you need to target a substring for styling or scripting and no other semantic element applies. Avoid overusing it — prefer meaningful tags.
Reviewed by Jane Smith on March 10, 2026.
<strong>Bolded importanceMarks content as having strong importance, urgency, or seriousness — content the user must not miss. Renders bold by default. Choose based on meaning, not appearance; use CSS font-weight if you just want visual bold.
Save your work before closing. This action cannot be undone.
<em>Italicised emphasisStress emphasis that changes the meaning of the sentence — the word you would stress if speaking aloud. Renders italic. If you want italic for stylistic reasons only, use CSS font-style.
Anyone can make a button. Designing one correctly takes care.
<mark>Highlighted textHighlights text relevant to the user's current context — a search term match, an annotation, or a passage of active interest. Not for general emphasis; that's <strong> or <em>.
Results for “contrast ratio”: ensure your contrast ratio meets WCAG AA.
<time>Dates / TimesEncodes a date, time, or duration in machine-readable form via the datetime attribute. The visible content can be any human-friendly format. Allows browsers, search engines, and assistive tech to interpret temporal data precisely.
Published · 4 min read
<code>Computer codeInline computer code, file paths, command-line input, or technical identifiers. Always use for any monospace technical content within prose. For multi-line code blocks, wrap in <pre><code>.
Set
display: flexon the parent, then addgap-4for spacing.<cite>A reference titleMarks the title of a cited creative or intellectual work — a book, article, film, website. Not used for the author's name. Renders italic by default.
As documented in Designing with the Mind in Mind by Jeff Johnson.
<sub>SubscriptTypographic subscript — positioned below the baseline at a smaller size. Use for chemical formulas (H₂O), mathematical notation, and footnote markers.
Water is H2O. Carbon dioxide is CO2.
<sup>SuperscriptTypographic superscript — positioned above the baseline at a smaller size. Use for exponents (x²), footnote references, and ordinals (1ˢᵗ, 2ⁿᵈ).
E = mc2 — mass–energy equivalence.
<hr>A horizontal dividing lineA semantic thematic break — signals a shift in topic or scene within a section, not a decorative line. If the divider carries no structural meaning, use a CSS border. <hr> communicates to assistive tech that topics change.
Section A content ends here.
Section B content begins here.
<br>A physical line breakA single line break within a block of text. Use only where the break is part of the content itself — addresses, verse, code samples. Never use <br> pairs to create spacing between elements; that's what margin is for.
Jon Frelund
Senior UX Engineer
Copenhagen, Denmark
Form & Data Entry Elements
<input type="text">Plain textThe baseline single-line text input. Always prefer a more specific type (email, tel, number) when the format is known — specific types give native keyboard optimisation and built-in validation.
<input type="email">Email addressValidates the presence of an @ sign on submit and triggers the email keyboard on mobile. Use whenever collecting an email address.
<input type="password">Hidden charactersMasks characters as the user types. Browsers may offer a built-in password manager prompt automatically. Support autocomplete="current-password" or autocomplete="new-password" to help password managers.
<input type="number">Numeric valueA numeric input with increment/decrement stepper controls. Best for short integers like quantities or ages. For credit card numbers, postal codes, or phone numbers, use type="text" with inputmode="numeric" to preserve formatting.
Quantity<input type="tel">Telephone numberDoes not validate phone format (formats vary globally), but activates the telephone keypad on mobile. Use autocomplete="tel" for autofill support. Display a pattern hint via placeholder.
<input type="date">Date pickerRenders the browser's native date picker. The datetime value is standardised to YYYY-MM-DD regardless of locale. Browser implementations vary significantly in appearance — consider a custom component for cross-platform consistency.
<textarea>A multi-line box for long textUse whenever a user might need more than one sentence — messages, descriptions, feedback. Resizable by default; control with CSS resize property. Set rows to hint at expected length.
<select>The dropdown containerA native dropdown of predefined choices. Best for 5–15 options. Fewer choices suit radio buttons; larger sets benefit from a searchable combobox pattern. Avoid when options are unknown until runtime.
<option>The individual choice within a listA single selectable item inside a <select> or <datalist>. The value attribute is what gets submitted with the form; the inner text is what the user sees. Can be grouped with <optgroup>.
Shown as items inside
<select>above.
<label>The text that identifies an inputAssociates visible text with a form control via for/id pairing, or by wrapping the control directly. Clicking the label activates the input. Never omit — it is a hard accessibility requirement.
<progress>A visual barRepresents task completion. A value attribute between 0 and max renders a filled bar. Omitting value creates an indeterminate state — an animated loading indicator. Use for uploads, multi-step flows, or loading.
Uploaded65%<meter>A gauge for a rangeA scalar measurement within a known range — disk usage, battery level, a score. Unlike <progress>, it represents a current state, not a task. The low, high, and optimum attributes drive colour changes in supporting browsers.
Disk usage0.65 / 1.0
<fieldset>A physical box around a groupGroups related form controls under a shared context. Required when grouping radio buttons or checkboxes — screen readers announce the legend before each control inside the group, providing essential context.
<legend>The title for that boxThe visible caption for a <fieldset>. Must be its first child. Screen readers announce the legend before each individual control inside the group, making it a critical accessibility anchor.
Shown as the caption inside
<fieldset>above.
Visual & Media Elements
<img>A pictureEmbeds a raster image. The alt attribute is required — describe the image content for screen readers, or use alt="" for purely decorative images. Use width and height to prevent layout shift during load.
Requires src<img src="…" alt="Description" /> <svg>A vector graphicInline scalable vector graphics. Resolution-independent and CSS-styleable. Add aria-label or an inner <title> for accessibility. Preferred over <img> for icons, logos, and illustrations that need theming or animation.
<video>A moving pictureEmbeds a video player. Use multiple <source> children for format fallbacks (mp4, webm). Add controls for native UI. Include a <track kind="captions"> for accessibility. Set muted autoplay loop for ambient/background video.
Requires a video source<audio>Sound playerEmbeds an audio player. The controls attribute reveals the browser's native playback UI. Use <source> for multiple format fallbacks. Without controls and autoplay it is completely invisible.
1:24<canvas>A drawing areaA pixel-based scriptable drawing surface. Draws nothing without JavaScript. Use for dynamic charts, game rendering, image manipulation, and real-time data visualisation. Not accessible by default — add a text fallback inside the opening/closing tags.
Populated via JS
<iframe>An external page inside yoursEmbeds a completely separate HTML document in a frame. Used for maps, payment forms, and third-party widgets. Always set a restrictive sandbox attribute to reduce XSS risk. Consider content security policy headers alongside.
Embeds an external URL
<figure>The container for an assetA self-contained content block — an image, chart, code snippet, or table — referenced from the surrounding text. Semantically separates the asset from the flow without breaking meaning. Can be moved in the doc without breaking context.
Fig. 1 — A caption describing the image above <figcaption>The text description for an assetThe visible caption for a <figure>. Must be either the first or last child. Supplements, does not duplicate, the alt text of any image inside — alt is for screen readers, figcaption is for all users.
Shown as the caption inside
<figure>above.
List & Table Elements
<li>A single item in a listMust be a direct child of <ul> (unordered), <ol> (ordered), or <menu>. The parent element determines the visual marker and semantic meaning — bullets vs. numbers vs. interactive commands.
Unordered <ul>
- Understand context before designing
- Prototype early and often
- Test with real users
Ordered <ol>
- 1Define the problem
- 2Explore the solution space
- 3Validate with data
<td>A single cell of dataA standard data cell in a table row. Can span multiple columns or rows via colspan and rowspan. Pair with <th> headers so screen readers can announce the column and row context for each cell.
Accessibility WCAG 2.2 AA Pass Performance Core Web Vitals Review <th>A cell containing a headerA header cell for a column or row. The scope attribute (col, row, colgroup, rowgroup) tells assistive technology which data cells this header labels. Required for accessible data tables — screen readers announce the header before each cell.
Component Status Owner Button Stable Design Systems Modal Review Interaction Table Draft Design Systems
The Rule: If you delete one part of an Element — like the text inside a button or the source of an image — it stops working or loses all meaning.