๋ชจ๋‹ฌ(Modal)๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog) ์ฐจ์ด์  ์™„๋ฒฝํ•œ ์ •๋ฆฌ

๋ชจ๋‹ฌ(Modal)๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog) ์ฐจ์ด์  ์™„๋ฒฝํ•œ ์ •๋ฆฌ

D
dongAuthor
6 min read

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด '๋ชจ๋‹ฌโ€™๊ณผ '๋‹ค์ด์–ผ๋กœ๊ทธโ€™๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๋‘˜์„ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜์ฃ . ์‹ค์ œ๋กœ ์• ํ”Œ์—์„œ๋Š” ๋ชจ๋‹ฌ, ๊ตฌ๊ธ€์—์„œ๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ˜ผ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋‘˜์€ ์—„์—ฐํžˆ ๋‹ค๋ฅธ ๋ชฉ์ ๊ณผ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๋ชจ๋‹ฌ๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ์ •ํ™•ํ•œ ์ •์˜๋ถ€ํ„ฐ ์ฃผ์š” ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ๋๊นŒ์ง€ ์ฝ์œผ์‹œ๋ฉด ๋‘ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ์ž์‹ ๊ฐ์„ ์–ป๊ฒŒ ๋˜์‹ค ๊ฑฐ์˜ˆ์š”!

๋ชจ๋‹ฌ(Modal)๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog)๋ž€?

๋จผ์ € ๊ฐ ์šฉ์–ด์˜ ์ •์˜๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๋ถ€ํ„ฐ ํ™•์‹คํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‹ฌ(Modal)์˜ ์ •์˜

๋ชจ๋‹ฌ(Modal)์€ ๊ธฐ์กด ํ™”๋ฉด ์œ„์— ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ๋„์›Œ ์‚ฌ์šฉ์ž์˜ ์‹œ์„ ์„ ์ง‘์ค‘์‹œํ‚ค๋Š” UI ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ์ด ํ™œ์„ฑํ™”๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋‹ฌ ์ฐฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์›๋ž˜ ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํŠน์ • ๊ณผ์—…์„ ์™„๋ฃŒํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‹ฌ์„ ๋‹ซ์•„์•ผ๋งŒ ๊ธฐ์กด ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” '์ฐจ๋‹จ์„ฑ UIโ€™๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ฃ .

์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ชจ๋‹ฌ์€ ํ˜„์žฌ ํŽ˜์ด์ง€์— ์ข…์†๋œ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋งˆ์น˜ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ผ๋ถ€์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•  ์ค‘์š” ์ •๋ณด ์ „๋‹ฌ์ด๋‚˜ ๊ฒฐ์ •์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog)์˜ ์ •์˜

๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog)๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” '๋Œ€ํ™” ์ƒ์žโ€™๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋” ๋„“์€ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž์™€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ฐ„๋‹จํ•œ ๋Œ€ํ™”๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ด์–ผ๋กœ๊ทธ๋Š” ๋ชจ๋‹ฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ฐ•์ œํ•˜๋Š” '๋ชจ๋‹ฌ ๋‹ค์ด์–ผ๋กœ๊ทธ(Modal Dialog)'๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ , ๋‹ค๋ฅธ ํ™”๋ฉด์„ ์กฐ์ž‘ํ•˜๋ฉด์„œ๋„ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” โ€˜๋ชจ๋‹ฌ๋ฆฌ์Šค ๋‹ค์ด์–ผ๋กœ๊ทธ(Modeless Dialog)โ€™ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์ด์–ผ๋กœ๊ทธ๋Š” ๋ชจ๋‹ฌ์„ ํฌํ•จํ•˜๋Š” ์ƒ์œ„ ๊ฐœ๋…์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ชจ๋‹ฌ โŠ‚ ๋‹ค์ด์–ผ๋กœ๊ทธ)

MDN - dialog

<dialog> HTML ์š”์†Œ๋Š” ๋ชจ๋‹ฌ ๋˜๋Š” ๋น„๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋‚˜ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผ์ฐฝ, ๊ฒ€์‚ฌ๊ธฐ, ํ•˜์œ„ ์ฐฝ๊ณผ ๊ฐ™์€ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. HTML <dialog> ์š”์†Œ๋Š” ๋ชจ๋‹ฌ ๋ฐ ๋น„๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋Š” ํŽ˜์ด์ง€์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๋ฐ˜๋ฉด, ๋น„๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋Š” ํŽ˜์ด์ง€์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. <dialog> ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด JavaScript๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด .showModal() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋น„๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด .show() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ์ƒ์ž๋Š” .close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ <dialog> ์š”์†Œ ๋‚ด์— ์ค‘์ฒฉ๋œ <form>์„ ์ œ์ถœํ•  ๋•Œ dialog ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋Š” Esc ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๋‹ซ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์ฐจ์ด์ : ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹๊ณผ ๋ชฉ์ 

