๋ธ”๋กœ๊ทธ ํ•œ๋•€ํ•œ๋•€ ๋งŒ๋“ค๊ธฐ - 6. ๊ธฐ๋ณธ์ ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ

2023-05-25
  • blog
  • web
์กฐํšŒ์ˆ˜ ํšŒ

1. ๋””์ž์ธ์˜ ์‹œ์ž‘, ๋ ˆ์ด์•„์›ƒ

my-ugly-blog

์ง€๊ธˆ ๋‚ด ๋ธ”๋กœ๊ทธ๋Š” ๋งค์šฐ ๋ชป์ƒ๊ฒผ๋‹ค. ์ƒ‰๋„ ํ•˜๋‚˜๋„ ์•ˆ ์ž…ํ˜€์ ธ ์žˆ๊ณ (๋งํฌ์— ์ž…ํ˜€์ง„ ๊ธฐ๋ณธ ์ƒ‰์ƒ ๋ง๊ณ ๋Š”), CSS๋„ ํ•˜๋‚˜๋„ ์—†์–ด์„œ ๋งํฌ๋“ค์€ ์จํ•œ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ณด์ด๊ณ  ๋‚œ๋ฆฌ๊ฐ€ ๋‚ฌ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๋ฌธ์ œ๋Š” ๋ฐฐ์น˜๊ฐ€ ์ œ๋ฉ‹๋Œ€๋กœ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. HTML ์‹œ๋งจํ‹ฑ์ด์•ผ ์ž˜ ์งœ์—ฌ ์žˆ(๋‹ค๊ณ  ๋ฏฟ)์ง€๋งŒ ๊ทธ๋ƒฅ ์œ„์—์„œ ์•„๋ž˜๋กœ ๋ฐฐ์—ด๋˜์—ˆ์„ ๋ฟ์ด๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ํŽ˜์ด์ง€์—์„œ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์ด๋Š” ํฐ ๋ฌธ์ œ๋‹ค.

๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•œ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ์›น์‚ฌ์ดํŠธ ๋””์ž์ธ์˜ ๋น„๋ฐ€์—์„œ๋„ ๋ ˆ์ด์•„์›ƒ์„ ๋ชฉ์ฐจ์˜ ์ฒซ๋ฒˆ์งธ๋กœ ๊ผฝ๊ณ  ์žˆ๋‹ค.

๋˜ํ•œ 10๋…„์ฐจ ๋””์ž์ด๋„ˆ๋ถ„์˜ ์‹œ๋ฆฌ์ฆˆ ๋ˆ„๊ตฌ๋‚˜ ๋””์ž์ด๋„ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค์—์„œ๋„ ๋””์ž์ธ์˜ 4๋Œ€ ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ€๋…์„ฑ์ด ์ •๋ง ์•ˆ ์ข‹์€ ํŽ˜์ด์ง€๋ฅผ ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ด์•ผ๊ธฐ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฒˆ์—๋Š” CSS๋ฅผ ํ™œ์šฉํ•ด์„œ ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ํ•œ๋ฒˆ ์ˆ˜์ •ํ•ด ๋ณด๋„๋ก ํ•˜์ž. ๋ฉ”์ธ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณผ๊นŒ.

๋ชจ๋ฐ”์ผ ์šฐ์„  ๋””์ž์ธ์„ ์ ์šฉํ•˜์˜€๋‹ค. ๋‚ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋ชจ๋ฐ”์ผ๋กœ ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ์„ ๊ฒƒ์ด๊ณ  ๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์„ฑ๋Šฅ์ด ๋” ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ฐ”์ผ ์šฐ์„ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ๋‚˜์„œ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒŒ ์†๋„ ๋ฉด์—์„œ ๋” ๋‚˜์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ css ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฑํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด๋ผ ๊ฐ€์žฅ ๊ณ ์ „์ ์ธ BEM ํด๋ž˜์Šค ์ž‘๋ช…๋ฒ•์„ ์ ๋‹นํžˆ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

