๐ŸŽจ TopNav์™€ BottomNav ์‚ฌ์ด์—์„œ ์‚ด์•„๋‚จ๊ธฐ โ€“ ๊ฒน์นจ์„ ํ”ผํ•œ ๋ ˆ์ด์•„์›ƒ ๋ฆฌํŒฉํ„ฐ๋ง

์กฐ์ค€ํ˜•ยท2025๋…„ 4์›” 11์ผ
0

CHOP!

๋ชฉ๋ก ๋ณด๊ธฐ
19/20
post-thumbnail

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

โš ๏ธ ๋ฌธ์ œ ์ƒํ™ฉ

  • WorldSelect ์ปดํฌ๋„ŒํŠธ๊ฐ€ BottomBanner์™€ ๊ฒน์ณ ์•„์ด์ฝ˜์ด ์ž˜๋ฆฌ๊ฑฐ๋‚˜ ํด๋ฆญ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ ๋ฐœ์ƒ

  • ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ vh ๋‹จ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ–ˆ๋Š”๋ฐ, ๊ณ ์ •๋œ ์˜์—ญ์ด ์—†์–ด์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ถฉ๋Œ์ด ์ƒ๊น€

๐Ÿ”ง ํ•ด๊ฒฐ ์ „๋žต

โœ… 1. TopNav๋ฅผ ๊ณ ์ •(fixed)

  • ๊ฐ€์žฅ ๋จผ์ € TopNav๋ฅผ position: fixed๋กœ ์„ค์ •ํ•ด์„œ ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ์— ํ•ญ์ƒ ๊ณ ์ •๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค

  • ๋‹ค๋ฅธ ์š”์†Œ์™€ ๊ฒน์น˜์ง€ ์•Š๋„๋ก z-index: 1000์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ

  • max-width: calc(100vh * 5 / 9)๋กœ ๊ฐ€๋กœํญ์„ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด ๋น„์œจ์— ๋งž๊ฒŒ ์ œํ•œ

    ์ด ๋น„์œจ์€ ์ผ๋ฐ˜์ ์ธ ์Šค๋งˆํŠธํฐ์˜ 9:5 ํ™”๋ฉด ๋น„์œจ์„ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •ํ•œ ๊ฐ’์ด๋ฉฐ, ์„ธ๋กœ ๊ธฐ์ค€ ๋น„์œจ ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค

โœ… 2. ์ปดํฌ๋„ŒํŠธ์— margin-top ์ถ”๊ฐ€

  • TopNav๊ฐ€ ๊ณ ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜์ชฝ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋ชจ๋“  ์ฃผ์š” ์š”์†Œ์— margin-top: 7.5vh๋ฅผ ๋ถ€์—ฌ

  • ์ด ์ˆ˜์น˜๋Š” TopNav์˜ ๋†’์ด์™€ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ์ ธ ์žˆ์–ด์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฐ„๊ฒฉ ํ™•๋ณด

โœ… 3. WorldSelect์˜ ๋†’์ด ์ž๋™ ์„ค์ •

  • WorldSelect ์ปดํฌ๋„ŒํŠธ๋Š” ์•„์ด์ฝ˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํ•œ ์ค„, ๋‘ ์ค„, ์„ธ ์ค„๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ ๊ณ ์ •๋œ ๋†’์ด๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Œ

  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•„์ด์ฝ˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑ:

const getWrapperHeight = () => {
  const rows = Math.ceil(worlds.length / 5);
  return `${Math.max(20, rows * 11)}vh`; // ์ตœ์†Œ 20vh, ํ•œ ์ค„๋‹น 11vh์”ฉ ๊ณ„์‚ฐ
};
  • ์ด ๋ฐฉ์‹์€ ์ค„ ์ˆ˜์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ ๋†’์ด๋ฅผ ์ž๋™ ์กฐ์ •ํ•ด์„œ, BottomNav์™€์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•จ

๐Ÿ“š ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์ 

