Learn how to Construct Distinctive, Lovely Web sites with Tailwind CSS

When fascinated by what CSS framework to make use of for a brand new challenge, choices like Bootstrap and Basis readily bounce to thoughts. They’re tempting to make use of due to their ready-to-use, pre-designed parts, which builders can use with ease straight away. This strategy works nicely with comparatively easy web sites with a standard feel and look. However as quickly as we begin constructing extra advanced, distinctive websites with particular wants, a few issues come up.

In some unspecified time in the future, we have to customise sure parts, create new parts, and ensure the ultimate codebase is unified and simple to keep up after the adjustments.

It’s exhausting to fulfill the above wants with frameworks like Bootstrap and Basis, which give us a bunch of opinionated and, in lots of instances, undesirable types. Because of this, we’ve got to repeatedly remedy specificity points whereas making an attempt to override the default types. It doesn’t sound like a enjoyable job, does it?

Prepared-to-use options are straightforward to implement, however rigid and confined to sure boundaries. On different hand, styling websites with out a CSS framework is highly effective and versatile, however isn’t straightforward to handle and preserve. So, what’s the answer?

The answer, as at all times, is to comply with the golden center. We have to discover and apply the precise stability between the concrete and summary. A low-level CSS framework presents such a stability. There are a number of frameworks of this type, and on this tutorial, we’ll discover the most well-liked one, Tailwind CSS.

What Is Tailwind?

Tailwind is greater than a CSS framework, it’s an engine for creating design programs. — Tailwind web site

Tailwind is a group of low-level utility lessons. They can be utilized like lego bricks to construct any type of element. The gathering covers a very powerful CSS properties, however it may be simply prolonged in a wide range of methods. With Tailwind, customization isn’t ache within the neck anymore. The framework has nice documentation, masking each class utility intimately and exhibiting the methods it may be personalized. All fashionable browsers, and IE11+, are supported.

Why Use a Utility-first Framework?

A low-level, utility-first CSS framework like Tailwind has a loads of advantages. Let’s discover probably the most important of them:

You’ve gotten better management over components’ look. We will change and fine-tune a component’s look way more simply with utility lessons.
It’s straightforward to handle and preserve in massive tasks, since you solely preserve HTML recordsdata, as an alternative of a big CSS codebase.
It’s simpler to construct distinctive, customized web site designs with out preventing with undesirable types.
It’s extremely customizable and extensible, which provides us limitless flexibility.
It has a mobile-first strategy and simple implementation of responsive design patterns.
There’s the power to extract frequent, repetitive patterns into customized, reusable parts — normally with out writing a single line of customized CSS.
It has self-explanatory lessons. We will think about how the styled ingredient seems to be solely by studying the lessons.

Lastly, as Tailwind’s creators say:

it’s nearly unimaginable to assume this can be a good concept the primary time you see it — you need to truly attempt it.

So, let’s attempt it!

Getting Began with Tailwind

To exhibit Tailwind’s customization options, we have to set up it by way of npm:

npm set up tailwindcss

The subsequent step is to create a types.css file, the place we embrace the framework types utilizing the @tailwind directive:

@tailwind base;

@tailwind parts;

@tailwind utilities;

After that, we run the npx tailwind init command, which creates a minimal tailwind.config.js file, the place we’ll put our customization choices throughout the growth. The generated file incorporates the next:

module.exports =
theme: ,
variants: ,
plugins: [],

The subsequent step is to construct the types in an effort to use them:

npx tailwind construct types.css -o output.css

Lastly, we hyperlink the generated output.css file and Font Superior in our HTML:

And now, we’re prepared to start out creating.

Constructing a One-page Web site Template

In the remainder of the tutorial, we’ll construct a one-page web site template utilizing the ability and adaptability of Tailwind’s utility lessons.

Right here you possibly can see the template in motion.

I’m not going to elucidate each single utility (which might be boring and tiresome) so I counsel you to make use of the Tailwind cheatsheet as a fast reference. It incorporates all accessible utilities with their impact, plus direct hyperlinks to the documentation.

We’ll construct the template part by part. They’re Header, Companies, Tasks, Staff, and Footer.

We firstly wrap all part in a container:

The primary part — Header — will comprise a emblem on the left facet and navigation hyperlinks on the precise facet. Right here’s the way it will look:

Now, let’s discover the code behind it.

As you possibly can see, the lessons are fairly self-explanatory as I discussed above. We’ll discover solely the highlights.

First, we create a flex container and heart its objects horizontally and vertically. We additionally add some high and backside padding, which Tailwind combines in a single py utility. As you might guess, there’s additionally a px variant for left and proper. We’ll see that this kind of shorthand is broadly utilized in most of the different utilities. As a background coloration, we use the darkest blue (bg-blue-900) from Tailwind’s coloration palette. The palette incorporates a number of colours with shades for every coloration distributed from 100 to 900. For instance, blue-100, blue-200, blue-300, and so on.

In Tailwind, we apply a coloration to a property by specifying the property adopted by the colour and the shade quantity. For instance, text-white, bg-gray-800, border-red-500. Simple peasy.

For the brand on the left facet, we use a div ingredient, which we set to not shrink (flex-shrink-Zero) and transfer it a bit away from the sting by making use of the margin-left property (ml-10). Subsequent we use a Font Superior icon whose lessons completely mix with these of Tailwind. We use certainly one of them to make the icon orange. For the textual a part of the brand, we use huge, mild blue, semi-bolded textual content, with a small offset to the precise.

Within the center, we add an icon that shall be seen solely on cellular. Right here we use one of many responsive breakpoint prefixes (md). Tailwind, like Bootstrap and Basis, follows the mobile-first strategy. Because of this once we use utilities with out prefix (seen), they apply all the way in which from the smallest to the biggest gadgets. If we would like completely different styling for various gadgets, we have to use the breakpoint prefixes. So, in our case the icon shall be seen on small gadgets, and invisible (md:invisible) on medium and past.

On the proper facet we put the nav hyperlinks. We fashion the Residence hyperlink in another way, exhibiting that it’s the lively hyperlink. We additionally transfer the navigation from the sting and set it to be hidden on overflow (overflow-x-hidden). The navigation shall be hidden (hidden) on cellular and set to flex (md:flex) on medium and past.

You may learn extra about responsiveness within the documentation.


Let’s now create the following part, Companies. Right here’s the way it will look:

The Services section

And right here’s the code:

We provide one of the best net growth options.

UI Design

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac est massa.

We create a bit with mild blue background. Then we add an underlined title and a subtitle.

Subsequent, we use a flex container for the providers objects. We use flex-wrap so the objects will wrap on resize. We set the scale for every card and add some house and a drop shadow. Every card has a coloured part with a subject icon, a title, and an outline. And we additionally put a button with an icon within the bottom-right nook.

Right here we use one of many pseudo-class variants (hover, focus, and so on.). They’re utilized in the identical manner as responsive breakpoints. We use the pseudo-class prefix, adopted by a colon and the property identify (hover:bg-orange-300).

You may be taught extra about pseudo-class variants within the documentation.

For brevity, I present the code just for the primary card. The opposite ones are comparable. You need to change solely the colours, icons, and titles. See the ultimate HTML file on GitHub repo for a reference.


Let’s transfer to the following part, Tasks. Right here’s the ultimate look:

The Projects section

And right here’s the code:

Discover our wealthy and various portfolio.

First, you might discover that right here I exploit part lessons. They’re not from the Tailwind. I created them and can present you ways proper now.

As a result of all three center sections will share one and the identical base feel and look — which results in code repetition — now could be the time to start out pondering in parts. One of many nice options Tailwind presents is the power to extract and create simply and painlessly any type of customized parts. So, right here we’ll extract a customized part element.

Right here’s how. Open the types.css and add the next lessons proper after the parts declaration:

@tailwind parts;

@apply w-full p-6;



As you possibly can see, to create a element class we use the @apply directive adopted by the mandatory utilities. Right here’s extra details about extracting parts.

Now, to make use of the brand new lessons, we have to re-build the types once more:

npx tailwind construct types.css -o output.css

Now, as an alternative of a protracted array of utilities, we simply use one single class for every ingredient. And as you possibly can see, the customized lessons can be utilized safely at the side of the common utilities (part bg-blue-200).

Let’s transfer to the navigation buttons. We put them in a flex container and elegance them as nice-looking rectangles. However we need to make them a bit extra dynamic and classy by making use of slightly skew impact. The issue is that Tailwind doesn’t provide such utility. So, it’s time to discover ways to create our personal utilities. It’s tremendous straightforward.

Open types.css once more and add the wanted class proper after the utilities declaration:

@tailwind utilities;

remodel: skewX(-20deg);

What we would like is to skew the rectangles horizontally. For this we want the skewX() with a unfavourable worth. In Tailwind, utilities with unfavourable values are created by placing a minus signal earlier than the utility identify.

We will see the impact of our new utility instantly after we re-build the types.

Right here’s extra details about including new utilities.

Now, we create one other flex container for the challenge playing cards. We need to spherical their top-left and bottom-right corners, however the quantity of roundness which rounded utility presents is lower than we want. So, this time we’ll discover ways to customise the default Tailwind theme.

Open tailwind.config.js and add the borderRadius possibility after the theme.lengthen key:


Right here we use the lengthen key, as a result of we don’t need to override different choices, we need to embrace further choices. After we re-build the types, we are able to see how our new choices take impact.

To be taught extra about theme customization, go to the documentation.

There’s another factor we need to do which Tailwind doesn’t provide by default. We would like the cardboard to stand up a bit on hover. So we have to add a refined unfavourable margin on hover. However to make it work we have to allow the hover variant to the margin utility.

To take action, we put the next in tailwind.config.js:

variants: ,

The necessary factor right here is that we should at all times present the entire record of variants we need to allow, not solely the brand new ones.

Be taught extra about configuring variants within the documentation.

Now, let’s re-build the types and see the end result.


At this stage you’ve acquired a fairly good concept of how Tailwind works, and constructing the Staff part shall be fairly acquainted. Right here’s the way it will look:

The Team section

Right here’s the code:

Meet our expert professionals.

Jessica Thompson

UI Artisan

Right here, we create a set of profile playing cards. The code for them is very repetitive, so we’ll extract it in a reusable card element. We already know learn how to do it.

We create the cardboard lessons and put them within the types.css file:


@apply w-24 h-24 mx-auto rounded-full;



@apply flex justify-center items-center mt-2;


@apply text-orange-500;

Now, let’s re-build the types and use the cardboard lessons in our file. We swap the utilities with the lessons, and because of this we get a a lot shorter model of the code.

Meet our expert professionals.

Jessica Thompson

UI Artisan

Now we’ll take a look at the ultimate Footer part. It will comprise three columns and can appear to be this:

The Footer section

Right here’s the code:


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac est massa. Donec eget elementum sapien, tincidunt tempor nunc. Cras sodales id ipsum at convallis.

Morbi tristique massa nec massa auctor, at scelerisque felis consectetur. Morbi tempus et odio sit amet feugiat. Maecenas dignissim a turpis in molestie. Fusce tincidunt vestibulum iaculis.


A108 Adam Avenue
New York, NY 535022
United States
Cellphone: +1 5589 55488 55
E mail: data@webcraft.com


Right here, we create a three-column, responsive grid. For that we use the Flexbox utility and width utility with its responsive variants. Through the use of w-full md:w-1/three lessons, we drive the columns to be stacked on cellular, and in a row on medium and past.

Within the first column, the textual content shall be left-aligned on medium and past (md:text-left).

Within the second column, we put some contact info and a social sharing widget. Let’s see learn how to create it.

We use a sq. flex container the place we put 4 smaller squares positioned evenly on every nook. We rotate all squares 45 levels. Inside every small sq. we put a social icon which we rotate -45 levels to align it to its container. On hover, every small sq. strikes a bit outdoors the massive sq..

As we are able to see, we have to create two extra utilities for the rotation operations. So, we open types.css once more and add the mandatory lessons:

remodel: rotate(-45deg);

Now, re-build the types and see the outcomes.

Within the final column, we’ve got a refined contact kind.

Final Issues

You’ve already seen for positive that the ultimate file measurement is fairly huge. Don’t fear, this may be mounted. For detailed info, see the controlling file measurement part of the documentation.

I deliberately left extra locations with code repetition within the template. You already know learn how to cope with this situation, and it will likely be train to extract it into parts as reinforcement.


As you possibly can see, Tailwind offers you an easy workflow, with out limiting choices or limiting flexibility. The utility-first strategy supplied by Tailwind is efficiently carried out by massive firms like GitHub, Heroku, Kickstarter, Twitch, Section, and extra.

For me, personally, after many hours of “preventing” and “battling” with types from frameworks like Bootstrap, Basis, Semantic UI, UIkit, and Bulma, utilizing Tailwind utilities seems like flying freely in a cloudless sky.

Ivaylo Gerchev

Ivaylo Gerchev is a self-taught net developer/designer. He likes to play with HTML, CSS, jQuery, PHP, and WordPress, in addition to Photoshop and Illustrator. Ivaylo’s motto is “Minimal effort for optimum impact!”

Leave a Reply