Docs says in v4 base and components layers are still defined with @layer base and @layer components, also in v3 classes defined like that could be used with @apply. The problem is they fail in v4.
https://tailwindcss.com/docs/adding-custom-styles#adding-base-styles
Practically it means I am forced to define all base, components and utilities layers with @utility to be able to use those classes with @apply which of course would create a big mess.
I could define all layers with @utility and then set layers in @import statement but that also doesn't look too nice.
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/base.css" layer(base);
@import "tailwindcss/components.css" layer(components);
@import "tailwindcss/utilities.css" layer(utilities);
So at the end how to do this in v4? I already have a lot of code that uses custom classes with @apply defined in base and components layers and now in v4 they produce Cannot apply unknown utility class. On the other hand I dont want to define base and components as utilities.
I saw similar Github issues without obvious solution. If I use @reference I get @custom-variant cannot be nested. and @utility cannot be nested..
https://github.com/tailwindlabs/tailwindcss/discussions/16429
https://github.com/tailwindlabs/tailwindcss/discussions/13336
You can see my styles code here:
https://github.com/nemanjam/nemanjam.github.io/tree/feat/tailwind4-v2/src/styles
In v4, Tailwind doesn't "hijack" the @layer at-rule anymore.
On the other hand I dont want to define base and components as utilities.
You'd need to use @utility to let Tailwind know about class names and thus be able to use them with @apply.
You can use @layer inside @utility to place them in the appropriate cascade layer, like:
@utility foo {
@layer base {
…
}
}
Ideally, you'd use your templates to define the components, instead of writing any CSS. Adam Wathan (creator of Tailwind) does seem to advocate avoiding @apply:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With