Nested Lists and List Styling
Nest lists within lists and control their appearance.
Nested Lists and List Styling is a free HTML Academy lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the HTML Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Nesting Lists
Lists can be nested inside <li> elements:
<ul>
<li>Frontend
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</li>
<li>Backend
<ul>
<li>Node.js</li>
<li>Python</li>
</ul>
</li>
</ul>Correct Nesting
The nested list must be inside a <li> element, not a direct child of <ul> or <ol>:
<!-- WRONG: nested ul as direct child of outer ul -->
<ul>
<ul> <!-- INVALID -->
<li>Item</li>
</ul>
</ul>
<!-- CORRECT: nested ul inside li -->
<ul>
<li>
Parent item
<ul>
<li>Child item</li>
</ul>
</li>
</ul>Multi-Level Bullet Styles
Browsers apply different default bullets at each nesting level:
<ul>
<li>Level 1 — disc (filled circle)</li> <!-- • -->
<ul>
<li>Level 2 — circle (open circle)</li> <!-- ○ -->
<ul>
<li>Level 3 — square</li> <!-- ▪ -->
</ul>
</ul>
</ul>Resetting with CSS
Override nested list styles with CSS:
ul, ol {
list-style: none;
padding: 0;
margin: 0;
}
/* Style each level explicitly */
.nav > li > ul {
padding-left: 1rem;
list-style: disc;
}Numbered Nested Lists
Nested ordered lists with different types:
<ol type="1">
<li>Introduction
<ol type="a">
<li>Background</li>
<li>Motivation</li>
</ol>
</li>
<li>Methods
<ol type="a">
<li>Data collection</li>
</ol>
</li>
</ol>CSS Counters for Custom Numbering
Custom hierarchical numbering with CSS counters:
ol {
list-style: none;
counter-reset: level1;
}
ol > li { counter-increment: level1; }
ol > li::before { content: counter(level1) '. '; }
ol ol {
counter-reset: level2;
}
ol ol > li { counter-increment: level2; }
ol ol > li::before {
content: counter(level1) '.' counter(level2) ' ';
}Accordion Navigation Pattern
A nested list can become an expandable sidebar navigation:
<ul class="tree-nav">
<li>
<details>
<summary>Frontend</summary>
<ul>
<li><a href="/html">HTML</a></li>
<li><a href="/css">CSS</a></li>
</ul>
</details>
</li>
<li><a href="/backend">Backend</a></li>
</ul>Spacing Nested Lists
Control visual indentation with CSS:
ul {
padding-left: 1.5rem; /* Controls indent at each level */
margin: 0.5rem 0;
}
/* Tighter nested spacing */
ul ul {
margin: 0.25rem 0;
padding-left: 1.25rem;
}list-style Shorthand Review
All list style properties combined:
/* Shorthand: type position image */
ul {
list-style: square inside;
}
/* Longhand equivalents: */
ul {
list-style-type: square;
list-style-position: inside; /* inside or outside */
list-style-image: none;
}Custom Icons as List Markers
Use SVG or emoji as list markers:
ul.checklist {
list-style: none;
padding: 0;
}
ul.checklist li::before {
content: '✓ ';
color: #22c55e;
font-weight: bold;
}
/* Or with a background SVG */
ul.icon-list li {
padding-left: 2rem;
background: url('/icons/arrow.svg') no-repeat 0 0.2em;
background-size: 1rem 1rem;
list-style: none;
}Accessibility of Nested Lists
Nested lists and screen readers:
- Screen readers announce nesting level and item count
- Deep nesting (4+ levels) is confusing — keep to 2-3 levels maximum
- If using
list-style: noneon the outer list, addrole="list"
Quick Check
Where must a nested list be placed inside an outer list?
Recap: Nested Lists
Nested list essentials:
- Nest lists inside
<li>— never directly in<ul> - Browsers default to: disc → circle → square per level
- CSS counters enable custom hierarchical numbering
- Keep nesting to 2-3 levels for usability
- Use
<details>+<summary>for expandable nested navigation
Frequently asked questions
Is the “Nested Lists and List Styling” lesson free?
Yes — the full text of “Nested Lists and List Styling” is free to read here on the web, and the HTML Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the HTML Academy course, upgrade to CoddyKit PRO.
What will I learn in “Nested Lists and List Styling”?
Nest lists within lists and control their appearance. You practise HTML Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start HTML Academy?
No prior experience is required. HTML Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Nested Lists and List Styling” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this HTML Academy lesson?
Yes. Every HTML Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Unordered Lists ul and li
- Ordered Lists ol start reversed type
- Description Lists dl dt dd
- Nested Lists and List Styling