Skip to content

Tailwind CSS - List Style Type

In modern UI development, lists are fundamental for displaying information, from navigation menus to feature lists. Tailwind CSS provides a set of utility classes to control the appearance of list markers (like bullets and numbers) declaratively, allowing you to build clean and consistent list styles that align with your design system.

Prerequisites: Setting Up Your Environment

Section titled “Prerequisites: Setting Up Your Environment”

While you can use the Tailwind CDN for quick demos, real-world projects benefit from the full power of Tailwind CSS via the PostCSS build process. This allows for customization, better performance, and access to all features. All examples assume you have a standard Tailwind project set up.

# 1. Install Tailwind CSS
npm install -D tailwindcss
npx tailwindcss init
# 2. Configure your template paths in tailwind.config.js
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}
# 3. Add Tailwind directives to your main CSS file
@tailwind base;
@tailwind components;
@tailwind utilities;
# 4. Start the build process
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch

Tailwind includes three primary classes for controlling the list marker style. These classes correspond directly to the list-style-type CSS property.

ClassCSS Properties
list-nonelist-style-type: none;
list-disclist-style-type: disc;
list-decimallist-style-type: decimal;

Alongside the marker style, you’ll often need to control its position relative to the content. Use list-inside or list-outside for this. list-outside (the default) places the marker outside the text flow, while list-inside places it within the text flow, which can affect text alignment.

This example demonstrates how to apply different list styles to create a well-structured recipe card. Notice the use of padding (pl-5) with list-outside to prevent the markers from being clipped.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recipe Card</title>
<link href="/dist/output.css" rel="stylesheet">
</head>
<body class="bg-gray-100 p-8 flex justify-center">
<div class="max-w-md bg-white rounded-lg shadow-lg p-6">
<h2 class="text-2xl font-bold mb-4 text-gray-800">Classic Pancakes</h2>
<h3 class="text-lg font-semibold mt-6 mb-2 text-gray-700">Ingredients</h3>
<ul class="list-disc list-outside pl-5 space-y-2 text-gray-600">
<li>1 ½ cups all-purpose flour</li>
<li>3 ½ teaspoons baking powder</li>
<li>1 tablespoon white sugar</li>
<li>¼ cup melted butter</li>
<li>1 egg</li>
</ul>
<h3 class="text-lg font-semibold mt-6 mb-2 text-gray-700">Instructions</h3>
<ol class="list-decimal list-outside pl-5 space-y-2 text-gray-600">
<li>In a large bowl, sift together the flour, baking powder, salt and sugar.</li>
<li>Make a well in the center and pour in the milk, egg and melted butter; mix until smooth.</li>
<li>Heat a lightly oiled griddle or frying pan over medium-high heat.</li>
<li>Pour or scoop the batter onto the griddle, using approximately 1/4 cup for each pancake.</li>
</ol>
<h3 class="text-lg font-semibold mt-6 mb-2 text-gray-700">Notes</h3>
<ul class="list-none space-y-2 text-gray-500 italic">
<li>For fluffier pancakes, separate the egg yolk and white. Beat the white until stiff and fold it in at the end.</li>
</ul>
</div>
</body>
</html>

Tailwind’s default set is minimal, but you can easily extend it by adding your own list styles to your tailwind.config.js file. This is perfect for adding styles like roman numerals, letters, or even custom symbols.

tailwind.config.js
module.exports = {
// ...
theme: {
extend: {
listStyleType: {
'upper-roman': 'upper-roman',
'lower-alpha': 'lower-alpha',
'square': 'square',
}
}
}
}

After adding these to your configuration and rebuilding your CSS, you can use them in your HTML:

<ol class="list-upper-roman">
<!-- ... -->
</ol>
<ul class="list-square">
<!-- ... -->
</ul>
  • Padding is Key: When using list-outside (default), always add left padding (e.g., pl-5) or margin (ml-5) to the <ul> or <ol> element. Without it, the markers may be rendered outside the element’s bounding box and become invisible.
  • Responsive Design: Use responsive variants to change list styles on different screen sizes. For example, a list-none on mobile might become a md:list-disc on larger screens to save space.
  • Accessibility: List markers provide important semantic context. Avoid using list-none on a list unless you provide an alternative visual cue. For decorative lists, ensure they are not essential for understanding the content.