2. ํŽ˜์ด์ง€ ํ—ค๋”์™€ ํ‘ธํ„ฐ ๊ณตํ†ตํ™”

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

๋”ฐ๋ผ์„œ ์ด๋ฅผ ๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์œผ๋กœ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•˜์ž. /src/pages/_app.tsx๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

// src/pages/_app.tsx
import '@/styles/globals.css';
import type { AppProps } from 'next/app';

import Footer from '@/components/footer';
import Header from '@/components/header';
import blogCategoryList from 'blog-category';

export default function App({ Component, pageProps }: AppProps) {
  return (
    <>
      <Header navList={blogCategoryList} />
      <Component {...pageProps} />
      <Footer />
    </>
  );
}

๊ทธ๋ฆฌ๊ณ  /src/pages/index.tsx์— ์žˆ๋˜ ํ—ค๋”์™€ ํ‘ธํ„ฐ๋Š” ์ง€์›Œ์ค€๋‹ค.

3. ์ฝ˜ํ…์ธ  ์˜์—ญ ๋„ˆ๋น„

ํ˜„์žฌ ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€์˜ ์ปจํ…์ธ ๋Š” width๊ฐ€ 100%๋ผ ํŽ˜์ด์ง€๋ฅผ ๊ฝ‰ ์ฑ„์šฐ๊ณ  ์žˆ๋‹ค. ํ™”๋ฉด์ด ์ข์€ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋ผ๋ฉด ํ…์ŠคํŠธ๊ฐ€ ๋‹ต๋‹ตํ•˜๊ฒŒ ๋ฐฐ์น˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ปจํ…์ธ ๋ฅผ ์ตœ๋Œ€ํ•œ ๋„“์€ ๋„ˆ๋น„์— ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒŒ ๊ฑฐ์˜ ์ •๋‹ต์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์•ˆ ๊ทธ๋ž˜๋„ 768px ๋ฏธ๋งŒ์˜ ํ™”๋ฉด ๋„ˆ๋น„์ผ ๋•Œ๋Š” ์–‘์ชฝ์— ์•ฝ๊ฐ„์˜ ํŒจ๋”ฉ์„ ์ฃผ๊ฒ ์ง€๋งŒ ์ฝ˜ํ…์ธ ๋ฅผ ํ™”๋ฉด์— ๊ฑฐ์˜ ๊ฝ‰ ์ฑ„์šฐ๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ 1920px ๋„ˆ๋น„๊ฐ€ ๋งŽ์€ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๊ฒŒ ๋„ˆ๋ฌด ๋„“์–ด ๋ณด์ด๊ณ  ํ•œ ์ค„์— ์žˆ๋Š” ๊ธ€์ž๋„ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ฝ๊ธฐ ํž˜๋“ค ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ˜ํ…์ธ ์˜ ์ตœ๋Œ€ ๋„“์ด๋ฅผ ์ œํ•œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ณธ๋‹ค. max-width ์†์„ฑ์„ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.

3.1. ์ตœ๋Œ€ ์ฝ˜ํ…์ธ  ๋„ˆ๋น„์— ๊ด€ํ•œ ๊ณ ์ฐฐ

๊ทธ๋Ÿฐ๋ฐ ์–ด๋Š ์ •๋„์˜ ๋„ˆ๋น„๊นŒ์ง€ ์ปจํ…์ธ ๋ฅผ ์ฑ„์šฐ๋„๋ก ํ•ด์•ผ ํ• ๊นŒ?

