ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ •์‹ ์—†์ด ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค๊ฐ€ ๋งŒ๋‚œ, ๋ถ„๋ช… ๊ฐ„๋‹จํ•ด์•ผํ•  ๊ธฐ๋Šฅ์ด ์•Œ ์ˆ˜ ์—†๋Š” ์ด์œ ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ˆœ๊ฐ„์„ ๋งˆ์ฃผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ œ๊ฐ€ ์›ํ•  ๋•Œ, ์›ํ•˜๋Š” ๊ณณ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ๋ชจ๋‹ฌ(Modal) ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋‹ฌ์€ ๋งˆ์น˜ ์œ ๋ น์ฒ˜๋Ÿผ DOM Queue์— ์Œ“์—ฌ์žˆ๋‹ค๊ฐ€, ์ „ํ˜€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ˆœ๊ฐ„์— ์—‰๋šฑํ•œ ๊ณณ์—์„œ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.
 
์ œ๊ฐ€ ์ด ์œ ๋ น๊ฐ™์€ ๋ชจ๋‹ฌ์„ ์žก๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณค๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด ์–ด๋–ค ๊ตํ›ˆ์„ ์–ป์—ˆ๋Š”์ง€ ์ ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
--------

Problem

Modal์ด ์›ํ•˜๋Š” ๊ณณ์—์„œ visible์ด ๋˜์ง€ ์•Š๊ณ , DOM์— Queue๋กœ ์Œ“์ด๋‹ค๊ฐ€ ์›ํ•˜์ง€ ์•Š๋Š” ๊ณณ์—์„œ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ

--------

Attempts

1. Stacking Context?

๊ฐ€์žฅ ๋จผ์ € ๋“  ์ƒ๊ฐ์€ Stacking Context ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. css์—์„œ z-index ์†์„ฑ์€ ์š”์†Œ๊ฐ€ ์Œ“์ด๋Š” ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•˜๋Š”๋ฐ, ์ด๊ฒŒ ๊ฐ€๋” ๊นŒ๋‹ค๋กญ๊ฒŒ ๋™์ž‘ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. z-index ๊ฐ’์ด ๋†’์œผ๋ฉด ๋‹ค๋ฅธ ์š”์†Œ ์œ„๋กœ ์˜ฌ๋ผ์˜ค์ง€๋งŒ, ์ด ๊ทœ์น™์€ ๊ฐ™์€ ์Œ“์ž„ ๋งฅ๋ฝ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. 
 
๋งŒ์•ฝ ์ œ๊ฐ€ ๋„์šฐ๋ ค๋Š” ๋ชจ๋‹ฌ๊ณผ ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์„œ๋กœ ๋‹ค๋ฅธ ์Œ“์ž„ ๋งฅ๋ฝ์— ์†ํ•ด ์žˆ๋‹ค๋ฉด, ๋ชจ๋‹ฌ์˜ z-index๋ฅผ 9999๋กœ ์„ค์ •ํ•ด๋„ ๋‹ค๋ฅธ ์š”์†Œ ๋’ค์— ๊ฐ‡ํ˜€ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋‹ฌ์˜ ๋ถ€๋ชจ ์š”์†Œ๋“ค์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ๋ถˆํ•„์š”ํ•œ ์Œ“์ž„ ๋งฅ๋ฝ์„ ๋งŒ๋“œ๋Š” ์†์„ฑ์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ดค์ง€๋งŒ, ์ด๊ฒƒ์ด ์›์ธ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
 

2. display: flex ์†์„ฑ

๋‹ค์Œ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํŽ˜์ด์ง€ ๊ตฌ์กฐ๋ฅผ ์žก์„ ๋•Œ Flexbox๋ฅผ ์• ์šฉํ•ฉ๋‹ˆ๋‹ค. Flexbox๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋•Œ๋กœ๋Š” ์ž์‹ ์š”์†Œ์˜ ์œ„์น˜์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ position: absolute ์†์„ฑ์„ ๊ฐ€์ง„ ๋ชจ๋‹ฌ ๊ฐ™์€ ์š”์†Œ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ์ด Flexbox ์ปจ๋ฐ์ด๋„ˆ ์•ˆ์—์„œ ์œ„์น˜๋ฅผ ์ œ๋Œ€๋กœ ์žก์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ดค์ง€๋งŒ, ์ด ๋˜ํ•œ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
 

3. ์œ ๋ น ํด๋ž˜์Šค์— ์Œ“์—ฌ์žˆ์–ด์„œ ๋ณด์ด์ง€ ์•Š์Œ.

์„ธ ๋ฒˆ์งธ ๊ฐ€์„ค์€ ๋ชจ๋‹ฌ์ด DOM์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ, ์ œ๊ฐ€ ์œ ๋ น ํด๋ž˜์Šค๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ•œ ๋ฌด์–ธ๊ฐ€์— ์˜ํ•ด ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. display:none์ด๋‚˜ visibility: hidden ๊ฐ™์€ ์Šคํƒ€์ผ์„ ๊ฐ€์ง„ ํด๋ž˜์Šค๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ œ๋Œ€๋กœ ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ์„๊ฑฐ๋ผ ์ถ”์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ์ด ๋‚˜์ค‘์—๋ผ๋„ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์„, ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ๊ฒฐ๊ตญ ์ด ์œ ๋ น ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด์–ด๋†“๊ณ  ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์š”์†Œ๋ฅผ ๊ด€์ฐฐํ–ˆ์ง€๋งŒ, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
 
