@layer
Any custom styles you add to the base
, components
, or utilities
layers will only be included in your compiled CSS if those styles are actually used in your HTML.
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
/* This won't be included in your compiled CSS unless you actually use it */
.card {
/* ... */
}
}
If you want to add some custom CSS that should always be included, add it to your stylesheet without using the @layer
directive:
@tailwind base;
@tailwind components;
/* This will always be included in your compiled CSS */
.card {
/* ... */
}
@tailwind utilities;
Precedence
Make sure to put your custom styles where they need to go to get the precedence behavior you want. In the example above, we've added the .card
class before @tailwind utilities
to make sure utilities can still override it.
Use the @layer
directive to tell Tailwind which “bucket” a set of custom styles belong to. Valid layers are base
, components
, and utilities
.
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
h1 {
@apply text-2xl;
}
h2 {
@apply text-xl;
}
}
@layer components {
.btn-blue {
@apply rounded bg-blue-500 py-2 px-4 font-bold text-white hover:bg-blue-700;
}
}
@layer utilities {
.filter-none {
filter: none;
}
.filter-grayscale {
filter: grayscale(100%);
}
}
@layer components
By defining component classes in the components
layer you can still use utility classes to override them when necessary:
@layer components {
.card {
background-color: theme(colors.white);
border-radius: theme(borderRadius.lg);
padding: theme(spacing.6);
box-shadow: theme(boxShadow.xl);
}
/* ... */
}
<div class="card rounded-none">
<!-- ... -->
</div>
The components
layer is also a good place to put custom styles for any third-party components you're using:
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.select2-dropdown {
@apply rounded-b-lg shadow-md;
}
.select2-search {
@apply rounded border border-gray-300;
}
.select2-results__group {
@apply text-lg font-bold text-gray-900;
}
/* ... */
}
@apply
directive
Use @apply
to inline any existing utility classes into your own custom CSS.
Here's what a .btn-primary
class might look like using @apply
to compose it with existing Tailwind utilities:
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply rounded-lg bg-blue-500 py-2 px-4 font-semibold text-white shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
}
}
You can also use @apply
with your custom global CSS classes and customizations to the theme
.
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.foo {
color: blue;
}
.bar {
@apply foo;
}
}
theme
function
Use the theme
function or @apply
directive when adding custom component styles if you want to refer to any of the values defined in your theme
.
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.card {
background-color: theme(colors.white);
border-radius: theme(borderRadius.lg);
padding: theme(spacing.6);
box-shadow: theme(boxShadow.xl);
}
.btn-blue {
background-color: theme(colors.blue.500 / 75%);
}
/* ... */
}
Modifiers
Wrapping any custom CSS in a @layer
directive also makes it possible to use modifiers with those rules, like hover:
and focus:
or responsive modifiers like md:
and lg:
.
Plugins
You can also add custom styles to your project using Tailwind's plugin
system instead of using a CSS file. CSS properties will be written in CSS-in-JS
syntax:
const plugin = require('tailwindcss/plugin');
module.exports = {
// ...
plugins: [
plugin(function ({ addBase, addComponents, addUtilities, theme }) {
addBase({
h1: {
fontSize: theme('fontSize.2xl'),
},
h2: {
fontSize: theme('fontSize.xl'),
},
});
addComponents({
'.card': {
backgroundColor: theme('colors.white'),
borderRadius: theme('borderRadius.lg'),
padding: theme('spacing.6'),
boxShadow: theme('boxShadow.xl'),
},
});
addUtilities({
'.content-auto': {
contentVisibility: 'auto',
},
});
}),
],
};
From the Tailwind CSS↗ docs.