Simplemente porque en ambos casos la combinación de colores no es la misma debido a cómo la opacidad de la capa superior afecta el color de la capa inferior .
En el primer caso, verá un 50% de azul y un 50% de transparente en la capa superior. A través de la parte transparente, ves un 50% de color rojo en la capa inferior (por lo que solo vemos un 25% de rojo en total). Misma lógica para el segundo caso ( 50% de rojo y 25% de azul ); así verás colores diferentes porque para ambos casos no tenemos la misma proporción.
Para evitar esto, debe tener la misma proporción para ambos colores.
Aquí hay un ejemplo para ilustrar mejor y mostrar cómo podemos obtener el mismo color:
En la capa superior (el tramo interior) tenemos 0.25
opacidad (por lo que tenemos el 25% del primer color y el 75% de transparente) luego para la capa inferior (el tramo exterior) tenemos 0.333
opacidad (por lo que tenemos 1/3 de 75% = 25% del color y el resto es transparente). Tenemos la misma proporción en ambas capas (25%) por lo que vemos el mismo color incluso si invertimos el orden de las capas.
.a {
background-color: rgba(255, 0, 0, 0.333)
}
.b {
background-color: rgba(0, 0, 255, 0.333)
}
.a > .b {
background-color: rgba(0, 0, 255, 0.25)
}
.b > .a {
background-color: rgba(255, 0, 0, 0.25)
}
<span class="a"><span class="b"> Color 1</span></span>
<span class="b"><span class="a">Different Color 2</span></span>
Como nota al margen, el fondo blanco también está afectando la representación de los colores. Su proporción es del 50%, lo que hará el resultado lógico del 100% (25% + 25% + 50%).
También puede notar que no será posible tener la misma proporción para nuestros dos colores si la capa superior tiene una opacidad mayor que 0.5
porque la primera tendrá más del 50% y permanecerá menos del 50% para la segunda. uno:
.a {
background-color: rgba(255, 0, 0, 1)
}
.b {
background-color: rgba(0, 0, 255, 1)
}
.a > .b {
background-color: rgba(0, 0, 255, 0.6)
}
.b > .a {
background-color: rgba(255, 0, 0, 0.6)
}
<span class="a"><span class="b"> Color 1</span></span>
<span class="b"><span class="a">Different Color 2</span></span>
El caso trivial común es cuando la capa superior tiene opacity:1
el color superior con una proporción del 100%; por eso es un color opaco .
Para una explicación más precisa y precisa aquí está la fórmula utilizada para calcular el color que vemos después de la combinación de ambas capas ref :
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF es nuestro color final. ColorT / ColorB son respectivamente los colores superior e inferior. opacityT / opacityB son respectivamente las opacidades superior e inferior definidas para cada color:
El factor
está definido por esta fórmula OpacityT + OpacityB*(1 - OpacityT)
.
Está claro que si cambiamos las dos capas factor
no cambiará (permanecerá constante) pero podemos ver claramente que la proporción de cada color cambiará ya que no tenemos el mismo multiplicador.
Para nuestro caso inicial, ambas opacidades son 0.5
por lo que tendremos:
ColorF = (ColorT*0.5 + ColorB*0.5*(1 - 0.5)) / factor
Como se explicó anteriormente, el color superior tiene una proporción del 50% ( 0.5
) y el inferior tiene una proporción del 25% ( 0.5*(1-0.5)
) por lo que cambiar las capas también cambiará estas proporciones; así vemos un color final diferente .
Ahora bien, si consideramos el segundo ejemplo tendremos:
ColorF = (ColorT*0.25 + ColorB*0.333*(1 - 0.25)) / factor
En este caso, 0.25 = 0.333*(1 - 0.25)
cambiar las dos capas no tendrá ningún efecto; por tanto, el color seguirá siendo el mismo.
También podemos identificar claramente los casos triviales:
- Cuando la capa superior tiene
opacity:0
la fórmula es igual aColorF = ColorB
- Cuando la capa superior tiene
opacity:1
la fórmula es igual aColorF = ColorT