The spec for blend-mode saturation says:
Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color.
Originally I assumed it would be HSL as that's the only colorspace you can use in web development that has a saturation channel, but that's clearly not it:
.color {
width: 100px;
height: 100px;
}
.expected-color {
background: hsl(270, 25%, 50%);
}
.backdrop-color {
background: hsl(270, 85%, 50%);
}
.source-color {
mix-blend-mode: saturation;
background: hsl(45, 25%, 50%);
}
Expected
<div class="color expected-color"></div>
Actual
<div class="color backdrop-color">
<div class="color source-color"></div>
</div>
It's not so easy to demonstrate HSV/HSB, but the testing I did using color converters (eg. link) showed that it's not that color space either.
.color {
width: 100px;
height: 100px;
}
.expected-color {
/* HSB/HSV - 270, 25, 50 */
background: #706080;
}
.backdrop-color {
/* HSB/HSV - 270, 85, 50 */
background: #491380;
}
.source-color {
/* HSB/HSV - 45, 25, 50 */
mix-blend-mode: saturation;
background: #807860;
}
Expected
<div class="color expected-color"></div>
Actual
<div class="color backdrop-color">
<div class="color source-color"></div>
</div>
Likewise with LCH (converter) which doesn't have a saturation channel but it's chroma channel is practically an analog for saturation:
.color {
width: 100px;
height: 100px;
}
.expected-color {
/* LCH - 50, 25, 270 */
background: rgb(90,121,161);
}
.backdrop-color {
/* LCH - 50, 85, 270 */
background: rgb(0,125,255);
}
.source-color {
/* LCH - 50, 25, 45 */
mix-blend-mode: saturation;
background: rgb(157,107,90);
}
Expected
<div class="color expected-color"></div>
Actual
<div class="color backdrop-color">
<div class="color source-color"></div>
</div>
Seems to be consistent across Edge, Chrome, and Firefox.
So what colorspace is mix-blend-mode: saturation
defined in? Or am I misunderstanding how it works?