๐Ÿ”ขz-index ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐ€์ด๋“œ

๋ชจ๋‹ฌยทํ† ์ŠคํŠธยทํˆดํŒ ๋“ฑ UI ๋ ˆ์ด์–ด z-index ์ฒด๊ณ„ ์„ค๊ณ„ ์•ˆ๋‚ด

z-index ๋ ˆ์ด์–ด ์ฒด๊ณ„ ํ‘œ์ค€

๋ ˆ์ด์–ดz-index์ปดํฌ๋„ŒํŠธ ์˜ˆ์‹œ
๊ธฐ๋ณธ0๊ธฐ๋ณธ ์ฝ˜ํ…์ธ , ๋ฐฐ๊ฒฝ
Sticky100๊ณ ์ • ํ—ค๋”, ์Šคํ‹ฐํ‚ค ํ…Œ์ด๋ธ” ํ—ค๋”
Dropdown200์…€๋ ‰ํŠธ๋ฐ•์Šค, ์ž๋™์™„์„ฑ, ๋‚ ์งœ ํ”ผ์ปค
Fixed Nav300ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ, ๊ณ ์ • ์‚ฌ์ด๋“œ๋ฐ”
Overlay400๋ชจ๋‹ฌ ๋ฐฐ๊ฒฝ(๋”ค), ๋“œ๋กœ์–ด ์˜ค๋ฒ„๋ ˆ์ด
Modal500๋‹ค์ด์–ผ๋กœ๊ทธ, ํ™•์ธ/์ทจ์†Œ ๋ชจ๋‹ฌ
Popover600ํŒ์˜ค๋ฒ„, ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด, ์ƒ‰์ƒ ํ”ผ์ปค
Tooltip700๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ํˆดํŒ, ๋„์›€๋ง ๋ฒ„๋ธ”
Toast800์•Œ๋ฆผ ๋ฉ”์‹œ์ง€, ์Šค๋‚ต๋ฐ”
Loading900์ „์ฒด ํ™”๋ฉด ๋กœ๋”ฉ, ์Šค์ผˆ๋ ˆํ†ค ์˜ค๋ฒ„๋ ˆ์ด
Critical1000๊ธด๊ธ‰ ์˜ค๋ฅ˜ ์•Œ๋ฆผ, GDPR ์ฟ ํ‚ค ๋ฐฐ๋„ˆ

z-index ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ์ด๋ž€?

์›น UI์—์„œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฒน์น  ๋•Œ ์–ด๋А ์š”์†Œ๊ฐ€ ์œ„์— ํ‘œ์‹œ๋ ์ง€๋Š” z-index ๊ฐ’์ด ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ํด์ˆ˜๋ก ์•ž์— ๋ Œ๋”๋ง๋˜๋ฉฐ, ๊ฐ™์€ stacking context ๋‚ด์—์„œ๋งŒ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค.

z-index๋ฅผ ์ž„์˜๋กœ ์“ฐ๋ฉด z-index: 9999, 99999 ๊ฐ™์€ ๋ฌด๋ถ„๋ณ„ํ•œ ๊ฐ’์ด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ํผ์ง€๊ณ , ๋ ˆ์ด์–ด ์ถฉ๋Œ ๋ฒ„๊ทธ๊ฐ€ ์žฆ์•„์ง‘๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฒด๊ณ„์ ์ธ ์Šค์ผ€์ผ(0ยท100ยท200ยทโ€ฆ)์„ ์ •ํ•ด ๋‘๋ฉด ํŒ€ ์ „์ฒด๊ฐ€ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„ ์›์น™

100 ๋‹จ์œ„ ๊ตฌ๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์ค‘์— ์ค‘๊ฐ„ ๋ ˆ์ด์–ด๋ฅผ ์‚ฝ์ž…ํ•  ์—ฌ์œ ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. Overlay(400)์™€ Modal(500)์„ ๋ฐ˜๋“œ์‹œ ๋ถ„๋ฆฌํ•ด์•ผ ๋”ค ์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‹ฌ ์•„๋ž˜์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Toast(800)๋Š” Modal(500)๋ณด๋‹ค ๋†’์•„์•ผ ๋ชจ๋‹ฌ์ด ์—ด๋ ธ์„ ๋•Œ๋„ ์•Œ๋ฆผ์ด ๋ณด์ž…๋‹ˆ๋‹ค.

stacking context ์ฃผ์˜์‚ฌํ•ญ

transform, opacity < 1, filter, will-change ์†์„ฑ์„ ์ ์šฉํ•œ ์š”์†Œ๋Š” ์ƒˆ๋กœ์šด stacking context๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ์š”์†Œ์˜ z-index๊ฐ€ ์•„๋ฌด๋ฆฌ ๋†’์•„๋„ ๋ถ€๋ชจ์˜ stacking context๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ชจ๋‹ฌยท์˜ค๋ฒ„๋ ˆ์ด๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด <body> ์งํ•˜์œ„(React Portal ๋“ฑ)์— ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

๋ชจ๋‹ฌ๊ณผ ํ† ์ŠคํŠธ ์ค‘ ์–ด๋А ์ชฝ z-index๊ฐ€ ๋” ๋†’์•„์•ผ ํ•˜๋‚˜์š”?

ํ† ์ŠคํŠธ(์•Œ๋ฆผ)๊ฐ€ ๋” ๋†’์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ์ด ์—ด๋ฆฐ ์ƒํƒœ์—์„œ๋„ ์•Œ๋ฆผ์€ ์œ„์— ๋ณด์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ํ† ์ŠคํŠธ(800)๋ฅผ ๋ชจ๋‹ฌ(500)๋ณด๋‹ค ๋†’๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

position ์—†์ด z-index๊ฐ€ ์ž‘๋™ํ•˜๋‚˜์š”?

์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. position: static์ธ ์š”์†Œ์—๋Š” z-index๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, FlexboxยทGrid์˜ ์ง์ ‘ ์ž์‹ ์š”์†Œ๋Š” position ์—†์ด๋„ z-index๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

z-index: 9999์ฒ˜๋Ÿผ ํฐ ๊ฐ’์„ ์จ๋„ ๋˜๋‚˜์š”?

๊ธฐ๋Šฅ์ ์œผ๋กœ๋Š” ๋™์ž‘ํ•˜์ง€๋งŒ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ฒด๊ณ„ ์—†์ด ํฐ ๊ฐ’์„ ์“ฐ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋” ํฐ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ์•…์ˆœํ™˜์ด ์ƒ๊น๋‹ˆ๋‹ค. 100 ๋‹จ์œ„ ์Šค์ผ€์ผ๋กœ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.