๐ฑ[PHOBUM] ๊ฐ์ : Z-index ๋ํ ์ค๊ณ๋ค.
๐ฑ[PHOBUM] ๊ฐ์ : Z-index ๋ํ ์ค๊ณ๋ค
์ค๋์ PHOBUM์์ ๋ฐ์ํ๊ณ ์๋ ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๊ณ ๋ค์ ์ค๊ณํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก๋ฐ๋ก! z-index
z-index๋?
z-index
๋ ์์์ ์์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ์ผ๋ก, UI ๊ตฌ์ฑ ์์์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ช
ํํ ํ๊ณ ๊ฒน์นจ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
โ ๏ธ๋ฌธ์ ์
PHOBUM์ ๋ง๋ค ๋, ์น๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ๋ณผ ์ ์๋๋ก max-width
์ min-width
๋ฅผ ์ค์ ํด์ฃผ๊ณ dvw
์ dvh
๋ฅผ ํ์ฉํ์ฌ ์ ์ํ๊ณ ์์ต๋๋ค.
์ฒ์ ์ค๊ณ๋, z-index
์ ๋ํด์ ๊ณ ๋ คํ์ง ์๊ณ ๋ง๋ค๊ธฐ ์์ํ์ต๋๋ค. ์๋ํ๋ฉด ์์ผ ์์๊ฐ ์ ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋! ๊ทธ๊ฒ์ ์คํ์ด์์ต๋๋ค. overlay
๋ถํฐ appbar
, FAB
, popup
, modal
๊น์ง ์์ธ๋ก ์์ด๋ ์์๋ค์ด ๋ง์๋ ๊ฒ์ด์ฃ .
๊ทธ๋๋ ์ ์์ผํ๊ฒ ์งํํ์ง๋ง, ์น์์๋ ์ ์์ ์ผ๋ก ๋ณด์
๋๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ๋ชจ๋ฐ์ผ์ ๋๋ค.
์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ชจ๋ฐ์ผ์์๋ appbar
๊ฐ overlay
์๋ก ์ฌ๋ผ์ต๋๋ค. ๋ overlay
๋ ๊ณณ์์ popup
์ด ์คํ๋ ์ ์๋๋ฐ ์คํ๋๊ธฐ ๊น์ง ํฉ๋๋ค.
๐ฏ๋ฌธ์ ๊ฐ ๋ญ๊น?
์ ๊ฐ์ ์ฝ๋์์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ผ๊น?
์ด๋ฐ ํ์์ ๊ฝค ์์ฃผ ๋ฐ์ํ๋ค๊ณ ํฉ๋๋ค. ๋จ์ํ z-index
์ ์ซ์๋ง์ ๋ฌธ์ ๊ฐ ์๋๋ผ, position
, overflow
, fixed
์์น ๋ฌธ์ ๋ฑ๊ณผ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์ฐจ์ด๊ฐ ๊ฒฐํฉ๋ ๊ฒฐ๊ณผ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์
๋๋ค.
๐ ๋ฌธ์ ์์ธ ๊ฐ๋ฅ์ฑ
-
๋ถ๋ชจ ์์์ stacking context ์์ฑ
z-index
๋ ๊ฐ์ stacking context ๋ด์์๋ง ๋น๊ต- ๋ถ๋ชจ์
transform
,filter
,perspective
,opacity < 1
,will-change
,position: fixed
๋ฑ์ด ์์ผ๋ฉด ์ stacking context๊ฐ ์๊น - ๋ชจ๋ฐ์ผ์์ layout์ด ๋ฐ๋๋ฉด์ ๋ค๋ฅธ ๋ถ๋ชจ๊ฐ stacking context๋ฅผ ๋ง๋ค์์ ๊ฐ๋ฅ์ฑ ์์
โก๏ธ overlay๋ ์์ ์์ด๋, appbar๊ฐ ๋ค๋ฅธ stacking context์์ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ ์์
-
position ์์ฑ ๋๋ฝ ๋๋ ์ถฉ๋
z-index
๋position: relative
,absolute
,fixed
,sticky
๋ฑ์ ์์์๋ง ์ ์ฉ- ๋ชจ๋ฐ์ผ์์
position
์ด ๋ฌ๋ผ์ก๊ฑฐ๋ media query์์ ๋๋ฝ๋์์ ์ ์์
-
AppBar๊ฐ fixed์ด๊ณ , viewport ๊ธฐ์ค์ผ๋ก ๋ ๋๋ง๋จ
- ๋ชจ๋ฐ์ผ์์๋
fixed
์์๊ฐ ์ค๋ฒ๋ ์ด๋ณด๋ค ์์ ๋ํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ (ํนํ iOS์์) overlay
๋ ๋ถ๋ชจ ๊ธฐ์คabsolute
, AppBar๋fixed
๋ก ์ธํด body ๊ธฐ์ค์ด ๋์ด z-index๋ณด๋ค ์ฐ์ ๋ ์ ์์
- ๋ชจ๋ฐ์ผ์์๋
-
๋ธ๋ผ์ฐ์ ์์ง ์ฐจ์ด
- ๋ชจ๋ฐ์ผ Safari(iOS), Chrome(Android)์ ๋ ๋๋ง ๋ฐฉ์์ด ๋ค๋ฅด๋ค ๋ณด๋, ๊ฐ์ DOM ๊ตฌ์กฐ์ฌ๋ z-index ์ฒ๋ฆฌ ์์๊ฐ ๋ฌ๋ผ์ง
- ํนํ iOS๋ ์คํฌ๋กค ๊ด๋ จ ๋ฒ๊ทธ๊ฐ ๋ง๊ณ , fixed ์์์ ๋ฏผ๊ฐํจ
โ ํด๊ฒฐ
์ฐ์ theme
ํ์ผ์ z-index
๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ ๋ฆฌํด ์ฃผ์์ต๋๋ค.
๊ทธ๋ ๊ทธ๋ ํ ํ์ด์ง ๋ง๋ค๋ฉด์ ์กฐ๊ธ์ฉ ์กฐ์ ํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
overlay
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ์ฐ์ ์์๋ฅผ ์ ํด๋ดค์ต๋๋ค.
Modal, Popup, BottomSheet
--- [overlay] ---๊ธฐ์ค
AppBar, FAB
์ด ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก z-index
๋ฅผ ์ค์ ํด์ค๋๋ค.
๊ทธ ์์ค์ overlay
์ ์ฉํ z-index
์ fixed
๋ฐ๊ฒฌ!
๋ฐ๋ก ์ง์์ค๋๋ค. ์๋ง ์ด๊ฒ ๋๋ฌธ์ผ๊ฑฐ๋ผ๋ ๋๋์ด ๊ฐํ๊ฒ ์ต๋๋คโฆ
๊ทธ๋ฆฌ๊ณ ์์๋ก ์ง์ ํด๋ z-index
๋ฅผ ์ด์ ์ ๋ถ ์์ ํด์ค๋๋ค.
์ด๋ ๊ฒ ์ค์ ํด์ฃผ์๋๋ฐ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค..
stacking context
๊ฐ์ผ๋ ๋ถ๋ชจ-์์ ๊ด๊ณ์ ํฌ์ง์
๋์ ์ฌ์ค์ ํด์ฃผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก ์์ ํ ๊ฒ์ด, ๋ชจ๋ฐ์ผ ํ๋ฉด์ ๋ณด๋ฉด ํ๋จ๊ณผ ์๋จ padding์ด ์์ ์๋ ๋๋์ธ๋ฐ, ์ด๊ฒ์ Layout์ ์ ์ฉํ ๊ฒ ์ ๋๋ค.
๊ทธ๋์ Layout๋ํ ์กฐ์ ํด์คฌ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ๋ ์๋ผ์ ์ด๋ฒ์๋ github commit์ ๋ค์ง๊ธฐ ์์ํ์ต๋๋ค.
overscroll-behavior-y: contain;
-webkit-overflow-scrolling: touch
InteractiveCard
๋ฅผ ์ข๋ ๋ถ๋๋ฝ๊ฒ ์ฌ์ฉํ๋ ค๊ณ ์ถ๊ฐํ๋ ๊ฒ์ธ๋ฐ ์ด๊ฒ์ ์ง์ ์ต๋๋ค.
!!!!
๋๋ค!!! ๋ฌธ์ ๋ ์ด ์ฝ๋์์ต๋๋ค.
โ ์์ธ ์ ๋ฆฌ
๐ธ-webkit-overflow-scrolling: touch
์ด ์ค์ ์ iOS Safari์์ ๋ถ๋๋ฌ์ด ์คํฌ๋กค(๋ชจ๋ฉํ ์คํฌ๋กค)์ ํ์ฑํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์ฑ์ ๊ฐ์ง ์์๋ ๋ ๋ฆฝ์ ์ธ GPU layer๋ก ๋ ๋๋ง๋ฉ๋๋ค.
โก๏ธ๋ด๋ถ์ ์๋ ์์๋ค์ด ์๋ก์ด stacking context๋ฅผ ๋ง๋ค์ด ๋ด๋๊ฒ ์ ๋๋ค.
์ด๋ก ์ธํด z-index
๊ฐ ์์๋๋ก ์๋ํ์ง ์๊ณ , AppBar๊ฐ ์ค๋ฒ๋ ์ด๋ณด๋ค ์์ ํ์๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๐ธ overscroll-behavior-y: contain
์ด ์ค์ ์ ์คํฌ๋กค ๋ฒ๋ธ๋ง์ ๋ง์์ ์์๋ก ์คํฌ๋กค ์ด๋ฒคํธ ์ ๋ฌ์ ์ฐจ๋จํฉ๋๋ค.
์ด ์์ฒด๊ฐ stacking context์ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, overflow
์ ํจ๊ป ์ฌ์ฉ๋ ๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ค ์ ์์ต๋๋ค.
๊ทธ๋์ ์ฃผ์์ฒ๋ฆฌํ์ฌ ์์ ์์ ๊ธฐ๋ณด๋ค๋ , ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ํ์ ์ผ๋ก ์ ์ฉํ๋๋ก ํ๋๊ฒ์ด ์ข๋ค๊ณ ํฉ๋๋ค.
ex) ๋ฏธ๋์ด ์ฟผ๋ฆฌ
๐ค๋๋์
iOS์์ -webkit-overflow-scrolling:touch
๋ ๋ฒ๊ทธ๋ฅผ ๋ง์ด ์ผ์ผํค๋ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ๊ฒ ์ต๋๋ค.
stacking context
์ ๋ํ ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฅ ๋ฌด์กฐ๊ฑด ์ข์๋ณด์ด๋๊น ์ฌ์ฉ์ ์ญ์ ์ง์ํด์ผ๊ฒ ์ต๋๋ค. ์ ๋๋ ๋ชจ๋ฐ์ผ ์น์์๋ ํฐ์น๋ก ๋ถ๋๋ฝ๊ฒ ์นด๋ ํ์ ์ด ์๋์ scroll๊ด๋ จ css๋ฅผ ๋ค ํ์ฉํ๋ ๊ธฐ์ต์ด ์๋๋ฐ, ์๊ณ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ํฝ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