tailwindcss icon indicating copy to clipboard operation
tailwindcss copied to clipboard

[v4] @apply not effected (SvelteKit, Vite)

Open szig83 opened this issue 11 months ago • 15 comments

What version of Tailwind CSS are you using?

4.0.0-alpha.9

What build tool (or framework if it abstracts the build tool) are you using?

Svelte 5.0.0-next.80, SvelteKit 2.5.4, @tailwindcss/vite 4.0.0-alpha.9, vite 5.2.2

What version of Node.js are you using?

For example: v20.10.0

What browser are you using?

Brave (Chrome), Firefox, Safari

What operating system are you using?

macOS

Reproduction URL

https://github.com/szig83/svelte5-tailwind4 (https://github.com/szig83/svelte5-tailwind4/blob/main/src/routes/%2Bpage.svelte)

Describe your issue The problematic code snippet can be found in the src/routes/+page.svelte file. I created a custom CSS class where I wanted to use the @apply directive. There is no error during build and runtime, but the @apply directive seems to not take effect. The div element with the Tailwind class (bg-gray-700) is applied correctly.

szig83 avatar Mar 21 '24 16:03 szig83

@apply should be deprecated

coolemur avatar Mar 23 '24 23:03 coolemur

And what would be the solution if I want to apply Tailwind classes within my own class definition?

szig83 avatar Mar 24 '24 09:03 szig83

And what would be the solution if I want to apply Tailwind classes within my own class definition?

The main question is why you think you need @apply, not why you don't have it.

Take a look a this: https://twitter.com/adamwathan/status/1226511611592085504?lang=en

coolemur avatar Mar 25 '24 01:03 coolemur

And if you really need it, why not just apply plain CSS class with custom styles? This must be exceptional use case, not a pattern in your code anyway.

coolemur avatar Mar 25 '24 01:03 coolemur

I see. It's logical after all :) Thanks for the info.

szig83 avatar Mar 25 '24 06:03 szig83

I think it should still be included for CMS that uses content from a WYSIWYG for example. I do have some default styles using Tailwind for some blocs :)

QuentiumYT avatar Apr 22 '24 08:04 QuentiumYT

I like @apply, but I think it might be less relevant in v4 when everything is configured via custom properties, as you can access those also in vanilla CSS.

fweth avatar May 09 '24 10:05 fweth

Just because there are lots of bad use cases for @apply doesn't mean there aren't some great ones too!

If anything, given v4 ships CSS-first configuration and built-in nesting support, I think the use case for @apply is even stronger than it was before.

For example, roll your own .prose class for styling HTML you don't control:

@layer components {
  .prose {
    @apply text-neutral-700 *:first:mt-0 *:last:mb-0;
    caption {
      @apply caption-bottom mt-4 text-left text-xs;
    }
    del {
      @apply opacity-70;
    }
    iframe {
      @apply border-0;
    }
    p {
      @apply my-4;
    }
    /* etc. etc. etc. */
  }
}

This approach stays true to Tailwind, but is much more readable than the alternative. I'd love to see this supported.

aaronadamsCA avatar Jun 05 '24 18:06 aaronadamsCA

Just because there are lots of bad use cases for @apply doesn't mean there aren't some great ones too!

If anything, given v4 ships CSS-first configuration and built-in nesting support, I think the use case for @apply is even stronger than it was before.

For example, roll your own .prose class for styling HTML you don't control:

@layer components {
  .prose {
    @apply text-neutral-700 *:first:mt-0 *:last:mb-0;
    caption {
      @apply caption-bottom mt-4 text-left text-xs;
    }
    del {
      @apply opacity-70;
    }
    iframe {
      @apply border-0;
    }
    p {
      @apply my-4;
    }
    /* etc. etc. etc. */
  }
}

This approach stays true to Tailwind, but is much more readable than the alternative. I'd love to see this supported.

Yes and no.

By enabling @apply you open door to abusing it (And developers will. Espacially in larger code bases. You won't be able to enforce the rule "don't create custom utils using @apply - which defeats the purpose of Tailwind")

And this prose case is just exception that could be handled using pure CSS instead of applying styles.

coolemur avatar Jun 06 '24 12:06 coolemur

To those who disagree - wait till you work on big scale project with larger team who will abuse @apply rule... Then you will understand my concern. 🤙

coolemur avatar Jun 06 '24 12:06 coolemur

I don't think software should make itself non-abusable. If @apply is difficult to maintain and there are more important features that could use those ressources, then sure, drop it. But otherwise, I'd say it's the responsibility of the library users to ensure clean code, not the responsibility of the library authors.

fweth avatar Jun 06 '24 12:06 fweth

I agree, a lot of developers write the code how they want. We should have the ability to choose what to write and how we use the features. Indeed, there is some good and bad ways but sometimes we have to use some "deprecated" features rather than the forced way to do it.

QuentiumYT avatar Jun 06 '24 12:06 QuentiumYT

I don't agree, seeing abused code on a daily basis where it could be solved worldwide with a single opinionated solution 🙃

It's like seatbelts or DUI - if ppl had freedom, they would make big mistakes.

And I am telling you right-now: freedom + saying "don't use it" will not work. 😆

coolemur avatar Jun 06 '24 13:06 coolemur

In any case, please don't take nesting support away :D

fweth avatar Jun 06 '24 14:06 fweth

Having the same issue:

image

image

What version of Tailwind CSS are you using?

4.0.0-alpha.17

What build tool (or framework if it abstracts the build tool) are you using?

Svelte 5, vite 5.0.3

What version of Node.js are you using?

v20.10.0

What browser are you using?

Chrome, Firefox

What operating system are you using?

Ubuntu 24.04

Reproduction URL

https://github.com/lucas-subli/svelte-5-tailwind-4

pnpm install
pnpm start

Describe your issue

Using a class that has @apply does not seem to work, in the example the text should be red, but it is not. This was working with Tailwind 3 using postcss.

A small defense for @apply

@apply is very useful for making components with variation. For example, in a project that has 3 types of a buttons, standard, outline, and text with 3 possible colors primary, accent, and danger.

It is easy to create a svelte component with class="{type} {color}" And define .standard .outlined (...) .danger styles with @apply Removing apply would make this much harder than it needs to be

lucas-subli avatar Jul 17 '24 15:07 lucas-subli