iOS Safari ๊ธฐ๋ฐ WebView ํ๊ฒฝ์์๋ transform ์์ฑ์ด ์ ์ฉ๋ ์์๊ฐ ๋ณ๋์ compositing layer(GPU layer) ๋ก ์น๊ฒฉ๋๋ฉด์, ๊ธฐ์กด์ DOM ๊ธฐ๋ฐ stacking context์ ๋ค๋ฅธ ๋ ๋๋ง ๊ณ์ธต์ ํ์ฑํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ก ์ธํด:
- z-index ๊ฐ์ด ๋ฎ์ ์์๋ผ๋
- transform์ด ์ ์ฉ๋ ๊ฒฝ์ฐ
→ ์ผ๋ฐ ๋ ์ด์ด๋ณด๋ค ์์์ ๋ ๋๋ง๋๋ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
์์ธ
- transform, opacity, will-change ๋ฑ์ CSS ์์ฑ์ ๋ธ๋ผ์ฐ์ ์์ GPU compositing layer ์์ฑ ํธ๋ฆฌ๊ฑฐ๋ก ๋์
- iOS Safari(WebKit)๋ ์ด compositing layer๋ฅผ ๋ ๋ฆฝ์ ์ธ stacking context๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝํฅ์ด ์์
- ๊ฒฐ๊ณผ์ ์ผ๋ก DOM ์์ z-index ์ฐ์ ์์๊ฐ ๊นจ์ง๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ํ์ ๋ฐ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ชจ๋ ๊ด๋ จ ์์๋ฅผ ๋์ผํ compositing layer ์ ๋ต์ผ๋ก ๋ง์ถ์ด ๋ ๋๋ง ๊ณ์ธต์ ๊ท ์ผํํ๋ค:
.target {
transform:translateZ(0);/* or translate3d(0,0,0) */
}
- ์ฃผ์ ๋ ์ด์ด(๊ฒน์นจ ๊ด๊ณ๊ฐ ์๋ ์์๋ค)์ ์๋์ ์ผ๋ก transform์ ์ ์ฉํ์ฌ
- ๋ชจ๋ ์์๋ฅผ GPU layer๋ก ์น๊ฒฉ
→ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์ผํ ๊ธฐ์ค์์ stacking์ ์ํํ๋๋ก ์ ๋
์ฃผ์์ฌํญ
- ๋ถํ์ํ GPU layer ์ฆ๊ฐ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
- ํนํ ์ ๋๋ฉ์ด์ ์ด ๋ง๊ฑฐ๋ ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ ๋๋ง ๋น์ฉ ์ฆ๊ฐ
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ ์ผ๋ก stacking context๋ฅผ ์ฌ์ค๊ณํ๋ ๊ฒ์ด ๋ ๋ฐ๋์ง
๋ฐ์ํ
Comment