두 경우 모두 상단 레이어의 불투명도가 하단 레이어 의 색상에 영향을 미치는 방식으로 인해 색상 조합이 동일하지 않기 때문 입니다.
첫 번째 경우 상단 레이어 에 파란색의 50 %와 투명의 50 %가 표시됩니다. 투명한 부분을 통해 하단 레이어에 빨간색의 50 %가 표시됩니다 (따라서 전체적으로 빨간색의 25 % 만 표시됨). 두번째 경우 (동일한 논리 대 적색의 50 % 및 청색의 25 % ); 따라서 두 경우 모두 동일한 비율이 없기 때문에 다른 색상을 볼 수 있습니다.
이를 방지하려면 두 색상에 대해 동일한 비율을 가져야합니다.
다음은 동일한 색상을 얻는 방법을 더 잘 설명하고 보여주는 예입니다.
맨 위 레이어 (내부 범위)에는 0.25
불투명도 (첫 번째 색상의 25 %, 투명도 75 %)가 있고 맨 아래 레이어 (외부 범위)에는 0.333
불투명도 가 있습니다 (그러므로 75 % = 색상의 25 %이고 나머지는 투명 함). 두 레이어의 비율 (25 %)이 같으므로 레이어 순서를 반대로해도 같은 색이 보입니다 .
.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>
참고로 흰색 배경은 색상 렌더링에도 영향을 미칩니다. 비율은 50 %로 논리적 결과는 100 % (25 % + 25 % + 50 %)가됩니다.
첫 번째 레이어의 불투명도 가 50 % 이상이고 두 번째 레이어는 50 % 미만으로 유지 0.5
되기 때문에 상단 레이어의 불투명도가 더 큰 경우 두 색상에 대해 동일한 비율을 가질 수 없음을 알 수 있습니다. 하나:
.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>
일반적인 사소한 경우는 상단 레이어가 opacity:1
100 % 비율로 상단 색상을 만드는 경우입니다. 따라서 불투명 한 색상입니다.
여기에보다 정확하고 정확한 설명은 우리가 두 층의 조합으로 볼 수있는 색상 계산하는 데 사용되는 공식은 심판 :
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF 는 최종 색상입니다. ColorT / ColorB 는 각각 상단 및 하단 색상입니다. opacityT / opacityB 는 각각 각 색상에 대해 정의 된 상단 및 하단 불투명도입니다.
는 factor
이 식에 의해 정의된다 OpacityT + OpacityB*(1 - OpacityT)
.
두 레이어를 전환하면 factor
변경되지 않지만 (일정하게 유지됨) 동일한 배율이 없기 때문에 각 색상의 비율이 변경된다는 것을 분명히 알 수 있습니다.
초기의 경우 두 가지 불투명도가 모두 0.5
있으므로 다음과 같이됩니다.
ColorF = (ColorT*0.5 + ColorB*0.5*(1 - 0.5)) / factor
위에서 설명한 것처럼 상단 색상의 비율은 50 % ( 0.5
)이고 하단 색상 의 비율은 25 % ( 0.5*(1-0.5)
)이므로 레이어를 전환하면 이러한 비율도 전환됩니다. 따라서 우리는 다른 최종 색상을 볼 수 있습니다.
이제 두 번째 예를 고려하면 다음과 같이됩니다.
ColorF = (ColorT*0.25 + ColorB*0.333*(1 - 0.25)) / factor
이 경우 0.25 = 0.333*(1 - 0.25)
두 레이어를 전환해도 효과가 없습니다. 따라서 색상은 동일하게 유지됩니다.
또한 사소한 경우를 명확하게 식별 할 수 있습니다.
- 최상위 레이어가
opacity:0
공식이 같을 때ColorF = ColorB
- 최상위 레이어가
opacity:1
공식이 같을 때ColorF = ColorT