์›น ์ ‘๊ทผ์„ฑ ๊ฐ€์ด๋“œ์—์„œ๋Š” ํ…์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 80์ž ๋„ˆ๋น„๋ฅผ ๋„˜์œผ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. max-width: 70rem์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๋ณด๋ผ๊ณ  ์กฐ์–ธ๋„ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์ด์ฆˆ๊ฐ€ 16px์ด๋ฏ€๋กœ ์•ฝ 1120px ์ •๋„์˜ ์ตœ๋Œ€ ๋„ˆ๋น„๋ฅผ ๊ฐ–๊ฒŒ ํ•˜๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ max-width๋ฅผ 60rem์œผ๋กœ๋„ ํ•ด๋ณด๊ณ  70rem์œผ๋กœ๋„ ํ•ด๋ดค๋‹ค. 1920px์—์„œ ๋ด๋„ ์—ฌ๋ฐฑ์ด ์ƒ๊ฐ๋งŒํผ ์—„์ฒญ ๋„“์–ด ๋ณด์ด์ง€ ์•Š๊ณ  ๊ดœ์ฐฎ์•„ ๋ณด์˜€๋‹ค.

๊ทธ ์ •๋„๋กœ ์„ค์ •ํ•˜์ž ์—ฌ๋ฐฑ์€ ์ถฉ๋ถ„ํ•ด ๋ณด์˜€์œผ๋‚˜ ํ•ด๋‹น ๋„ˆ๋น„์— ํ…์ŠคํŠธ๋ฟ์ผ ๋•Œ ํ•œ ์ค„๋‹น ํ…์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ ๋ณด์˜€๋‹ค. ๊ทธ๋Ÿผ ํ•œ ์ค„์— ์–ผ๋งŒํผ์˜ ๊ธ€์ž ์ˆ˜๊ฐ€ ์ ์ ˆํ• ๊นŒ?

ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์—ฐ๊ตฌ์— ์˜ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์€ ์˜จ๋ผ์ธ ์ปจํ…์ธ ๋ฅผ ์ฝ์„ ๋•Œ ๋” ์งง์€ ์ค„ ๊ธธ์ด๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ๋” ์กฐ์งํ™”๋˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๊ณ  ๋Š๋ผ๊ธฐ ๋•Œ๋ฌธ์— ์งง์€ ์ค„์„ ๋” ์„ ํ˜ธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  40~55์ž ์ •๋„์˜ ์ค„ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์ด์ƒ์ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ตฌํ•ด์•ผ ํ•  ๊ฑด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ฝ˜ํ…์ธ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„๋Š” 60~70rem์œผ๋กœ
  • ํ…์ŠคํŠธ๋Š” ํ•œ ์ค„๋‹น 4055์ž(์ฆ‰ 4055rem)์ด ๋˜๋„๋ก ์„ค์ •

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฑด ๋ฉ”์ธ ํŽ˜์ด์ง€, ๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์ด๋‹ค. ์ด๋•Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์™€ ๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง€๋Š” ์ตœ๋Œ€ ๋„ˆ๋น„๊ฐ€ 6070rem์ด ๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…์ŠคํŠธ๋Š” ํ•œ ์ค„์— 4055์ž๋งŒ ๋“ค์–ด๊ฐ€๋„๋ก ์„ค์ •ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜๋“ค์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฉ”์ธ ํŽ˜์ด์ง€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

article-list

์†Œ๊ฐœ ์˜์—ญ์€ ๋‚ด ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ์˜ฌ๋ฆฌ๋Š” ๊ฑธ๋กœ ํ…์ŠคํŠธ ์˜์—ญ์˜ ๋„ˆ๋น„๋ฅผ 40~55์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๊ณ  ๊ธ€ ํ”„๋ฆฌ๋ทฐ์— ์žˆ๋Š” ํ…์ŠคํŠธ๋Š” ๋‹น์—ฐํžˆ ํ•œ์ฐธ ์ ์€ ์ค„๋‹น ๊ธ€์ž์ˆ˜๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ ๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด, ๊ธ€ ํ”„๋ฆฌ๋ทฐ ์นด๋“œ(?)์— ๊ธ€์˜ ์ธ๋„ค์ผ์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์นด๋“œ์— ๋“ค์–ด๊ฐ€๋Š” ํ…์ŠคํŠธ๋ฅผ ํ•œ์ •ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํ† ์Šค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ์˜ ๋ ˆ์ด์•„์›ƒ์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

