@@ -14,9 +14,10 @@ class Gradient extends Value {
14
14
replace ( string , prefix ) {
15
15
let ast = parser ( string )
16
16
for ( let node of ast . nodes ) {
17
- if ( node . type === 'function' && node . value === this . name ) {
17
+ let gradientName = this . name // gradient name
18
+ if ( node . type === 'function' && node . value === gradientName ) {
18
19
node . nodes = this . newDirection ( node . nodes )
19
- node . nodes = this . normalize ( node . nodes )
20
+ node . nodes = this . normalize ( node . nodes , gradientName )
20
21
if ( prefix === '-webkit- old' ) {
21
22
let changes = this . oldWebkit ( node )
22
23
if ( ! changes ) {
@@ -56,7 +57,7 @@ class Gradient extends Value {
56
57
/**
57
58
* Normalize angle
58
59
*/
59
- normalize ( nodes ) {
60
+ normalize ( nodes , gradientName ) {
60
61
if ( ! nodes [ 0 ] ) return nodes
61
62
62
63
if ( / - ? \d + ( .\d + ) ? g r a d / . test ( nodes [ 0 ] . value ) ) {
@@ -71,14 +72,20 @@ class Gradient extends Value {
71
72
nodes [ 0 ] . value = `${ num } deg`
72
73
}
73
74
74
- if ( nodes [ 0 ] . value === '0deg' ) {
75
- nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'top' )
76
- } else if ( nodes [ 0 ] . value === '90deg' ) {
77
- nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'right' )
78
- } else if ( nodes [ 0 ] . value === '180deg' ) {
79
- nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'bottom' )
80
- } else if ( nodes [ 0 ] . value === '270deg' ) {
81
- nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'left' )
75
+ if ( gradientName === 'linear-gradient' || gradientName === 'repeating-linear-gradient' ) {
76
+ let direction = nodes [ 0 ] . value
77
+
78
+ // Unitless zero for `<angle>` values are allowed in CSS gradients and transforms.
79
+ // Spec: https://github.com/w3c/csswg-drafts/commit/602789171429b2231223ab1e5acf8f7f11652eb3
80
+ if ( direction === '0deg' || direction === '0' ) {
81
+ nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'top' )
82
+ } else if ( direction === '90deg' ) {
83
+ nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'right' )
84
+ } else if ( direction === '180deg' ) {
85
+ nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'bottom' ) // default value
86
+ } else if ( direction === '270deg' ) {
87
+ nodes = this . replaceFirst ( nodes , 'to' , ' ' , 'left' )
88
+ }
82
89
}
83
90
84
91
return nodes
@@ -403,7 +410,7 @@ Gradient.names = [
403
410
]
404
411
405
412
Gradient . directions = {
406
- top : 'bottom' ,
413
+ top : 'bottom' , // default value
407
414
left : 'right' ,
408
415
bottom : 'top' ,
409
416
right : 'left'
0 commit comments