@@ -14,9 +14,10 @@ class Gradient extends Value {
1414 replace ( string , prefix ) {
1515 let ast = parser ( string )
1616 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 ) {
1819 node . nodes = this . newDirection ( node . nodes )
19- node . nodes = this . normalize ( node . nodes )
20+ node . nodes = this . normalize ( node . nodes , gradientName )
2021 if ( prefix === '-webkit- old' ) {
2122 let changes = this . oldWebkit ( node )
2223 if ( ! changes ) {
@@ -56,7 +57,7 @@ class Gradient extends Value {
5657 /**
5758 * Normalize angle
5859 */
59- normalize ( nodes ) {
60+ normalize ( nodes , gradientName ) {
6061 if ( ! nodes [ 0 ] ) return nodes
6162
6263 if ( / - ? \d + ( .\d + ) ? g r a d / . test ( nodes [ 0 ] . value ) ) {
@@ -71,14 +72,20 @@ class Gradient extends Value {
7172 nodes [ 0 ] . value = `${ num } deg`
7273 }
7374
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+ }
8289 }
8390
8491 return nodes
@@ -403,7 +410,7 @@ Gradient.names = [
403410]
404411
405412Gradient . directions = {
406- top : 'bottom' ,
413+ top : 'bottom' , // default value
407414 left : 'right' ,
408415 bottom : 'top' ,
409416 right : 'left'
0 commit comments