์ •์˜์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์ƒํ˜ธ์ž‘์šฉ์˜ ๊ฐ•์ œ์„ฑ ์—ฌ๋ถ€์™€ ์‚ฌ์šฉ ๋ชฉ์ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ ๋ชจ๋‹ฌ (Modal) ๋‹ค์ด์–ผ๋กœ๊ทธ (Dialog)
์ƒํ˜ธ์ž‘์šฉ ์ฐจ๋‹จ (Blocking) ๋ชจ๋‹ฌ ์ฐฝ์„ ๋‹ซ๊ธฐ ์ „๊นŒ์ง€ ๋ฐฐ๊ฒฝ ์ฝ˜ํ…์ธ ์™€ ์ƒํ˜ธ์ž‘์šฉ ๋ถˆ๊ฐ€ ์ฐจ๋‹จ ๋˜๋Š” ๋น„์ฐจ๋‹จ (Blocking or Non-blocking) ๋ชจ๋‹ฌ ๋˜๋Š” ๋ชจ๋‹ฌ๋ฆฌ์Šค ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
๋ชฉ์  ์‚ฌ์šฉ์ž ์ฃผ์˜ ์ง‘์ค‘, ๊ฒฐ์ •/์ž…๋ ฅ ๊ฐ•์ œ ์ค‘์š” ์ •๋ณด ํ™•์ธ, ์„ค์ • ๋ณ€๊ฒฝ ๋“ฑ ํ•„์ˆ˜์ ์ธ ๊ณผ์—… ์ˆ˜ํ–‰ ์ •๋ณด ์ œ๊ณต ๋ฐ ์ˆ˜์ง‘ ์•Œ๋ฆผ, ํ™•์ธ ๋ฉ”์‹œ์ง€ ๋“ฑ ์‚ฌ์šฉ์ž์™€์˜ ๊ฐ„๋‹จํ•œ ์†Œํ†ต
๊ด€๊ณ„ ํ•ญ์ƒ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ํ•œ ์ข…๋ฅ˜ (๋ชจ๋“  ๋ชจ๋‹ฌ์€ ๋‹ค์ด์–ผ๋กœ๊ทธ) ํฌ๊ด„์ ์ธ ๊ฐœ๋… (๋ชจ๋“  ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ๋ชจ๋‹ฌ์€ ์•„๋‹˜)

๊ฒฐ๋ก ์ ์œผ๋กœ, '๋ชจ๋‹ฌโ€™์€ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์„ ๊ทœ์ •ํ•˜๋Š” ๊ธฐ์ˆ ์ ์ธ ์šฉ์–ด์— ๊ฐ€๊น๊ณ , '๋‹ค์ด์–ผ๋กœ๊ทธโ€™๋Š” ์‚ฌ์šฉ์ž์™€์˜ ๋Œ€ํ™”๋ผ๋Š” ๋ชฉ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ๋Šฅ์ ์ธ ์šฉ์–ด์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?: ์‚ฌ์šฉ ์‚ฌ๋ก€ (Use Cases)

๊ทธ๋ ‡๋‹ค๋ฉด ์‹ค์ œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์–ธ์ œ ๋ชจ๋‹ฌ์„ ์“ฐ๊ณ , ์–ธ์ œ ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”? ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‹ฌ(Modal) ์‚ฌ์šฉ์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ํŠน์ • ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ๋งŒ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž… ์ฐฝ: ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•  ๋•Œ.
  • ์ค‘์š” ํ™•์ธ ์ฐฝ: "์ •๋ง๋กœ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž์˜ ๋ช…ํ™•ํ•œ ํ™•์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ.
  • ์„ค์ • ๋ณ€๊ฒฝ: ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์˜ ์ฃผ์š” ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ง‰์•„ ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ํ•  ๋•Œ.
  • ์ฝ˜ํ…์ธ  ์ƒ์„ธ ๋ณด๊ธฐ: ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์ด๋ฏธ์ง€๋ฅผ ํฌ๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ๋ฐฐ๊ฒฝ ์Šคํฌ๋กค์€ ๋ง‰๊ณ  ์‹ถ์„ ๋•Œ.

๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog) ์‚ฌ์šฉ์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ฆฌ๊ฑฐ๋‚˜, ์„ ํƒ์ง€๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ž‘์—…์„ ์™„์ „ํžˆ ๋ง‰์„ ํ•„์š”๋Š” ์—†์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์•Œ๋ฆผ(Notifications): โ€œ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.โ€ ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์ง€๋งŒ ์ฆ‰๊ฐ์ ์ธ ํ–‰๋™์„ ๊ฐ•์š”ํ•˜์ง€ ์•Š์„ ๋•Œ (๋ชจ๋‹ฌ๋ฆฌ์Šค).
  • ๊ฐ„๋‹จํ•œ ์„ ํƒ: "ํŒŒ์ผ์„ ์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ์˜ˆ/์•„๋‹ˆ์˜ค ์„ ํƒ์„ ๋ฐ›์„ ๋•Œ (๋ชจ๋‹ฌ).
  • ๋„๊ตฌ ์˜ต์…˜ ์ฐฝ: ํฌํ† ์ƒต๊ณผ ๊ฐ™์€ ํˆด์—์„œ ํŠน์ • ๋„๊ตฌ์˜ ์„ธ๋ถ€ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋Š” ์ž‘์€ ์ฐฝ (๋ชจ๋‹ฌ๋ฆฌ์Šค).

๊ธฐ์ˆ ์  ๊ตฌํ˜„ ๊ด€์ 

์›น ๊ฐœ๋ฐœ์—์„œ ๋ชจ๋‹ฌ๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ๋Š” ์ฃผ๋กœ HTML, CSS, JavaScript๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • HTML: <dialog> ํƒœ๊ทธ๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ HTML ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ํƒœ๊ทธ๋Š” showModal() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ ํ˜•ํƒœ๋กœ, show() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ๋ฆฌ์Šค ํ˜•ํƒœ๋กœ ์‰ฝ๊ฒŒ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS: ::backdrop ๊ฐ€์ƒ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด <dialog>๊ฐ€ ๋ชจ๋‹ฌ ํ˜•ํƒœ๋กœ ์—ด๋ ธ์„ ๋•Œ ๋ฐฐ๊ฒฝ(๋ฐฑ๋“œ๋กญ)์˜ ์Šคํƒ€์ผ(์˜ˆ: ์–ด๋‘ก๊ฒŒ ์ฒ˜๋ฆฌ)์„ ์‰ฝ๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • JavaScript: JavaScript๋Š” ๋ชจ๋‹ฌ/๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์—ด๊ณ  ๋‹ซ๋Š” ๋กœ์ง์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ showModal()์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ Esc ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
<!-- HTML ๊ตฌ์กฐ ์˜ˆ์‹œ -->
<dialog id="myDialog">
  <h2>๋‹ค์ด์–ผ๋กœ๊ทธ ์ œ๋ชฉ</h2>
  <p>์ด๊ฒƒ์€ ๋‹ค์ด์–ผ๋กœ๊ทธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.</p>
  <button id="closeBtn">๋‹ซ๊ธฐ</button>
</dialog>

<button id="openBtn">๋‹ค์ด์–ผ๋กœ๊ทธ ์—ด๊ธฐ</button>

<script>
  // JavaScript ๊ตฌํ˜„ ์˜ˆ์‹œ
  const dialog = document.getElementById('myDialog');
  const openBtn = document.getElementById('openBtn');
  const closeBtn = document.getElementById('closeBtn');

  openBtn.addEventListener('click', () => {
    dialog.showModal(); // ๋ชจ๋‹ฌ ํ˜•ํƒœ๋กœ ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  });

  closeBtn.addEventListener('click', () => {
    dialog.close(); // ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  });
</script>

์ด์ฒ˜๋Ÿผ ์ตœ์‹  ์›น ํ‘œ์ค€์—์„œ๋Š” <dialog> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๋ชจ๋‘ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•œ ์„ ํƒ

์ด์ œ ๋ชจ๋‹ฌ๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ์ฐจ์ด์ ์ด ๋ช…ํ™•ํ•ด์ง€์…จ์„ ๊ฒ๋‹ˆ๋‹ค.

  • ๋ชจ๋‹ฌ(Modal)์€ ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ฐ•์ œํ•˜๊ณ  ์ฃผ์˜๋ฅผ ์ง‘์ค‘์‹œ์ผœ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog)๋Š” ์‚ฌ์šฉ์ž์™€ ๊ฐ„๋‹จํ•œ ์†Œํ†ต์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํฌ๊ด„์ ์ธ ๊ฐœ๋…์˜ ๋Œ€ํ™” ์ƒ์ž์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ชจ๋‹ฌ์€ ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ์ผ์ข…์ด์ง€๋งŒ, ๋ชจ๋“  ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ๋ชจ๋‹ฌ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์‚ฌ์šฉ์ž์˜ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋Š” ์„ ์—์„œ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž‘์—…์„ ์ฐจ๋‹จํ•˜๋Š” ๋ชจ๋‹ฌ์˜ ์‚ฌ์šฉ์€ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ UI๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, "์ด ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž์˜ ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ฌ ๋งŒํผ ์ค‘์š”ํ•œ๊ฐ€?"๋ฅผ ๋จผ์ € ๊ณ ๋ฏผํ•ด ๋ณด์„ธ์š”. ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์ด ๋ชจ๋‹ฌ๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ ์‚ฌ์ด์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์„ ํ•˜๋„๋ก ๋„์™€์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

๋ชจ๋‹ฌ(Modal)๊ณผ ๋‹ค์ด์–ผ๋กœ๊ทธ(Dialog) ์ฐจ์ด์  ์™„๋ฒฝํ•œ ์ •๋ฆฌ | devdong