tailwindcss/packages
Jordan Pittman a144360217
Add support for prefixes (#14501)
This PR adds support for requiring a custom prefix on utility classes.

Prefixes work a bit differently in v4 than they did in v3:
- They look like a custom variant: `tw:bg-white`
- It is always first in a utility — even before other variants:
`tw:hover:bg-white`
- It is required on **all** utility classes — even arbitrary properties:
`tw:[color:red]`
- Prefixes also apply to generated CSS variables which will be separated
by a dash: `--tw-color-white: #fff;`
- Only alpha (a-z) characters are allowed in a prefix — so no `#tw#` or
`__` or similar prefixes are allowed

To configure a prefix you can use add `prefix(tw)` to your theme or when
importing Tailwind CSS like so:

```css
/* when importing `tailwindcss` */
@import 'tailwindcss' prefix(tw);

/* when importing the theme separately */
@import 'tailwindcss/theme' prefix(tw);

/* or when using an entirely custom theme */
@theme prefix(tw) {
  --color-white: #fff;
  --breakpoint-sm: 640px;
  /* … */
}
```

This will configure Tailwind CSS to require a prefix on all utility
classes when used in HTML:

```html
<div class="tw:bg-white tw:p-4">
  This will have a white background and 4 units of padding.
</div>

<div class="bg-white p-4">
  This will not because the prefix is missing.
</div>
```

and when used in CSS via `@apply`:
```css
.my-class {
  @apply tw:bg-white tw:p-4;
}
```

Additionally, the prefix will be added to the generated CSS variables.
You **do not** need to prefix the variables in the `@theme` block
yourself — Tailwind CSS handles this automatically.

```css
:root {
  --tw-color-white: #fff;
  --tw-breakpoint-sm: 640px;
}
```

A prefix is not necessary when using the `theme(…)` function in your CSS
or JS given that plugins will not know what the current prefix is and
must work with or without a prefix:

```css
.my-class {
  color: theme(--color-white);
}
```

However, because the variables themselves are prefixed when outputting
the CSS, you **do** need to prefix the variables when using `var(…)` in
your CSS:

```css
.my-class {
  color: var(--tw-color-white);
}
```

If you want to customize the prefix itself change `tw` to something
else:

```css
/* my:underline, my:hover:bg-red-500, etc… */
@import 'tailwindcss' prefix(my);
```

---------

Co-authored-by: Philipp Spiess <hello@philippspiess.com>
2024-09-25 10:06:37 -04:00
..
@tailwindcss-cli Release v4.0.0-alpha.25 (#14507) 2024-09-24 17:03:00 +00:00
@tailwindcss-node Release v4.0.0-alpha.25 (#14507) 2024-09-24 17:03:00 +00:00
@tailwindcss-postcss Release v4.0.0-alpha.25 (#14507) 2024-09-24 17:03:00 +00:00
@tailwindcss-standalone Release v4.0.0-alpha.25 (#14507) 2024-09-24 17:03:00 +00:00
@tailwindcss-upgrade CSS codemod: do not wrap comment nodes in @layer (#14517) 2024-09-25 12:58:05 +00:00
@tailwindcss-vite Release v4.0.0-alpha.25 (#14507) 2024-09-24 17:03:00 +00:00
internal-example-plugin Prefix internal modules with internal-* (#14074) 2024-07-29 10:58:07 -04:00
tailwindcss Add support for prefixes (#14501) 2024-09-25 10:06:37 -04:00
tsconfig.base.json introduce v4 codebase 2024-03-05 14:29:15 +01:00