为什么从 color1 到 color2 的 CSS 线性渐变在 color2 背景上呈现与从 color1 到透明的线性渐变完全相同?

Why does a CSS linear-gradient from color1 to color2 render exactly the same as a linear-gradient from color1 to transparent on a color2 background?

可以使用以下方法创建从红色到蓝色的线性渐变:

background: linear-gradient(
              rgb(255,0,0),
              rgb(0,0,255))

要创建这个:

如果您改为将红色淡化为透明并将其置于蓝色背景上:

background: linear-gradient(
              rgb(255,0,0), 
              rgb(255,0,0,0)),
            rgb(0,0,255);

结果完全一样:

在第一个示例中,通过线性插值,图像的中心将具有 RGB 值 (127.5, 0, 127.5)。

在第二个示例中,图像的中心是部分透明的红色 (127.5, 0, 0, 0.5) 和纯蓝色 (0, 0, 255) 的组合。这些如何组合以创建与第一个示例中相同的 (127.5, 0, 127.5) 结果?

你的结论有误。第二个梯度的插值将给出 (255, 0, 0, 0.5) 而不是 (127.5, 0, 0, 0.5)

的中心着色

(0, 0, 255, 1) 顶部的 (255, 0, 0, 0.5) 将给出 (127.5, 0, 127.5)

    255*0.5 + 0*(1 - 0.5) = 127.5
    0*0.5   + 0*(1 - 0.5) = 0 
    0*0.5   + 255*(1 - 0.5) = 127.5 

有关数学的更多详细信息: