๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์›น์ ‘๊ทผ์„ฑ (5)

UI Code Lab

๐ŸŒ— ์šด์˜์ฒด์ œ ํ…Œ๋งˆ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋ณ€ํ•˜๋Š” ์›น UI – prefers-color-scheme ํ™œ์šฉ ๊ฐ€์ด๋“œ

๋‹คํฌ ๋ชจ๋“œ ํ† ๊ธ€ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž ๋งž์ถค UX์˜ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„์˜ ์„ค์ • ์—†์ด๋„ ์šด์˜์ฒด์ œ์˜ ํ…Œ๋งˆ์— ๋งž์ถฐ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ˜์‘ํ•œ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ์ง๊ด€์ ์ธ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ ์‹œ์Šคํ…œ ํ…Œ๋งˆ ๊ฐ์ง€ ๊ธฐ๋Šฅ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” prefers-color-scheme ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์šด์˜์ฒด์ œ์˜ ๋ผ์ดํŠธ/๋‹คํฌ ์„ค์ •์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉ์ž ์„ค์ •๊ณผ ์กฐํ•ฉํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. โœ… ๊ตฌํ˜„ ๋ชฉํ‘œOS์˜ ๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ ์ƒํƒœ ๊ฐ์ง€์‚ฌ์šฉ์ž ์„ค์ •๊ณผ ์‹œ์Šคํ…œ ์„ค์ •์˜ ์šฐ์„ ์ˆœ์œ„ ์ฒ˜๋ฆฌCSS ๋ณ€์ˆ˜์™€ data-theme ์†์„ฑ์„ ํ™œ์šฉํ•œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ €์žฅ์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๐Ÿง  CSS์—์„œ ์‹œ์Šคํ…œ ํ…Œ๋งˆ ๊ฐ์ง€ํ•˜๊ธฐ ์šด์˜์ฒด์ œ๊ฐ€ ๋‹คํฌ ๋ชจ๋“œ๋กœ ์„ค์ •๋˜์–ด ..

๐ŸŒ™ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ์•ˆํ•จ์„ ์ œ๊ณตํ•˜๋Š” ์›น – ๋ฐ”๋‹๋ผ JS๋กœ ๋‹คํฌ ๋ชจ๋“œ ์ „ํ™˜ ๊ตฌํ˜„ํ•˜๊ธฐ

์›น์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ํ™˜๊ฒฝ์ด ๋‹ค์–‘ํ•ด์ง€๋ฉด์„œ, ์ด์šฉ์ž๋“ค์€ ๋ฐ๊ณ  ํ™”๋ คํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๋ˆˆ์— ํŽธ์•ˆํ•œ ์–ด๋‘์šด ํ…Œ๋งˆ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐค ์‹œ๊ฐ„์ด๋‚˜ ์กฐ๋ช…์ด ๋‚ฎ์€ ๊ณณ์—์„œ ์ ‘์†ํ•  ๊ฒฝ์šฐ, ํ™”๋ฉด์ด ์ง€๋‚˜์น˜๊ฒŒ ๋ฐ์œผ๋ฉด ์‹œ์•ผ์— ๋ถ€๋‹ด์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(๋ฐ”๋‹๋ผ JS)๋งŒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ์ง๊ด€์ ์ธ ๋‹คํฌ ๋ชจ๋“œ ํ† ๊ธ€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž ์„ค์ •์„ ๊ธฐ์–ตํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์‹ค๋ฌด์—๋„ ์ถฉ๋ถ„ํžˆ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿงฑ HTML ๊ตฌ์„ฑ – ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์‹œ์ž‘๋จผ์ € ํ…Œ๋งˆ ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ๐ŸŒž / ๐ŸŒš ๋ชจ๋“œ ์ „ํ™˜ ์ด ๋ฒ„ํŠผ์€ ๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ ์ „ํ™˜์„ ๋‹ด๋‹นํ•˜๋ฉฐ, id ์†์„ฑ์„ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ฉ..

๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ UI ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ – ์‹ค์ „ ์‚ฌ๋ก€ ์ค‘์‹ฌ

