MeshWorld India LogoMeshWorld.

Loose vs. Tight Lists in Markdown

(Updated: Jul 15, 2026)
Listen to ArticleAI Speech
~5 min read narration
100%
Loose vs. Tight Lists in Markdown

Two lists that look almost identical in the raw Markdown source can render with noticeably different spacing on the page. The difference usually comes down to a single blank line between items, something the list guide in this series doesn’t cover. This article explains the loose-vs-tight distinction, why it exists, and how to control it deliberately instead of running into it by accident.


What Is a Tight List?

A tight list has no blank lines separating its items. Content inside each item renders directly, without being wrapped in paragraph tags.

MARKDOWN
- First item
- Second item
- Third item

This renders compactly:

  • First item
  • Second item
  • Third item

The HTML output has no <p> tags inside the list items:

HTML
<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
</ul>

What Is a Loose List?

A loose list has at least one blank line between two of its items. This changes how every item in that list renders, not just the ones next to the blank line.

MARKDOWN
- First item

- Second item

- Third item

This renders with visible spacing between items:

  • First item

  • Second item

  • Third item

The HTML output wraps each item’s content in <p> tags:

HTML
<ul>
  <li><p>First item</p></li>
  <li><p>Second item</p></li>
  <li><p>Third item</p></li>
</ul>

Why Does This Matter in Practice?

The most common real-world surprise is writing a list where you added blank lines purely for readability in the source file, not realizing it would add visible spacing to the rendered page. If a tightly-packed list suddenly looks like it has extra gaps between items, check for a stray blank line.

MARKDOWN
- Setup local environment
- Install dependencies

- Run dev server

Because of the blank line before the third item, this entire list renders loose, spacing out all three items even though only one gap was added in the source.


How Do I Force a List to Stay Tight?

Remove every blank line between items. If you need a paragraph of explanation inside one item without affecting the others, indent it under that item instead of leaving a blank line before the next list marker.

MARKDOWN
- First item
- Second item, with an explanatory paragraph.

  This paragraph is part of the second item, not a new loose gap,
  because there's no blank line directly between two list markers.
- Third item

Summary Checklist

  • No blank lines between items keeps a list tight, rendering without <p> wrapping.
  • Even one blank line between two items makes the entire list loose.
  • Looseness applies list-wide, not just to the items next to the blank line.
  • Loose lists add visible vertical spacing compared to tight lists.
  • A blank line before a nested paragraph inside one item doesn’t by itself make the list loose.

Frequently Asked Questions

Does this apply to both ordered and unordered lists?

Yes. The tight/loose distinction is a property of list blocks in general, and applies the same way regardless of whether the markers are -, *, +, or numbers.

Can I mix tight and loose sections in the same document?

Yes, as separate lists. Two lists separated by a non-list paragraph or heading are independent blocks, so one can be tight and the other loose without affecting each other.

Does looseness change how task list checkboxes render?

Not usually. GFM task list checkboxes render the same either way; looseness mainly affects whether the text content is wrapped in a paragraph tag, not the checkbox itself.


Reader Quality Feedback

Did this technical guide help solve your problem?

Suggest Errata ($0)
Vishnu
Primary Author

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Explore Author Archive
Compute Fuel & Open Testbed
100% Independent & Verified

Fuel High-Density, Zero-Fluff Engineering Deep-Dives

Every guide on MeshWorld is validated on physical Linux nodes and reproducible testbeds. If this article saved you hours of debugging or unblocked production, consider funding our next cluster run.

Weekly Dispatch

Join MeshWorld Dispatch

Get practical tutorials, system blueprints, and curated AI engineering notes straight to your inbox. No fluff, zero spam.

Zero spam. 1-click unsubscribe anytime.Prefer RSS?
Curated Continuations

Up Next in This Domain.

Browse Full Archive