๐Ÿ“Œ 1. fixed ์š”์†Œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด์ค˜์•ผ ํ•œ๋‹ค

position: fixed๋Š” ๋‹ค๋ฅธ ์š”์†Œ์˜ ํ๋ฆ„์—์„œ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต๊ฐ„์„ margin/padding์œผ๋กœ ์ˆ˜๋™ ํ™•๋ณดํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒน์น˜๋Š” ํ˜„์ƒ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค

๐Ÿ“Œ 2. ๋น„์œจ ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ์€ ๋ชจ๋ฐ”์ผ UI ๋Œ€์‘์— ์ ํ•ฉํ•˜๋‹ค

max-width: calc(100vh * 5 / 9)์ฒ˜๋Ÿผ ์„ธ๋กœ ๊ธฐ๋ฐ˜ ๋น„์œจ์„ ์ค‘์‹ฌ์œผ๋กœ ์ „์ฒด ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹์€ ๋ฐ์Šคํฌํƒ‘์—์„œ๋„ ๋ชจ๋ฐ”์ผ UI๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค

๐Ÿ“Œ 3. ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๋Š” ๋™์ ์œผ๋กœ ์กฐ์ •๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค

๊ณ ์ •๋œ height๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์œ ์—ฐํ•˜๊ณ  ๋ฐ˜์‘ํ˜• ๋Œ€์‘์—๋„ ๊ฐ•ํ•˜๋‹ค

๋‹จ์ˆœํžˆ vh, px ๋‹จ์œ„๋ฅผ ์“ด๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋ฐ”์ผ UI๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,
์ „์ฒด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ณ ๋ คํ•œ ๋ฐฐ์น˜ ์ „๋žต์ด ํ•„์ˆ˜๋ผ๋Š” ์ ์„ ํ™•์‹คํžˆ ๊นจ๋‹ฌ์•˜๋‹ค

โœจ ํšŒ๊ณ 

์ด๋ฒˆ ์ž‘์—…์€ ๋‹จ์ˆœํ•œ ์Šคํƒ€์ผ๋ง ์ด์ƒ์˜ ๊ณผ์ œ์˜€๋‹ค. ๊ฒน์นจ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ™”๋ฉด ๋น„์œจ ๊ณ„์‚ฐ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์—ฌ๋ฐฑ ์กฐ์ ˆ, ๋†’์ด ๊ณ„์‚ฐ ํ•จ์ˆ˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์†Œ๊ฐ€ ๋งž๋ฌผ๋ ค์•ผ ํ–ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” ๊ณ ์ • ์œ„์น˜ ์š”์†Œ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ํ•ญ์ƒ ๊ณต๊ฐ„ ํ™•๋ณด ์—ฌ๋ถ€๋ฅผ ๊ฒ€ํ† ํ•ด์•ผ ํ•˜๊ณ 

๋ชจ๋ฐ”์ผ ๋Œ€์‘ UI๋ฅผ ๋งŒ๋“ค ๋• ๋‹จ์ˆœํ•œ width: 100px ๊ฐ™์€ ํ•˜๋“œ์ฝ”๋”ฉ๋ณด๋‹ค ๋น„์œจ ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ์ด ํ›จ์”ฌ ์œ ์—ฐํ•˜๋‹ค๋Š” ๊ฑธ ์ฒด๊ฐํ–ˆ๋‹ค

CSS ๊ตฌ์กฐ ๋ฌธ์ œ๋Š” ๊ฒ‰๋ณด๊ธฐ์—” ๋‹จ์ˆœํ•ด ๋ณด์—ฌ๋„, ํ™”๋ฉด ์ „์ฒด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์•„์šฐ๋ฅด๋Š” ์„ค๊ณ„ ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์ด๋ฒˆ์— ์ œ๋Œ€๋กœ ๋ฐฐ์› ๋‹ค.

profile
์ฝ”๋ฆฐ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€