์›น UI์—์„œ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์ธํ„ฐํŽ˜์ด์Šค(Drag and Drop UI) ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์ฒจ๋ถ€, ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ, ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹ค๋ฌด ์‚ฌ๋ก€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ด ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(Vanilla JavaScript)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์‹ค์ „ ์‚ฌ๋ก€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ UI๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. โœ… Gmail ์Šคํƒ€์ผ์˜ ํŒŒ์ผ ์ฒจ๋ถ€ ๋“œ๋กญ์กดโœ… TODO ์•ฑ์—์„œ ํ•  ์ผ ์ˆœ์„œ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅโœ… ๋Œ€์‹œ๋ณด๋“œ ์œ„์ ฏ ์œ„์น˜ ์ด๋™ UI ๐Ÿ“‚ 1. ํŒŒ์ผ ์ฒจ๋ถ€ ๋“œ๋กญ์กด UI – Gmail ์Šคํƒ€์ผ ๊ตฌํ˜„ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” UI๋Š” ์ด๋ฉ”์ผ, ๊ฒŒ์‹œํŒ, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ..

์ง„ํ–‰ ์ƒํ™ฉ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ํƒ€์ž„๋ผ์ธ UI ๋งŒ๋“ค๊ธฐ (JavaScript ๊ธฐ๋ฐ˜)

์›น์—์„œ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜์™€ ์ง„ํ–‰ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” UI๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ํฐ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ํŠนํžˆ CAD์™€ ๊ฐ™์€ ๊ธฐ์ˆ  ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ๋Š” “์ง€๊ธˆ ๋‚ด๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„์— ์žˆ๋Š”์ง€”๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ฃ . ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JavaScript์™€ CSS๋งŒ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ง„ํ–‰ ๋‹จ๊ณ„ ํƒ€์ž„๋ผ์ธ UI๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ’ก ์ง์ ‘ ํ™œ์šฉํ•œ ์˜ˆ์‹œ๋Š” ํ˜„์žฌ CAD ํŽ˜์ด์ง€์˜ ํ๋ฆ„STEP 1: CAD ํŒŒ์ผ ์ค€๋น„ >> STEP 2: CAD ํŒŒ์ผ ๊ฒ€ํ†  >> STEP 3: ์Šน์ธ ๋Œ€๊ธฐ >> STEP 4: ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ STEP 1๊ณผ STEP 2๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ด๋ฏธ ๋“ฑ๋ก๋œ ์™„๋ฃŒ ๋‹จ๊ณ„๋กœ ๊ฐ™์€ ์ƒ‰์ƒ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ์ธ STEP 3๋Š” ๊ฐ•์กฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ํ‘œํ˜„ํ•ด ์‚ฌ์šฉ์ž์˜ ์ฃผ์˜๋ฅผ ๋Œ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. โœ… ์ฃผ์š”..

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋“œ๋กญ๋‹ค์šด ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ (Dropdown)

์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ๋ฉ”๋‰ด๋‚˜ ํ•„ํ„ฐ, ์„ค์ • ์ฐฝ ๋“ฑ ๋“œ๋กญ๋‹ค์šด(dropdown) ๊ธฐ๋Šฅ์ด ๊ผญ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” jQuery ์—†์ด๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(dropdown)๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๋ฉด ์—ด๋ฆฌ๊ณ , ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ๋‹ซํžˆ๋Š” ๊ธฐ๋ณธ ๋“œ๋กญ๋‹ค์šด UI๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. โœ… ๋“œ๋กญ๋‹ค์šด์ด๋ž€?๋“œ๋กญ๋‹ค์šด(dropdown)์€ ์‚ฌ์šฉ์ž์˜ ํด๋ฆญ์— ๋”ฐ๋ผ ์„ ํƒ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” UI ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด, ์–ธ์–ด ์„ ํƒ ์ฐฝ, ์•Œ๋ฆผ ๋ชฉ๋ก ๋“ฑ์—์„œ ์ž์ฃผ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ› ๏ธ HTML ๊ตฌ์กฐ ๋จผ์ € dropdown์„ ๊ตฌ์„ฑํ•  ๊ธฐ๋ณธ HTML์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค: ๋ฉ”๋‰ด ์—ด๊ธฐ โ–พ ํ™ˆ ์†Œ๊ฐœ ๋ฌธ์˜ ๐ŸŽจ CSS ์Šคํƒ€์ผ๊ธฐ๋ณธ์ ์œผ๋กœ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋Š” ์ˆจ๊ธฐ๊ณ , ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ณด์ด๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค....