Top 5 Advanced Tailwind Tips to Supercharge Your Web Development
Tags: tailwindcss, tip, css
Published: 2023-07-04 05:37:11

## Introduction

Tailwind CSS has gained immense popularity among web developers due to its utility-first approach and easy customization options. While many developers are familiar with the basics of Tailwind, there are several advanced techniques and tips that can take your Tailwind skills to the next level.

In this article, we will explore the top five advanced Tailwind tips that will help you optimize your workflow, enhance your designs, and make your development process more efficient.

## Copying classnames is perfectly fine

Many times you might have come across a situation where you repeat a classnames a bunch of time like this 👇

```tsx
 <ul>
      <li className="text-lg font-medium text-blue-600 hover:opacity-80">
        Home
      </li>
      <li className="text-lg font-medium text-blue-600 hover:opacity-80">
        About
      </li>
      <li className="text-lg font-medium text-blue-600 hover:opacity-80">
        Contact
      </li>
      <li className="text-lg font-medium text-blue-600 hover:opacity-80">
        Signin
      </li>
 </ul>
```

You might get tempted to create a separate component for `<li>` to apply styles. Creating a separate component for `<li>` solely to apply styles may not be necessary, in my opinion. Instead, you can leverage the capabilities of your text editor, such as multi-cursor editing. Alternatively, you can style a single `<li>` first, applying the desired design, and then simply copy the class names from that `<li>` to reuse them elsewhere. This approach can save time and streamline the development process

## Dark mode

If you have implemented a dark mode using the `class` strategy, you may have noticed that your sidebar appears white in color, which doesn't look quite right. To resolve this issue, you can rectify it by setting the `color-scheme` property of `html` element to `light dark`.

```css
html.dark{
    color-scheme: dark light;
}
``` 
If you're unsure about implementing dark mode in a React+Tailwind project, I have written a detailed article explaining the process. Take a look to learn how to effectively incorporate dark mode into your projects.
 
{% cta https://dev.to/bhendi/simplest-way-to-implement-darkmode-in-your-react-tailwind-project-2e14 %} View artcle {% endcta %}  

## Using `ring` utility to create shadows

Tailwind provides pre-defined classes for box-shadow, but none of them create an evenly distributed shadow in all four directions. However, you can accomplish this by utilizing the `ring` utility.

```tsx
className = "ring-1 ring-black/10"
```
## Optimize Workflow with Plugins

Tailwind offers a vast ecosystem of plugins that extend its functionality and streamline your workflow. Plugins can add new components, utilities, or even integrate with other libraries. Familiarize yourself with popular plugins such as Typography, Forms, Aspect Ratio, or Transition utilities to boost your productivity. 

By leveraging plugins, you can enhance your designs and reduce the need for writing custom CSS.

If you are building a PWA you should definitely check [this](https://www.npmjs.com/package/tailwindcss-displaymodes) plugin I made. It helps you to increase the UX of your PWA.

## Using `tailwind-merge` instead of regular classname constructer

When incorporating Tailwind CSS into a JavaScript framework, you might have utilized packages such as `classnames` or `clsx` to dynamically generate class names for elements based on your custom logic. These packages streamline the task of conditionally adding class names, making the process much simpler and more efficient.

However, if you're building your own design system and require your components/elements to accept a classname prop that can modify specific styles of your components, I suggest utilizing `tailwind-merge` instead of `clsx` or `classnames`.

Imagine this is how you are computing classname for your component

```tsx
type Props = ComponentProps<"a">;
const Test = ({ className, ...rest }: Props) => {
  return (
    <a
      {...rest}
      className={clsx(
        "classes required to satisfy your design system",
        className
      )}
    >
      Test
    </a>
  );
};
```
for arguments sake let's assume this the className 
```tsx
 className={clsx("text-blue-600 text-4xl font-bold", className)}
```
and you wish to change the text color to fuchsia-600, you can easily pass `text-fuchsia-600` as the className, and it will work seamlessly. However, if you attempt to change the text color to black by passing `text-black`, it won't have the desired effect. 

This is due to the nature of Tailwind, where utility classes are applied, and each class carries the same level of specificity. As a result, when multiple classes modify the same element property, the class that appears later takes precedence. This behavior aligns with the standard CSS principles.

Let's look at the classnames computed in both the cases
```tsx
// when text-fuchsia-600 is passed className = "text-blue-600 text-4xl font-bold text-fuchsia-600"

// when text-black is passed as className = "text-blue-600 text-4xl font-bold text-black"

```

Now we will swap `tailwind-merge` for clsx or classnames and let's look at the computed classes again.

```tsx
// when text-fuchsia-600 is passed className = "text-4xl font-bold text-fuchsia-600"

// when text-black is passed as className = "text-4xl font-bold text-black"

```
If you have noticed keenly `tailwind-merge` just removed conflicting classes altogether 🤯.

Amazed by what `tailwind-merge` can achieve ? Start using it today by downloading through npm
```powershell
npm i tailwind-merge
```
If you want to know more about `tailwind-merge` watch this tutorial by Simonwiss on Youtube
 
{% embed https://youtu.be/tfgLd5ZSNPc %}
 
## Conclusion

Tailwind CSS is a powerful utility-first framework that offers numerous advanced techniques to enhance your web development workflow. In this article, we explored five valuable tips to take your Tailwind skills to the next level.

I encourage you to try out these advanced Tailwind tips in your web development projects. 

I would love to hear about your experiences and feedback. Please feel free to share your thoughts and insights in the comments section below. Your feedback is valuable and can help further refine these techniques and contribute to the Tailwind CSS community.

If you enjoyed reading this post and want to stay connected, make sure to check out my [Linktree](https://linktr.ee/jyothikrishna22).

**Happy Hacking**