article-list-page

ํ•˜์ง€๋งŒ ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ ๋”ฑํžˆ ๊ธ€ ์ฝ˜ํ…์ธ  ์˜์—ญ ๋„ˆ๋น„๋ฅผ ์ค„์—ฌ์ค„ ์–ด๋–ค ์žฅ์น˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—(๋ฌผ๋ก  TOC๋ฅผ ์˜†์ชฝ์— ๋„ฃ๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฐฉ์‹๋„ ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ ๊ทธ๊ฑด ๋‚˜์ค‘์— ์ƒ๊ฐํ•ด๋ณด์ž) ๊ทธ๋ƒฅ ์ „์ฒด ์˜์—ญ์„ 50rem์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค.

3.2. ์ฝ˜ํ…์ธ  ์˜์—ญ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •

์ผ๋‹จ ๋ฉ”์ธ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด /src/pages/styles.module.css์— ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. max-width๋งŒ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ž˜ํผ๋“ค๋„ ์ด๋ฅผ ๋”ฐ๋ฅด๋ฉด ๋œ๋‹ค.

// /src/pages/styles.module.css
.pagewrapper{
  margin:0 auto;
  width:100%;
  min-height:100vh;
}

@media (min-width: 768px) {
  .pagewrapper{
    max-width:60rem;
  }
}

๊ทธ๋ฆฌ๊ณ  /src/pages/index.tsx์˜ main ํƒœ๊ทธ className์œผ๋กœ styles.pagewrapper๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.(import style์€ ๋‹น์—ฐํžˆ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค)

/src/pages/posts/[category]/styles.module.css์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ™์€ ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

.pagewrapper{
  margin:0 auto;
  width:100%;
  min-height:100vh;
}

@media (min-width: 768px) {
  .pagewrapper{
    max-width:60rem;
  }
}

/src/pages/[category]/index.tsx์˜ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์˜ main ํƒœ๊ทธ์—๋„ ํ•ด๋‹น ๋ž˜ํผ๋ฅผ ์ถ”๊ฐ€.

function PostListPage({
  category, postList,
}: InferGetStaticPropsType<typeof getStaticProps>) {
  return (
    // ํŽ˜์ด์ง€ ๋ž˜ํผ ์ถ”๊ฐ€
    <main className={styles.pagewrapper}>
      <h1>{category}</h1>
      <ul>
        {postList.map((post: PostMetaData) => 
          <li key={post.url}>
            <Card {...post} />
          </li>
        )}
      </ul>
    </main>
  );
}

๊ทธ๋ฆฌ๊ณ  ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค๋„ /src/pages/posts/[category]/styles.module.css์— ์ถ”๊ฐ€์ ์œผ๋กœ ์ •์˜

.pagewrapper{
  margin:0 auto;
  width:100%;
  min-height:100vh;
}

.articlewrapper{
  margin:0 auto;
  width:100%;
  min-height:100vh;
}

@media (min-width: 768px) {
  .pagewrapper{
    max-width:60rem;
  }

  .articlewrapper{
    max-width:50rem;
  }
}

๊ทธ๋ฆฌ๊ณ  /src/pages/posts/[category]/[slug].tsx์˜ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์˜ main ํƒœ๊ทธ์—๋„ ํ•ด๋‹น ๋ž˜ํผ๋ฅผ ์ถ”๊ฐ€.

