-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add radial and conic gradient utilities #14467
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
99ba042
to
0eeb4d3
Compare
thecrypticace
approved these changes
Sep 19, 2024
0eeb4d3
to
82ae5ed
Compare
adamwathan
added a commit
that referenced
this pull request
Sep 20, 2024
This PR adds new `bg-radial-*` and `bg-conic-*` utilities for radial and conic gradients. It also adds support for "arbitrary gradients", where gradient utilities like `bg-linear-*`, `bg-radial-*`, and `bg-conic-*` can now accept a complete gradient definition as their arbitrary value. ## Radial gradients Radial gradients are created with the `bg-radial` utility, or the `bg-radial-[…]` utility, combined with the existing `from-*`, `via-*`, and `to-*` utilities. The simple `bg-radial` utility just creates a radial gradient with no position information, which defaults to `center`: ``` radial-gradient({from}, {via}, {to}); ``` If you use the arbitrary value format, whatever you provide as the arbitrary value is inserted into the first position: ``` radial-gradient({arbitrary value}, {from}, {via}, {to}); ``` So a utility like `bg-radial-[at_top_left]` would produce this: ``` radial-gradient(at top left, {from}, {via}, {to}); ``` This makes it possible to use some of the `radial-gradient(…)` features that this PR doesn't add first class support for, like using values like `circle at center` or providing a specific interpolation color space like `in hsl longer hue`. We may add explicit APIs for these in the future, but I'm proposing this PR first since those changes would be purely additive and none of the decisions here would create any conflict with those APIs. ## Conic gradients Conic gradients are created with the `bg-conic`, `bg-conic-{bareNumber}`, and `bg-conic-[…]` utilities, combined with the existing `from-*`, `via-*`, and `to-*` utilities. The `bg-conic` utility creates a conic gradient with no angle, which defaults to `0deg`: ``` conic-gradient({from}, {via}, {to}); ``` The `bg-conic-{bareNumber}` utilities create conic gradients using the bare number as the angle: ``` conic-gradient(from {bareNumber}deg, {from}, {via}, {to}); ``` The `bg-conic-[…]` arbitrary value utilities insert whatever you provide as the arbitrary value into the first position verbatim: ``` conic-gradient({arbitraryValue}, {from}, {via}, {to}); ``` So a utility like `bg-conic-[from_45deg_in_hsl]` would produce this: ``` conic-gradient(from 45deg in hsl, {from}, {via}, {to}); ``` Note that the `from` keyword needs to be provided by the user when using arbitrary values, but not when using bare values. This makes it possible to use some of the `conic-gradient(…)` features that this PR doesn't add first class support for, like using values like `at 0 0` or providing a specific interpolation color space like `in hsl longer hue`. We may add explicit APIs for these in the future, but I'm proposing this PR first since those changes would be purely additive and none of the decisions here would create any conflict with those APIs. ## Arbitrary gradients Prior to this PR, utilities like `bg-linear-[…]` could only accept positional information as their arbitrary value, like `bg-linear-[to_top_right]`. All of the color stops could only be provided using the `from-*`, `via-*`, and `to-*` utilities. If you wanted to provide the complete gradient in one class, you needed to use `bg-[…]` and write out the gradient function yourself: ```html <div class="bg-[linear-gradient(to_right,var(--color-red-500),var(--color-yellow-400))]"> ``` This PR refactors some things internally to make it possible to provide the entire gradient as the arbitrary value to each background gradient utility, like this: ```html <div class="bg-linear-[to_right,var(--color-red-500),var(--color-yellow-400)]"> ``` This is nice if you're doing something very custom and you want to be able to look at the whole value together, while still avoiding some of the boilerplate you'd have if you had to write out the entire gradient function yourself. --------- Co-authored-by: Adam Wathan <4323180+adamwathan@users.noreply.github.com>
philipp-spiess
added a commit
that referenced
this pull request
Sep 27, 2024
…*` (#14537) In v4, we're making room for more gradient primitives with the addition of [gradient and conic gradient utilities](#14467). To make this clearer, we are renaming all v3 `bg-gradient-*` utilities to `bg-linear-*` to make it clear that these refer to linear gradients. This PR adds a migration that will automatically update the class names based on this migration.
adamwathan
added a commit
that referenced
this pull request
Oct 17, 2024
This PR adds support for linear gradient angles as bare values, like this: ``` bg-linear-45 => linear-gradient(45deg, …) ``` We already support this for [conic gradients](#14467), so this makes these utilities more consistent. --------- Co-authored-by: Adam Wathan <4323180+adamwathan@users.noreply.github.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds new
bg-radial-*
andbg-conic-*
utilities for radial and conic gradients. It also adds support for "arbitrary gradients", where gradient utilities likebg-linear-*
,bg-radial-*
, andbg-conic-*
can now accept a complete gradient definition as their arbitrary value.Radial gradients
Radial gradients are created with the
bg-radial
utility, or thebg-radial-[…]
utility, combined with the existingfrom-*
,via-*
, andto-*
utilities.The simple
bg-radial
utility just creates a radial gradient with no position information, which defaults tocenter
:If you use the arbitrary value format, whatever you provide as the arbitrary value is inserted into the first position:
So a utility like
bg-radial-[at_top_left]
would produce this:This makes it possible to use some of the
radial-gradient(…)
features that this PR doesn't add first class support for, like using values likecircle at center
or providing a specific interpolation color space likein hsl longer hue
. We may add explicit APIs for these in the future, but I'm proposing this PR first since those changes would be purely additive and none of the decisions here would create any conflict with those APIs.Conic gradients
Conic gradients are created with the
bg-conic
,bg-conic-{bareNumber}
, andbg-conic-[…]
utilities, combined with the existingfrom-*
,via-*
, andto-*
utilities.The
bg-conic
utility creates a conic gradient with no angle, which defaults to0deg
:The
bg-conic-{bareNumber}
utilities create conic gradients using the bare number as the angle:The
bg-conic-[…]
arbitrary value utilities insert whatever you provide as the arbitrary value into the first position verbatim:So a utility like
bg-conic-[from_45deg_in_hsl]
would produce this:Note that the
from
keyword needs to be provided by the user when using arbitrary values, but not when using bare values.This makes it possible to use some of the
conic-gradient(…)
features that this PR doesn't add first class support for, like using values likeat 0 0
or providing a specific interpolation color space likein hsl longer hue
. We may add explicit APIs for these in the future, but I'm proposing this PR first since those changes would be purely additive and none of the decisions here would create any conflict with those APIs.Arbitrary gradients
Prior to this PR, utilities like
bg-linear-[…]
could only accept positional information as their arbitrary value, likebg-linear-[to_top_right]
. All of the color stops could only be provided using thefrom-*
,via-*
, andto-*
utilities.If you wanted to provide the complete gradient in one class, you needed to use
bg-[…]
and write out the gradient function yourself:This PR refactors some things internally to make it possible to provide the entire gradient as the arbitrary value to each background gradient utility, like this:
This is nice if you're doing something very custom and you want to be able to look at the whole value together, while still avoiding some of the boilerplate you'd have if you had to write out the entire gradient function yourself.