Einfach, weil in beiden Fällen die Farbkombination nicht gleich ist, da sich die Deckkraft der oberen Schicht auf die Farbe der unteren Schicht auswirkt .
Im ersten Fall sehen Sie 50% Blau und 50% Transparenz in der obersten Schicht. Durch den transparenten Teil sehen Sie 50% der roten Farbe in der unteren Schicht (also sehen wir insgesamt nur 25% der roten Farbe ). Gleiche Logik für den zweiten Fall ( 50% Rot und 25% Blau ); Daher sehen Sie unterschiedliche Farben, da wir in beiden Fällen nicht den gleichen Anteil haben.
Um dies zu vermeiden, müssen Sie für beide Farben den gleichen Anteil haben.
Hier ist ein Beispiel, um besser zu veranschaulichen und zu zeigen, wie wir dieselbe Farbe erhalten können:
In der oberen Schicht (der inneren Spanne) haben wir eine 0.25
Deckkraft (also haben wir 25% der ersten Farbe und 75% der Transparenz), und in der unteren Schicht (der äußeren Spanne) haben wir eine 0.333
Deckkraft (also haben wir 1/3 von 75% = 25% der Farbe und der Rest ist transparent). Wir haben in beiden Schichten den gleichen Anteil (25%), sodass wir die gleiche Farbe sehen, auch wenn wir die Reihenfolge der Schichten umkehren.
.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>
Nebenbei bemerkt beeinflusst der weiße Hintergrund auch die Wiedergabe der Farben. Sein Anteil beträgt 50%, was das logische Ergebnis von 100% ergibt (25% + 25% + 50%).
Möglicherweise stellen Sie auch fest, dass es nicht möglich ist, für beide Farben den gleichen Anteil zu erzielen, wenn die Deckkraft der Deckschicht größer ist als 0.5
die erste, da die erste mehr als 50% und die zweite weniger als 50% beträgt einer:
.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>
Der übliche triviale Fall ist, wenn die oberste Schicht opacity:1
die oberste Farbe mit einem Anteil von 100% ergibt ; Somit ist es eine undurchsichtige Farbe.
Für eine genauere und präzisere Erklärung hier ist die Formel verwendet , um die Farbe , die wir nach der Kombination beiden Schichten sehen zu berechnen ref :
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF ist unsere endgültige Farbe. ColorT / ColorB sind die oberen und unteren Farben. opacityT / opacityB sind die oberen und unteren Opazitäten, die für jede Farbe definiert sind:
Das factor
wird durch diese Formel definiert OpacityT + OpacityB*(1 - OpacityT)
.
Es ist klar, dass sich die beiden Ebenen factor
nicht ändern (sie bleiben konstant), aber wir können deutlich sehen, dass sich das Verhältnis für jede Farbe ändert, da wir nicht den gleichen Multiplikator haben.
Für unseren ersten Fall sind beide Trübungen 0.5
so, dass wir haben werden:
ColorF = (ColorT*0.5 + ColorB*0.5*(1 - 0.5)) / factor
Wie oben erläutert, hat die obere Farbe einen Anteil von 50% ( 0.5
) und die untere Farbe einen Anteil von 25% ( 0.5*(1-0.5)
), so dass durch das Wechseln der Schichten auch diese Anteile gewechselt werden. somit sehen wir eine andere endgültige Farbe.
Wenn wir nun das zweite Beispiel betrachten, haben wir:
ColorF = (ColorT*0.25 + ColorB*0.333*(1 - 0.25)) / factor
In diesem Fall hat 0.25 = 0.333*(1 - 0.25)
das Umschalten der beiden Ebenen keine Auswirkung. somit bleibt die Farbe gleich.
Wir können auch die trivialen Fälle klar identifizieren:
- Wenn die oberste Schicht
opacity:0
die Formel hat, ist sie gleichColorF = ColorB
- Wenn die oberste Schicht
opacity:1
die Formel hat, ist sie gleichColorF = ColorT