function PostPage({
  post
}: InferGetStaticPropsType<typeof getStaticProps>) {

  return (
    // ์—ฌ๊ธฐ์— ์ถ”๊ฐ€
    <main className={styles.articlewrapper}>
      <article>
        <h1>{post.title}</h1>
        <time>{post.date}</time>
        <ul>
          {post.tags.map((tag: string)=><li key={tag}>{tag}</li>)}
        </ul>
        {'code' in post.body?
          <MDXComponent code={post.body.code}/>:
          <div dangerouslySetInnerHTML={{ __html: post.body.html }} />
        }
      </article>
    </main>
  );
}

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ ํ›„ ์—ฌ๋Ÿฌ ๊ธฐ์—…์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋“ค์˜ ํŽ˜์ด์ง€ ์ปจํ…Œ์ด๋„ˆ ๋„ˆ๋น„๋ฅผ ์กฐ์‚ฌํ•˜์˜€๋‹ค. ๋Œ€๋ถ€๋ถ„์ด ๋‚ด๊ฐ€ ์“ด ๊ฒƒ๊ณผ ๊ฐ™์ด max-width๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

ํ† ์Šค๋Š” 980px(๋‹จ width 92%์ธ ๋‚ด๋ถ€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์–ด์„œ ์‹ค์ œ ์ฝ˜ํ…์ธ  ๋„ˆ๋น„๋Š” ๋” ์ž‘์•˜๋‹ค), ๋ฐฐ๋ฏผ์€ 900px, ๊ตฌ๊ธ€ 978px, ํ† ์ŠคํŠธUI 1060px, ๋ผ์ธ 790px๋“ฑ ๋Œ€์ถฉ ๋‚˜์™€ ๋น„์Šทํ•œ ์ˆ˜์ค€์ด์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์„ค์ •ํ•œ 60rem(960px)๊ฐ€ ์ •๋‹ต์€ ์•„๋‹์ง€์–ธ์ • ๊ทธ๋ ‡๊ฒŒ๊นŒ์ง€ ํ‹€๋ ค๋จน์€ ์ˆ˜์น˜๋Š” ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ด์ œ ํŽ˜์ด์ง€์˜ ๋ช‡๋ช‡ ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜์ •ํ•ด ๋ณด์ž. ๋ฉ”์ธ ํŽ˜์ด์ง€์™€ ๊ธ€ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋“ฑ..

์ฐธ๊ณ ๋กœ, ์œ„์—์„œ ๊ฐ„๊ฐ„์ด ์‚ฌ์šฉํ•œ min-height:100vh๋“ฑ์˜ ์†์„ฑ์€ ์˜ˆ์ „์—๋Š” wrapper div๋ฅผ ๋„ฃ์–ด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„ฃ์–ด ์ฃผ๋˜ ์†์„ฑ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ IE์—์„œ๋Š” ๋ช‡๋ช‡ ํƒœ๊ทธ์— ๋Œ€ํ•ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” CSS๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋˜ ๊ด€ํ–‰์ด๋ฉฐ ์ง€๊ธˆ ์‹œ์ ์— ๊ผญ ๋”ฐ๋ฅผ ํ•„์š”๋Š” ์—†๋‹ค.

4. ๋ฉ”์ธ ํŽ˜์ด์ง€ ๊ฐ„๋žต ๋ ˆ์ด์•„์›ƒ

ํ˜„์žฌ ๋ฉ”์ธ ํŽ˜์ด์ง€๋Š” ์˜๋ฏธ์ ์œผ๋กœ 4๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ—ค๋”, ๋‚ด ์†Œ๊ฐœ, ๊ธ€ ๋ชฉ๋ก, ํ‘ธํ„ฐ๊ฐ€ ๊ทธ 4๊ฐœ์˜ ์˜์—ญ์ด๋‹ค.

whole-page-map

์—ฌ๊ธฐ์„œ ํ—ค๋”์™€ ํ‘ธํ„ฐ๋Š” ์ง€๊ธˆ ๋‹น์žฅ ๋ ˆ์ด์•„์›ƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ ๋‚ด ์†Œ๊ฐœ์™€ ๊ธ€ ๋ชฉ๋ก์— ๋Œ€ํ•ด์„œ๋งŒ ์ƒ๊ฐํ•ด ๋ณด์ž.

