Tout simplement parce que dans les deux cas, la combinaison de couleurs n'est pas la même en raison de la façon dont l'opacité du haut de la couche d'affecter la couleur du fond de la couche.
Pour le premier cas, à vous de voir 50% de bleu et de 50% de transparence dans la couche supérieure. Grâce à la partie transparente, à vous de voir 50% de la couleur rouge dans la couche de fond (si on ne voit plus que 25% de rouge au total). Même logique pour le deuxième cas (50% de rouge et de 25% de bleu); ainsi, vous pourrez voir différentes couleurs, car pour les deux cas, nous n'avons pas la même proportion.
Pour éviter cela, vous devez avoir la même proportion pour les deux vos couleurs.
Voici un exemple pour mieux illustrer et montrer comment on peut obtenir la même couleur:
Dans la couche supérieure (l'intérieur span) nous avons 0.25
d'opacité (donc, nous avons 25% de la première couleur et 75% de transparence), ensuite pour la couche de fond (que l'extérieur de la durée), nous avons 0.333
d'opacité (nous avons donc 1/3 de 75% = 25% de la couleur et le reste est transparent). Nous avons la même proportion dans les deux couches (25%) de sorte que nous voyons la même couleur même si on inverse l'ordre des couches.
.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>
Comme une note côté, le fond blanc est aussi une incidence sur le rendu des couleurs. Sa proportion est de 50%, ce qui rendra la conséquence logique de la 100% (25% + 25% + 50%).
Vous pouvez également remarquer que ce ne sera pas possible d'avoir la même proportion pour nos deux couleurs si la couche supérieure est d'avoir une opacité plus grand que 0.5
parce que la première fois, plus de 50% , et il restera moins de 50% pour la seconde:
.a {
background-color: rgba(255, 0, 0, 1) /*taking 40% even with opacity:1*/
}
.b {
background-color: rgba(0, 0, 255, 1) /*taking 40% even with opacity:1*/
}
.a > .b {
background-color: rgba(0, 0, 255, 0.6) /* taking 60%*/
}
.b > .a {
background-color: rgba(255, 0, 0, 0.6) /* taking 60%*/
}
<span class="a"><span class="b"> Color 1</span></span>
<span class="b"><span class="a">Different Color 2</span></span>
La commune trivial le cas lorsque la couche supérieure est d'avoir opacity:1
qui font de la couleur du dessus avec une proportion de 100%, donc c'est un opaque de couleur.
Pour plus de précision et d'explication précise ici est la formule utilisée pour calculer la couleur nous voir après la combinaison de deux couchesref:
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF est notre couleur finale. ColorT/ColorB sont respectivement en haut et en bas de couleurs. opacityT/opacityB sont respectivement en haut et en bas des opacités définis pour chaque couleur:
L' factor
est défini par cette formule, OpacityT + OpacityB*(1 - OpacityT)
.
Il est clair que si nous passons les deux couches de l' factor
ne changera pas (il restera une constante), mais nous pouvons clairement voir que la proportion de chaque couleur va changer puisque nous n'avons pas le même multiplicateur.
Pour notre cas initial, les deux opacités sont 0.5
nous aurons:
ColorF = (ColorT*0.5 + ColorB*0.5*(1 - 0.5)) / factor
Comme expliqué ci-dessus, la couleur du dessus est d'avoir une proportion de 50% (0.5
) et celui du bas est d'avoir une proportion de 25% (0.5*(1-0.5)
) afin de changer les couches vais aussi passer ces proportions; ainsi, nous voyons une autre finale de la couleur.
Maintenant, si nous considérons le deuxième exemple, nous aurons:
ColorF = (ColorT*0.25 + ColorB*0.333*(1 - 0.25)) / factor
Dans ce cas, nous avons 0.25 = 0.333*(1 - 0.25)
afin de changer les deux couches n'aura aucun effet; ainsi la couleur restera le même.
Nous pouvons également identifier clairement les cas triviaux:
- Lorsque la couche est d'avoir
opacity:0
de la formule est égal à ColorF = ColorB
- Lorsque la couche est d'avoir
opacity:1
de la formule est égal à ColorF = ColorT