No description
Find a file
Robin Malfait be51739337
Arbitrary variants (#8299)
* register arbitrary variants

With the new `addVariant` API, we have a beautiful way of creating new
variants.

You can use it as:
```js
addVariant('children', '& > *')
```

Now you can use the `children:` variant. The API uses a `&` as a
reference for the candidate, which means that:
```html
children:pl-4
```

Will result in:
```css
.children\:pl-4 > * { .. }
```

Notice that the `&` was replaced by `.children\:pl-4`.

We can leverage this API to implement arbitrary variants, this means
that you can write those `&>*` (Notice that we don't have spaces) inside
a variant directly. An example of this can be:
```html
<ul class="[&>*]:underline">
  <li>A</li>
  <li>B</li>
  <li>C</li>
</ul>
```
Which generates the following css:
```css
.\[\&\>\*\]\:underline > * {
  text-decoration-line: underline;
}
```

Now all the children of the `ul` will have an `underline`. The selector
itself is a bit crazy since it contains the candidate which is the
selector itself, it is just escaped.

* add tests for arbitrary variants

This still requires some work to the `defaultExtractor` to make sure it
all works with existing code.

* update changelog

* Fix candidate detection for arbitrary variants

* Refactor

* Add support for at rules

* Add test for attribute selectors

* Fix test

* Add attribute selector support

* Split top-level comma parsing into a generalized splitting routine

We can now split on any character at the top level with any nesting. We don’t balance brackets directly here but this is probably “enough”

* Split variants by separator at the top-level only

This means that the separator has to be ouside of balanced brackets

* Fix extraction when using custom variant separators

* Support custom separators when top-level splitting variants

* Add a second multi-character separator test

* Split tests for at-rule and at-rule with selector changes

* Add nested at-rule tests

* Fix space-less at-rule parsing in addVariant

* Add test for using with `@apply`

Co-authored-by: Jordan Pittman <jordan@cryptica.me>
Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
2022-05-08 12:24:59 -04:00
.github Update CONTRIBUTING.md (#7723) 2022-03-02 08:14:18 -05:00
integrations Support postcss config options in config file in the CLI (#8226) 2022-04-28 15:14:36 -04:00
jest JIT: Optimize universal selector usage by inlining only the relevant selectors (#4850) 2021-07-01 06:33:37 -04:00
nesting Ensure to transpile the PostCSS Nesting plugin (tailwindcss/nesting) (#7080) 2022-01-15 16:07:20 +01:00
perf Performance improvements + memory leak fix (#3032) 2020-12-11 15:03:49 +01:00
scripts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
src Arbitrary variants (#8299) 2022-05-08 12:24:59 -04:00
standalone-cli Remove cross-env and postcss-cli deps (#6964) 2022-01-07 15:40:36 -05:00
stubs Re-enable new features 2022-04-12 14:13:04 -04:00
tests Arbitrary variants (#8299) 2022-05-08 12:24:59 -04:00
types Update screens types (#8042) 2022-04-05 11:46:50 +01:00
.editorconfig Convert new stuff to use ES6 modules 2017-08-27 18:02:41 -04:00
.eslintignore Generate plugin list file (#4725) 2021-06-23 14:13:03 -04:00
.eslintrc.json Remove duplicate prettier.config.js settings from .eslintrc.json (#5087) 2021-09-01 17:41:43 +02:00
.gitignore ensure generated types are published as well 2022-03-22 10:46:38 +01:00
.swcrc Switch to swc from babel (#5593) 2021-09-24 19:17:19 +02:00
base.css Remove preflight CSS export in favor of base 2019-02-11 12:38:46 -05:00
CHANGELOG.md Arbitrary variants (#8299) 2022-05-08 12:24:59 -04:00
colors.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
colors.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
components.css Move CSS files to root for easier imports 2018-03-13 10:05:24 -04:00
defaultConfig.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
defaultConfig.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
defaultTheme.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
defaultTheme.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
LICENSE Update LICENSE 2022-02-05 15:22:47 -05:00
package-lock.json Update jest-diff to version 28.0.2 (#8257) 2022-05-04 13:00:48 -04:00
package.json Update jest-diff to version 28.0.2 (#8257) 2022-05-04 13:00:48 -04:00
plugin.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
plugin.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
prettier.config.js Add Prettier configuration file (prettier.config.js) (#3713) 2021-05-13 09:07:24 -04:00
README.md Update logo in readme 2021-12-17 15:25:53 -05:00
resolveConfig.js Add default interop to public available functions (#6348) 2021-12-10 11:25:10 +01:00
screens.css Add screen.css file for postcss-import convenience 2019-05-12 10:36:59 -04:00
tailwind.css Undo accidental changes to CDN build process 2019-12-25 13:54:09 -05:00
types.d.ts Add TypeScript types for the tailwind.config.js file (#7891) 2022-03-22 10:24:28 +01:00
utilities.css Move CSS files to root for easier imports 2018-03-13 10:05:24 -04:00
variants.css JIT: Replace @tailwind screens with @tailwind variants (#4356) 2021-05-14 13:58:52 -04:00

Tailwind CSS Tailwind CSS

A utility-first CSS framework for rapidly building custom user interfaces.

Build Status Total Downloads Latest Release License


Documentation

For full documentation, visit tailwindcss.com.

Community

For help, discussion about best practices, or any other conversation that would benefit from being searchable:

Discuss Tailwind CSS on GitHub

For casual chit-chat with others using the framework:

Join the Tailwind CSS Discord Server

Contributing

If you're interested in contributing to Tailwind CSS, please read our contributing docs before submitting a pull request.