4.1. ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋‚ด ์†Œ๊ฐœ ์˜์—ญ

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

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ์ƒ๊ฐํ•ด ๋ณด์•˜๋‹ค.

intro-section-layout

์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ? ๋จผ์ € ์ด๋ฆ„, ์†Œ๊ฐœ๊ธ€, ๋งํฌ๋“ค์˜ ๋ฐฐ์—ด์€ ์–ด์ฐจํ”ผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด์•„์›ƒ์ด ์„ž์ด์ง€ ์•Š๋„๋ก ์ด ๋ถ€๋ถ„์„ div๋กœ ํ•œ๋ฒˆ ๋ฌถ์–ด์ฃผ์ž. ๊ทธ๋ฆฌ๊ณ  CSS ๋ชจ๋“ˆ ํŒŒ์ผ์„ src/components/profile์— ๋งŒ๋“ค์–ด ์ฃผ์ž. styles.module.css์ •๋„์˜ ์ด๋ฆ„์ด๋ฉด ๋˜๊ฒ ๋‹ค.

์ด๋ฏธ์ง€๋Š” ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ ํด ๋•Œ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋ฐ”์ผ๊ณผ ๋ฐ์Šคํฌํƒ‘์„ ๊ฐ€๋ฅด๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” 768px๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ณด๋‹ค ํฌ๋ฉด ๋ณด์—ฌ์ฃผ๋„๋ก ํ•œ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜จ ํ›„ ์„ธ๋กœ๋กœ ๋ฐฐ์—ด๋œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์ด ์™€์•ผ ํ•˜๋ฏ€๋กœ ๋‚ด ์†Œ๊ฐœ ๋ฐ•์Šค์˜ display๋ฅผ flex๋กœ ์„ค์ •ํ•˜๊ณ  ๊ฐ€๋กœ๋กœ ๋ฐฐ์—ด๋˜๋„๋ก ํ•œ๋‹ค. ์ด ์„ค์ •์€ ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ 768px๋ณด๋‹ค ํด ๋•Œ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งํฌ๋“ค์€ ๊ฐ€๋กœ๋กœ ๋ฐฐ์—ด๋˜์—ˆ์œผ๋ฉด ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งํฌ๋“ค์„ ๊ฐ์‹ธ๋Š” ul ์ปดํฌ๋„ŒํŠธ์— ์ ์šฉํ•ด ์ค„ flex๋„ ์„ค์ •ํ•ด ์ฃผ์ž. ์—ฌ๊ธฐ์—” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งํฌ์—๋Š” bullet point๊ฐ€ ํ•„์š”์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ์—†์• ์ฃผ๊ณ  ๋งํฌ ๊ฐ„์˜ ์–ด๋Š ์ •๋„์˜ ๊ฐ„๊ฒฉ์„ ์ค€๋‹ค.

์ด๋ฅผ CSS ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// src/components/profile/profile.module.css
.profile__image{
  display:none;
}

.profile__linklist{
  display:flex;
  flex-direction:row;
  list-style:none;
  padding-left:0;
  gap:0 15px;
}

@media (min-width:768px){
  .profile__image{
    display:block;
  }

  .profile{
    display:flex;
    flex-direction:row;
  }
}

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœํ•„ ์ปดํฌ๋„ŒํŠธ์—์„  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ค€๋‹ค.

// src/components/profile/index.tsx
import styles from './profile.module.css';

function Profile() {
  return (
    <article className={styles.profile}>
      <Image className={styles.profile__image} src={blogConfig.picture} alt={`${blogConfig.name}์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„`} width={80} height={80} />
      <div>
        <h2>{blogConfig.name}</h2>
        <p>{blogConfig.description}</p>
        <ul className={styles.profile__linklist}>
          <li>
            <Link href={blogConfig.social.github} target='_blank'>
            Github
            </Link>
          </li>
          <li>
            <Link href={blogConfig.social.BOJ} target='_blank'>
            BOJ
            </Link>
          </li>
        </ul>
      </div>
    </article>
  );
}

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

