โœ๐Ÿป [Code Camp_TIL] 13์ผ์ฐจ: ๋ ˆ์ด์•„์›ƒ, ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ, font

code_Jยท2023๋…„ 4์›” 3์ผ
0

TIL

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

๋ ˆ์ด์•„์›ƒ ์žก๊ธฐ


๋ ˆ์ด์•„์›ƒ์€ UI์˜ ๋ฐฐ์น˜์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, Header, Navigation, Menu, Footer, Main ๋“ฑ์œผ๋กœ ํ™”๋ฉด์„ ์ชผ๊ฐœ๋Š” ์ผ์„ ์˜๋ฏธํ•œ๋‹ค.

์›นํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ํŽ˜์ด์ง€๋“ค์˜ ์ „์ฒด์ ์ธ ํฐ ํ‹€(๋ ˆ์ด์•„์›ƒ)์€ ๋™์ผํ•˜๊ณ , ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ๋ ˆ์ด์•„์›ƒ๋งŒ ์ž˜ ์žก์•„๋„ ํ”„๋กœ์ ํŠธ ์ „์ฒด์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ๋ ˆ์ด์•„์›ƒ์„ ํ•˜๋‚˜ํ•˜๋‚˜ import ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์ข€ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ์ด๊ฑฐ๋ฅผ ํ•œ๋ฒˆ์— ๋งŒ๋“ค ์ˆ˜๋Š” ์—†์„๊นŒ?

header, navigation, banner, footer ๋“ฑ์˜ ๊ณตํ†ต component๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ด๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ์กฐ๋ฆฝํ•˜๋Š” index ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค!


// index ํŒŒ์ผ

export default function Layout(props:IProps) {
  return(
    <>
    	<LayoutHeader />
    	<LayoutBanner />
    	<LayoutNavigation />
    	<LayoutBodyWrapper>
    		<LayoutSidebar />
    		<LayoutBody>{props.children}</LayoutBody>
    	</LayoutBodyWrapper>
    	<LayoutFooter />
    </>
    )
}

์—ฌ๊ธฐ์„œ props.children์„ ๋ณด์ž. ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ–ˆ๋˜ props๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์˜ ์™ผ์ชฝ ๋ถ€๋ถ„์ด๋‹ค. ํ•ด๋‹น ํƒœ๊ทธ์˜ ์ž์‹ ํƒœ๊ทธ๋“ค์€ ๋”ฐ๋กœ ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š๋”๋ผ๋„, ์ž๋™์œผ๋กœ children์ด๋ž€ ์ด๋ฆ„์œผ๋กœ props๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ๋ฐ”๋””์˜์—ญ์ด ์ „์ฒด Layout์˜ children์ด ๋˜๋ฉฐ, ๋ชจ๋“  ํŽ˜์ด์ง€๋Š” ๋ฐ”๋””์˜์—ญ์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค.


๋ ˆ์ด์•„์›ƒ hidden ์˜์—ญ ์„ค์ •


ํŠน์ • ํŽ˜์ด์ง€๋Š” ํŠน์ • ๋ ˆ์ด์•„์›ƒ์ด ๋ณด์ด์ง€ ์•Š์•˜์œผ๋ฉด ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ์—๋Š” ๊ทธ ๋ ˆ์ด์•„์›ƒ์ด ํŠน์ • ํŽ˜์ด์ง€์—์„œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ฒŒ ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

const HIDDEN_HEADERS = [
	"/12-05-modal-address-state-prev",
  // ...
]

export default function Layout(props) {
  const router = useRouter()
  
  const isHiddenHeader = HIDDEN_HEADERS.includes(router.asPath);
  
  return (
    <Wrapper>
    	{!isHiddenHeader && <Header />}
    	<Banner />
    	<Navigation />
    	<BodyWrapper>
    		<Sidebar></Sidebar>
    		<Body>{props.children}</Body>
    	</BodyWrapper>
    	<Footer />
    </Wrapper>
    )
}

ํŠน์ • ํŽ˜์ด์ง€์—์„œ Header ๋ถ€๋ถ„์ด ๋ณด์ด์ง€ ์•Š์•˜์œผ๋ฉด ํ•œ๋‹ค๋ฉด, ๊ทธ ํŽ˜์ด์ง€์˜ asPath ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋‹ด์•„์ฃผ๊ณ , includes()๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด ๋‚ด ๊ฐ’๊ณผ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ asPath ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋™์ผํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋งŒ Header๊ฐ€ ๋ณด์ด๊ฒŒ๋” ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด์„œ ํŠน์ • ํŽ˜์ด์ง€์—์„œ๋Š” ํŠน์ • ๋ ˆ์ด์•„์›ƒ์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋„๋ก ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.


๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ

๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ์€ ๋ชจ๋“  ํŽ˜์ด์ง€์— ์ ์šฉํ•˜๋Š” ์Šคํƒ€์ผ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ์ตœ์ƒ๋‹จ ํŒŒ์ผ์—์„œ css๋กœ ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ ์†์„ฑ์„ ๋ถ€์—ฌํ•˜๋ฉด ๋œ๋‹ค!


Font

font๋Š” ์ง์ ‘ ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ ํ˜น์€ ์›นํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํฐํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•  ๋•Œ์—๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ํฐํŠธ(sub set font)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ์šฉ๋Ÿ‰์ด ๋„ˆ๋ฌด ํฐ ํŒŒ์ผ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

ํฐํŠธ๋Š” global style์—์„œ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. @font-face๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํฐํŠธ๋ฅผ ํ˜ธ์ถœํ•  ์ด๋ฆ„(font-family)์™€ ํฐํŠธ ๊ฒฝ๋กœ(src)๋ฅผ ์„ ์–ธํ•˜๊ณ , ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํŽ˜์ด์ง€์˜ style ๋ถ€๋ถ„์—์„œ

font-family: "ํฐํŠธ๋ช…"

๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ์šฉ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

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