Skip to content

Lists

Lists appear everywhere in UI design — navigation menus, feature bullet points, step-by-step instructions, ingredient lists, search results. HTML gives you two list types for content and one for descriptive pairs. All of them are built from a simple, nestable structure.

An unordered list (<ul>) is a collection of items where the order does not matter. The browser renders bullet points by default. Use it for feature lists, ingredients, nav links — anything where swapping item order would not change the meaning.

<ul>
<li>Sketch</li>
<li>Figma</li>
<li>Framer</li>
</ul>

An ordered list (<ol>) is a sequence where order does matter. The browser numbers items automatically. Use it for steps in a process, rankings, recipes, instructions.

<ol>
<li>Open a new Figma file</li>
<li>Set up your frame</li>
<li>Add a grid</li>
</ol>

Both types use <li> — list item — for each entry. The <li> must always be a direct child of <ul> or <ol>.

You can place a list inside an <li> to create sub-items — like sub-layers in Figma:

<ul>
<li>Design tools
<ul>
<li>Figma</li>
<li>Sketch</li>
</ul>
</li>
<li>Prototyping tools</li>
</ul>

One of the most common HTML patterns you will encounter is a navigation menu built from an unordered list. The list communicates “these are related items of equal importance”. CSS then removes the bullets and arranges them horizontally.

Try adding a fifth item to the ordered list. Notice the browser renumbers automatically — you never touch the numbers themselves.

  • Using paragraphs separated by line breaks instead of a real <ul>/<ol>, so a screen reader has no way of knowing it’s a list
  • Forgetting that a nested list needs correctly nested markup

Designers see “a bulleted list,” but developers see that a semantic list lets a screen reader announce the item count (e.g. “list, 5 items”).

💡 Real-world example

A screen reader announces a properly marked-up <ul> as “list, 5 items” — plain paragraphs separated by line breaks announce nothing, no matter how similar they look visually.

Which list element should you use for a set of steps that must be followed in order?
What is the correct element for each item inside a list?
Why is it good practice to build navigation menus using a <ul> with <li> items?