Skip to content

Commit 7b63886

Browse files
[v4] Support arbitrary gradient angles (tailwindlabs#13783)
* Support arbitrary gradient angles * Update changelog * Use the `bg-linear` namespace instead * Tweak comments * Update changelog * Support negative angles * Update changelog * Update changelog * Update changelog * Update changelog
1 parent 640ecf6 commit 7b63886

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
### Added
1717

1818
- Add `nth-*` variants ([#13661](https://github.com/tailwindlabs/tailwindcss/pull/13661))
19+
- Add `bg-linear-*` utilities as an alias for the existing `bg-gradient-*` utilities ([#13783](https://github.com/tailwindlabs/tailwindcss/pull/13783))
20+
- Support arbitrary linear gradient angles (e.g. `bg-linear-[125deg]`) ([#13783](https://github.com/tailwindlabs/tailwindcss/pull/13783))
1921

2022
## [4.0.0-alpha.15] - 2024-05-08
2123

packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,14 @@ exports[`getClassList 1`] = `
490490
"bg-left",
491491
"bg-left-bottom",
492492
"bg-left-top",
493+
"bg-linear-to-b",
494+
"bg-linear-to-bl",
495+
"bg-linear-to-br",
496+
"bg-linear-to-l",
497+
"bg-linear-to-r",
498+
"bg-linear-to-t",
499+
"bg-linear-to-tl",
500+
"bg-linear-to-tr",
493501
"bg-local",
494502
"bg-no-repeat",
495503
"bg-none",

packages/tailwindcss/src/utilities.test.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7690,6 +7690,8 @@ test('bg', () => {
76907690

76917691
// background-image
76927692
'bg-none',
7693+
7694+
// Legacy linear-gradient API
76937695
'bg-gradient-to-t',
76947696
'bg-gradient-to-tr',
76957697
'bg-gradient-to-r',
@@ -7698,10 +7700,26 @@ test('bg', () => {
76987700
'bg-gradient-to-bl',
76997701
'bg-gradient-to-l',
77007702
'bg-gradient-to-tl',
7703+
7704+
// Modern linear-gradient API
7705+
'bg-linear-to-t',
7706+
'bg-linear-to-tr',
7707+
'bg-linear-to-r',
7708+
'bg-linear-to-br',
7709+
'bg-linear-to-b',
7710+
'bg-linear-to-bl',
7711+
'bg-linear-to-l',
7712+
'bg-linear-to-tl',
7713+
77017714
'bg-[url(/image.png)]',
77027715
'bg-[url:--my-url]',
77037716
'bg-[linear-gradient(to_bottom,red,blue)]',
77047717
'bg-[image:--my-gradient]',
7718+
'bg-linear-[125deg]',
7719+
'bg-linear-[1.3rad]',
7720+
'bg-linear-[to_bottom]',
7721+
'-bg-linear-[125deg]',
7722+
'-bg-linear-[1.3rad]',
77057723

77067724
// background-size
77077725
'bg-auto',
@@ -7794,6 +7812,14 @@ test('bg', () => {
77947812
background-color: #0000;
77957813
}
77967814
7815+
.-bg-linear-\\[1\\.3rad\\] {
7816+
background-image: linear-gradient(calc(74.4845deg * -1), var(--tw-gradient-stops, ));
7817+
}
7818+
7819+
.-bg-linear-\\[125deg\\] {
7820+
background-image: linear-gradient(calc(125deg * -1), var(--tw-gradient-stops, ));
7821+
}
7822+
77977823
.bg-\\[image\\:--my-gradient\\] {
77987824
background-image: var(--my-gradient);
77997825
}
@@ -7842,6 +7868,46 @@ test('bg', () => {
78427868
background-image: linear-gradient(to top right, var(--tw-gradient-stops, ));
78437869
}
78447870
7871+
.bg-linear-\\[1\\.3rad\\] {
7872+
background-image: linear-gradient(74.4845deg, var(--tw-gradient-stops, ));
7873+
}
7874+
7875+
.bg-linear-\\[125deg\\] {
7876+
background-image: linear-gradient(125deg, var(--tw-gradient-stops, ));
7877+
}
7878+
7879+
.bg-linear-\\[to_bottom\\], .bg-linear-to-b {
7880+
background-image: linear-gradient(to bottom, var(--tw-gradient-stops, ));
7881+
}
7882+
7883+
.bg-linear-to-bl {
7884+
background-image: linear-gradient(to bottom left, var(--tw-gradient-stops, ));
7885+
}
7886+
7887+
.bg-linear-to-br {
7888+
background-image: linear-gradient(to bottom right, var(--tw-gradient-stops, ));
7889+
}
7890+
7891+
.bg-linear-to-l {
7892+
background-image: linear-gradient(to left, var(--tw-gradient-stops, ));
7893+
}
7894+
7895+
.bg-linear-to-r {
7896+
background-image: linear-gradient(to right, var(--tw-gradient-stops, ));
7897+
}
7898+
7899+
.bg-linear-to-t {
7900+
background-image: linear-gradient(to top, var(--tw-gradient-stops, ));
7901+
}
7902+
7903+
.bg-linear-to-tl {
7904+
background-image: linear-gradient(to top left, var(--tw-gradient-stops, ));
7905+
}
7906+
7907+
.bg-linear-to-tr {
7908+
background-image: linear-gradient(to top right, var(--tw-gradient-stops, ));
7909+
}
7910+
78457911
.bg-none {
78467912
background-image: none;
78477913
}
@@ -7974,6 +8040,8 @@ test('bg', () => {
79748040
// background-image
79758041
'-bg-none',
79768042
'-bg-gradient-to-br',
8043+
'-bg-linear-to-br',
8044+
'-bg-linear-[to_bottom]',
79778045

79788046
// background-size
79798047
'-bg-auto',

packages/tailwindcss/src/utilities.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2497,8 +2497,34 @@ export function createUtilities(theme: Theme) {
24972497
staticUtility(`bg-gradient-to-${value}`, [
24982498
['background-image', `linear-gradient(to ${direction}, var(--tw-gradient-stops,))`],
24992499
])
2500+
2501+
staticUtility(`bg-linear-to-${value}`, [
2502+
['background-image', `linear-gradient(to ${direction}, var(--tw-gradient-stops,))`],
2503+
])
25002504
}
25012505

2506+
utilities.functional('bg-linear', (candidate) => {
2507+
if (!candidate.value) return
2508+
2509+
if (candidate.value.kind === 'arbitrary') {
2510+
let value: string | null = candidate.value.value
2511+
let type = candidate.value.dataType ?? inferDataType(value, ['angle'])
2512+
2513+
switch (type) {
2514+
case 'angle': {
2515+
value = withNegative(value, candidate)
2516+
2517+
return [decl('background-image', `linear-gradient(${value}, var(--tw-gradient-stops,))`)]
2518+
}
2519+
default: {
2520+
if (candidate.negative) return
2521+
2522+
return [decl('background-image', `linear-gradient(${value}, var(--tw-gradient-stops,))`)]
2523+
}
2524+
}
2525+
}
2526+
})
2527+
25022528
utilities.functional('bg', (candidate) => {
25032529
if (candidate.negative || !candidate.value) return
25042530

0 commit comments

Comments
 (0)