Đơn giản bởi vì trong cả hai trường hợp, sự kết hợp của các màu không giống nhau do độ mờ của lớp trên cùng ảnh hưởng như thế nào đến màu của lớp dưới cùng .
Đối với trường hợp đầu tiên, bạn thấy 50% màu xanh lam và 50% trong suốt ở lớp trên cùng. Qua phần trong suốt, bạn nhìn thấy 50% màu đỏ ở lớp dưới cùng (vì vậy chúng ta chỉ thấy 25% tổng số màu đỏ ). Logic tương tự cho trường hợp thứ hai ( 50% màu đỏ và 25% màu xanh lam ); do đó bạn sẽ thấy các màu khác nhau bởi vì đối với cả hai trường hợp, chúng ta không có tỷ lệ giống nhau.
Để tránh điều này, bạn cần có tỷ lệ giống nhau cho cả hai màu của bạn.
Dưới đây là một ví dụ để minh họa rõ hơn và chỉ ra cách chúng ta có thể có được cùng một màu:
Ở lớp trên cùng (khoảng bên trong) chúng ta có 0.25
độ mờ (vì vậy chúng ta có 25% màu đầu tiên và 75% trong suốt) sau đó đối với lớp dưới cùng (khoảng ngoài) chúng ta có 0.333
độ mờ (vì vậy chúng ta có 1/3 75% = 25% màu và phần còn lại là trong suốt). Chúng ta có tỷ lệ như nhau trong cả hai lớp (25%) nên chúng ta thấy cùng một màu ngay cả khi chúng ta đảo ngược thứ tự các lớp.
.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>
Một lưu ý nhỏ, nền trắng cũng ảnh hưởng đến việc hiển thị màu sắc. Tỷ lệ của nó là 50% sẽ tạo ra kết quả hợp lý là 100% (25% + 25% + 50%).
Bạn cũng có thể nhận thấy rằng sẽ không thể có tỷ lệ giống nhau cho cả hai màu của chúng tôi nếu lớp trên cùng có độ mờ lớn hơn 0.5
vì lớp đầu tiên sẽ có nhiều hơn 50% và nó sẽ vẫn nhỏ hơn 50% cho lớp thứ hai một:
.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>
Trường hợp nhỏ thường gặp là khi lớp trên cùng có opacity:1
màu trên cùng với tỷ lệ 100%; do đó nó có màu đục .
Để có lời giải thích chính xác và chính xác hơn, đây là công thức được sử dụng để tính toán màu sắc mà chúng ta thấy sau khi kết hợp cả hai lớp ref :
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF là màu cuối cùng của chúng tôi. ColorT / ColorB lần lượt là màu trên và dưới. opacityT / opacityB tương ứng là độ mờ trên cùng và dưới cùng được xác định cho mỗi màu:
Các factor
được xác định bởi công thức này OpacityT + OpacityB*(1 - OpacityT)
.
Rõ ràng là nếu chúng ta chuyển đổi hai lớp, factor
nó sẽ không thay đổi (nó sẽ vẫn là một hằng số) nhưng chúng ta có thể thấy rõ rằng tỷ lệ của mỗi màu sẽ thay đổi vì chúng ta không có cùng một hệ số.
Đối với trường hợp ban đầu của chúng tôi, cả hai độ sáng đều 0.5
như vậy, chúng tôi sẽ có:
ColorF = (ColorT*0.5 + ColorB*0.5*(1 - 0.5)) / factor
Giống như đã giải thích ở trên, màu trên cùng có tỷ lệ 50% ( 0.5
) và màu dưới cùng có tỷ lệ 25% ( 0.5*(1-0.5)
) vì vậy việc chuyển đổi các lớp cũng sẽ chuyển đổi các tỷ lệ này; do đó chúng ta thấy một màu cuối cùng khác .
Bây giờ nếu chúng ta xem xét ví dụ thứ hai, chúng ta sẽ có:
ColorF = (ColorT*0.25 + ColorB*0.333*(1 - 0.25)) / factor
Trong trường hợp này, chúng ta có thể 0.25 = 0.333*(1 - 0.25)
chuyển đổi hai lớp sẽ không có tác dụng; do đó màu sắc sẽ được giữ nguyên.
Chúng tôi cũng có thể xác định rõ ràng các trường hợp nhỏ:
- Khi lớp trên cùng có
opacity:0
công thức bằngColorF = ColorB
- Khi lớp trên cùng có
opacity:1
công thức bằngColorF = ColorT