--------

Solution

4. html ๊ธฐ๋ณธ ๊ตฌ์กฐ์˜ ๋ฌธ์ œ.

์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ css๋ฌธ์ œ๋“ค์„ ํ•œ์ฐธ ํŒŒํ—ค์นœ ํ›„์—์•ผ, ํ•ด๊ฒฐ์ฑ…์ด ๋ถ€๋„๋Ÿฌ์šธ ์ •๋„๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ๊ทผ๋ณธ์ ์ธ ๊ณณ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ HTML ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 
๊ธฐ๋Šฅ์„ ๊ธ‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ, ์ œ๊ฐ€ ๋„์šฐ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋‹ฌ์„ ๋˜ ๋‹ค๋ฅธ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ค‘์ฒฉํ•ด์„œ ๋ฐฐ์น˜ํ–ˆ๋˜ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
์ž˜๋ชป๋œ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. 

 
 
 

์ด๊ฒƒ์ด ์™œ ๋ฌธ์ œ์˜€์„๊นŒ?

css ๊ฐ€์‹œ์„ฑ์˜ ๊ธฐ๋ณธ ๊ทœ์น™์€ ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ๋ณด์ด์ง€ ์•Š์œผ๋ฉด ์ž์‹ ์š”์†Œ๋„ ๋ณด์ผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” #my-target-modal์„ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ์ •ํ™•ํžˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๊ทธ ๋ถ€๋ชจ์ธ #parent-modal์ด display:none ์ƒํƒœ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํƒ€๊ฒŸ ๋ชจ๋‹ฌ ์—ญ์‹œ ํ™”๋ฉด์— ๋‚˜์˜ฌ ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์ œ๊ฐ€ ๊ฒช์—ˆ๋˜ ์ด์ƒํ•œ ๋Œ€๊ธฐ์—ด ํ˜„์ƒ์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ํ–‰๋™์ด ๊ฒฐ๊ตญ #parent-modal์„ ํ™”๋ฉด์— ํ‘œ์‹œํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ˆœ๊ฐ„ ์ด๋ฏธ ํ‘œ์‹œ๋˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋˜ #my-target-modal์ด ๋ถ€๋ชจ์™€ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ๋งˆ์น˜ ๋’ค๋Šฆ๊ฒŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
ํ•ด๊ฒฐ์ฑ…์€ ๋ชจ๋‹ฌ๋“ค์ด ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ํ˜•์ œ ๊ด€๊ณ„๊ฐ€ ๋˜๋„๋ก HTML๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋ชจ๋‹ฌ์€ body ํƒœ๊ทธ ๋ฐ”๋กœ ์•„๋ž˜์— ๋‘์–ด ๋‹ค๋ฅธ ์š”์†Œ์˜ ์Šคํƒ€์ผ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.
 

๊ฒฐ๋ก  ๋ฐ ๊ตํ›ˆ

 
์ด๋ฒˆ ๊ฒฝํ—˜์€ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ผ๊นจ์›Œ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ์‹œ์— ๋ณต์žกํ•œ ๊ฒƒ๋ถ€ํ„ฐ ํŒŒ๊ณ ๋“ค๊ธฐ ์ „์—, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์„ ๋จผ์ € ํ™•์ธํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. css์™€ js์˜ ๋ณต์žกํ•จ์— ๋น ์ ธ ๊ธธ์„ ์žƒ๊ธฐ ์‰ฝ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๋ฌธ์ œ์˜ ์›์ธ์ด ํŽ˜์ด์ง€์˜ ๊ฐ€์žฅ ๊ทผ๊ฐ„์ด ๋˜๋Š” HTML ๊ตฌ์กฐ์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊น”๋”ํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๋ฌธ์„œ ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํžˆ ์˜๋ฏธ๋ก ์ ์ธ ์ ‘๊ทผ์„ฑ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ˆ˜๋งŒ์€ ์Šคํƒ€์ผ๋ง ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•ด ์ฃผ๋Š” ์ตœ๊ณ ์˜ ๋ฐฉ์–ด๋ง‰์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ผญ ๊ธฐ์–ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 
 

๋ฐ˜์‘ํ˜•

'๐ŸŽง TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] React Native(Expo) + NativeWind v4 ์ดˆ๊ธฐ ์„ธํŒ… ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋กœ๊ทธ  (0) 2025.11.26
[TIL] 2023-09-09  (0) 2023.09.10
[TIL] 2023-09-08  (0) 2023.09.09
[TIL] 2023-08-23  (0) 2023.08.24
[TIL] 2023-08-22  (0) 2023.08.23
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•