Building a Mobile-First Navbar with Tailwind
Tailwind makes it easy to create responsive navigation bars that adapt to screen sizes using utility classes and mobile-first design principles.
1. Basic Structure
Hereβs a simple navbar layout that is optimized for mobile first, then enhanced for desktop:
<nav class="bg-white shadow-md">
<div class="max-w-7xl mx-auto px-4 py-4 flex justify-between items-center">
<div class="text-xl font-bold">Brand</div>
<div class="md:hidden">
<button id="menu-toggle" class="text-gray-600">β°</button>
</div>
<ul id="menu" class="hidden md:flex space-x-6">
<li><a href="#" class="hover:text-blue-600">Home</a></li>
<li><a href="#" class="hover:text-blue-600">About</a></li>
<li><a href="#" class="hover:text-blue-600">Contact</a></li>
</ul>
</div>
</nav>
2. Toggle Menu on Mobile
Use JavaScript or Alpine.js to toggle the visibility of the mobile menu:
// JS example
document.getElementById('menu-toggle').addEventListener('click', function () {
const menu = document.getElementById('menu');
menu.classList.toggle('hidden');
});
3. Alpine.js Version (Optional)
For a more reactive setup without external JS:
<nav x-data="{ open: false }" class="bg-white shadow-md">
<div class="max-w-7xl mx-auto px-4 py-4 flex justify-between items-center">
<div class="text-xl font-bold">Brand</div>
<button @click="open = !open" class="md:hidden text-gray-600">β°</button>
<ul :class="{ 'hidden': !open }" class="md:flex space-x-6 hidden md:block">
<li><a href="#" class="hover:text-blue-600">Home</a></li>
<li><a href="#" class="hover:text-blue-600">About</a></li>
<li><a href="#" class="hover:text-blue-600">Contact</a></li>
</ul>
</div>
</nav>
4. Best Practices
- Always hide the menu on mobile by default and use JavaScript to show it.
- Use mobile-first classes (
md:flex
,md:hidden
) to enhance progressively. - Ensure your toggle button is keyboard accessible for better accessibility.
Conclusion
A responsive, mobile-first navbar in Tailwind is quick to build with utility classes and a small amount of JavaScript. Itβs also highly customizable and easy to extend for dropdowns, search bars, or user menus.