Mesh gradients and freeform gradients are becoming a popular design feature, and it would be useful to be able to generate mesh gradient images dynamically with a function in CSS. The nomenclature of 'mesh' vs 'freeform' seems to get conflated, but they are different things in tools like Adobe Illustrator.
Here's an example of a complex mesh gradient from our branding kit at the BBC:

Why do we need a new feature?
Tools such as CSS Hero try to replicate mesh gradients, but they only 'fake' it by layering radial gradients. You wouldn't be able to make a complex mesh like the one above using radial gradients.
How they work
Creating the gradients
Freeform gradients are generated by specifying any number of nodes at arbitrary coordinates on a canvas. Each node is given a colour.
Mesh gradients seem to be more complex, and work using a 2D grid of nodes. The grid lines can be bent using bezier curves.
It's easier to understand how they work by playing around with them yourself. Here are some tools and videos to explain them better:
How they are created
See #7648 (comment)
Possible syntax
For creating a freeform gradient, the gradient function could have a comma-separated list of coloured coordinates/nodes. I'm suggesting using <length-percentage> units for consistency with other gradient function syntaxes.
background-image: freeform-gradient(red 2% 2%, gold 60% 40%, yellow 90% 100%);
The syntax definition would be the following: (Thanks @SebastianZ)
freeform-gradient([<color> <length-percentage>{2}]#{2,})
I don't have a proposal for a mesh gradient syntax because they're more complex. EDIT: See discussion in the comments about how mesh gradients might be better represented using SVG markup.
Mesh gradients and freeform gradients are becoming a popular design feature, and it would be useful to be able to generate mesh gradient images dynamically with a function in CSS. The nomenclature of 'mesh' vs 'freeform' seems to get conflated, but they are different things in tools like Adobe Illustrator.
Here's an example of a complex mesh gradient from our branding kit at the BBC:
Why do we need a new feature?
Tools such as CSS Hero try to replicate mesh gradients, but they only 'fake' it by layering radial gradients. You wouldn't be able to make a complex mesh like the one above using radial gradients.
How they work
Creating the gradients
Freeform gradients are generated by specifying any number of nodes at arbitrary coordinates on a canvas. Each node is given a colour.
Mesh gradients seem to be more complex, and work using a 2D grid of nodes. The grid lines can be bent using bezier curves.
It's easier to understand how they work by playing around with them yourself. Here are some tools and videos to explain them better:
How they are created
See #7648 (comment)
Possible syntax
For creating a freeform gradient, the gradient function could have a comma-separated list of coloured coordinates/nodes. I'm suggesting using
<length-percentage>units for consistency with other gradient function syntaxes.The syntax definition would be the following: (Thanks @SebastianZ)
I don't have a proposal for a mesh gradient syntax because they're more complex. EDIT: See discussion in the comments about how mesh gradients might be better represented using SVG markup.