DEV Community

Cover image for Building a Tailwind CSS button component + variants
Zoltán Szőgyényi for Themesberg

Posted on • Originally published at flowbite.com

31 10

Building a Tailwind CSS button component + variants

For the last few projects I've been using Tailwind CSS to build and style the components, sections, and pages for the website.

One thing that bothers me, however, is that I have to build certain commonly components over and over every time I start a new project.

Tailwind CSS buttons

This is why I decided to start a Tailwind CSS Components series here and teach you how to build elements such as buttons, dropdowns, modals, and more.

A few days ago I showed you how to build a Tailwind CSS breadcrumb component and today I will show you how to build button components.

Let's get started!

Tailwind CSS button component

First of all, it is important to understand what kind of HTML a button can be. It is most usually used as an <a> element, however, you can also use it as a <button> element too.

Let's first create the HTML markup for the button:

<button type="button">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

Let's add some spacing classes:

<button type="button" class="px-5 py-2.5">Default</button>
Enter fullscreen mode Exit fullscreen mode

Now let's add some colors:

<button type="button" class="text-white bg-blue-700 px-5 py-2.5">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

It's also important to apply text related stylings:

<button type="button" class="text-white bg-blue-700 font-medium text-sm px-5 py-2.5 text-center">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

Now let's make the button rounded, but you can keep it squared as well depending on your preferences:

<button type="button" class="text-white bg-blue-700 font-medium rounded-lg text-sm px-5 py-2.5 text-center">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

Lastly, let's not forget to add hover and focus styles:

<button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

Tailwind CSS outline button style

You can also use the following styles to build a button that doesn't have a solid background:

<button type="button" class="rounded-lg border border-gray-200 bg-white text-sm font-medium px-4 py-2 text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 mr-3 mb-3">Flowbite</button>
Enter fullscreen mode Exit fullscreen mode

Tailwind CSS button with icon

You may want to use an icon inside the button as well. I recommend using flex and SVG icons for the best performance.

<button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center mr-3">
    <svg class="-ml-1 mr-2 h-5 w-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
    Buy now
</button>
Enter fullscreen mode Exit fullscreen mode

Buttons as links

You can easily use buttons as link by using an <a> tag instead of a <button> element:

<a href="#" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center mr-3 mb-3">I'm a link</a>
Enter fullscreen mode Exit fullscreen mode

That's it! I hope that this tutorial will help you in your Tailwind CSS journey.

Flowbite - Tailwind CSS component library

This Tailwind CSS button component is part of a larger library called Flowbite, which includes many more variants and components built using the utility classes from Tailwind CSS.

Tailwind CSS component library

You can learn more and get started with Flowbite by reading the introduction and quickstart guide from the official documentation.

Image of Stellar post

🚀 Stellar Dev Diaries Series: Episode 1 is LIVE!

Ever wondered what it takes to build a web3 startup from scratch? In the Stellar Dev Diaries series, we follow the journey of a team of developers building on the Stellar Network as they go from hackathon win to getting funded and launching on mainnet.

Read more

Top comments (0)

Image of PulumiUP 2025

Let's talk about the current state of cloud and IaC, platform engineering, and security.

Dive into the stories and experiences of innovators and experts, from Startup Founders to Industry Leaders at PulumiUP 2025.

Register Now

👋 Kindness is contagious

Dive into this insightful write-up, celebrated within the collaborative DEV Community. Developers at any stage are invited to contribute and elevate our shared skills.

A simple "thank you" can boost someone’s spirits—leave your kudos in the comments!

On DEV, exchanging ideas fuels progress and deepens our connections. If this post helped you, a brief note of thanks goes a long way.

Okay