4.2. ๋ฉ”์ธ ํŽ˜์ด์ง€ ๊ธ€ ๋ชฉ๋ก ์˜์—ญ

๋ฉ”์ธ ํŽ˜์ด์ง€์ƒ์˜ ๊ธ€ ๋ชฉ๋ก์˜ ๋ฐฐ์น˜์— ๋Œ€ํ•ด ์ƒ๊ฐ๋‚˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ชจ๋ฐ”์ผ์—์„œ ํ…์ŠคํŠธ๊ฐ€ ๋‹ต๋‹ตํ•˜๊ฒŒ ๋ณด์ด์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. PC ํ™˜๊ฒฝ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€.
  2. ์ฒ˜์Œ ํŽ˜์ด์ง€๊ฐ€ ๋–ด์„ ๋•Œ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ธ€์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

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

article-list

์ด๋ฒˆ์—๋„ src/components/category/styles.module.css ์ƒ์„ฑ. ๊ทธ๋ƒฅ ํ™”๋ฉด์ด ์ผ์ • ๋„ˆ๋น„ ์ด์ƒ์ด ๋˜๋ฉด ๊ฐ€๋กœ๋กœ ๋ฐฐ์—ด๋˜๋„๋ก ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ ์™ธ์—” bullet point๋ฅผ ์—†์• ์ฃผ๊ณ  ๊ฐ€๋กœ ๋ฐฐ์—ด์‹œ ๊ฐ„๊ฒฉ์„ ์ฃผ๋Š” ์ •๋„๋งŒ ํ•ด์ฃผ์ž.

.category__cardlist{
  list-style:none;
}

@media (min-width:768px){
  .category__cardlist{
    display: flex;
    flex-direction:row;
    gap:20px;
  }
}

๊ทธ๋ฆฌ๊ณ  src/components/category/index.tsx์˜ ulํƒœ๊ทธ์— styles.category__cardlist๋ฅผ ์ ์šฉํ•ด ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด ๋ฐฐ์น˜๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ฐ”๋€๋‹ค. ์•„์ง๋„ ์—„์ฒญ๋‚˜๊ฒŒ ๋ชป์ƒ๊ฒผ์ง€๋งŒ ์•„๊นŒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์•„ ๋ณด์ด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

temp-layout

์ฐธ๊ณ 

https://brunch.co.kr/@sarayun/22

https://merrily-code.tistory.com/154

https://socialtriggers.com/perfect-content-width/

Profile picture

๊น€์„ฑํ˜„(Kim Sung Hyun)

์„œ๊ฐ•๋Œ€ํ•™๊ต์—์„œ ๊ธฐ๊ณ„๊ณตํ•™๊ณผ ์ปดํ“จํ„ฐ๊ณตํ•™์„ ๋ณต์ˆ˜์ „๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ”ํžˆ `๋งˆ๋…€`๋ผ๋Š” ๋‹‰๋„ค์ž„์„ ์”๋‹ˆ๋‹ค. ์–ด๋–ค ๋Œ€๋‹จํ•œ ๋œป์„ ํ’ˆ๊ณ  ์‚ฌ๋Š” ์‚ฌ๋žŒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ์ € ๋ฉ‹์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋‚ด๋Š” ๋น›์„ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋‹ˆ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๊ณ , ์•ž์œผ๋กœ๋„ ๊ทธ๋ ‡๊ฒŒ ์‚ด ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ์ด๊ณณ์— ์ฐพ์•„์˜ค์‹  ๋‹น์‹ ๊ณผ๋„ ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ์–ด ์˜๊ด‘์ž…๋‹ˆ๋‹ค.