ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CSS] Grid vs Flexbox: ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์–ด๋–ค ๊ฑธ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?
    Coding 2025. 3. 4. 21:02
    ๋ฐ˜์‘ํ˜•

     

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


    ๊ธฐ๋ณธ๊ฐœ๋…

    Grid

    Flex

    CSS Grid๋Š” 2์ฐจ์›(ํ–‰๊ณผ ์—ด) ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
    ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ•˜๋ฉฐ, ์ž์‹ ์š”์†Œ๋“ค์„ ๊ฒฉ์ž(grid) ๊ตฌ์กฐ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Flexbox๋Š” 1์ฐจ์›(๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ) ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
    ์š”์†Œ๋ฅผ ํ–‰(Row) ๋˜๋Š” ์—ด(Column) ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์ •๋ ฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํ–‰(Row)๊ณผ ์—ด(Column) ๋ชจ๋‘๋ฅผ ์กฐ์ • ๊ฐ€๋Šฅ
    • ์ •๋ ฌ๊ณผ ๋ฐฐ์น˜๊ฐ€ ์ง๊ด€์ 
    • ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์— ์œ ๋ฆฌ
    • ํ•œ ๋ฐฉํ–ฅ(๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ) ์ •๋ ฌ์ด ์‰ฌ์›€
    • ์œ ์—ฐํ•œ ํฌ๊ธฐ ์กฐ์ •์ด ๊ฐ€๋Šฅ
    • ์š”์†Œ ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ฐ•๋ ฅ

    ์–ธ์ œ CSS Grid๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

    2์ฐจ์› ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ๋•Œ

    • ์˜ˆ: ์นด๋“œ ๋ ˆ์ด์•„์›ƒ, ๋Œ€์‹œ๋ณด๋“œ, ๊ฐค๋Ÿฌ๋ฆฌ, ์ „์ฒด ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ

    ํ–‰๊ณผ ์—ด์„ ๋™์‹œ์— ์กฐ์ •ํ•ด์•ผ ํ•  ๋•Œ

    • ์˜ˆ: ์ •ํ•ด์ง„ ํ‹€ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒฝ์šฐ

    ๋น„์œจ์„ ๋งž์ถ”๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

    • ์˜ˆ: grid-template-columns: 1fr 2fr 1fr;์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์œ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ๋•Œ

    ๐Ÿ‘‰ ์ถ”์ฒœ ์‚ฌ์šฉ ์˜ˆ์ œ: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์กฐ์ •๋˜๋Š” ๋ฐ˜์‘ํ˜• ๊ฐค๋Ÿฌ๋ฆฌ

    .gallery {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
      gap: 10px;
    }

     

    ์–ธ์ œ Flexbox๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

    1์ฐจ์› ์ •๋ ฌ(๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ)๋งŒ ํ•„์š”ํ•  ๋•Œ

    • ์˜ˆ: ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”, ๋ฒ„ํŠผ ๊ทธ๋ฃน, ์นด๋“œ ๋ฆฌ์ŠคํŠธ

    ์š”์†Œ ๊ฐ„์˜ ์ •๋ ฌ์„ ์œ ์—ฐํ•˜๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•  ๋•Œ

    • ์˜ˆ: justify-content: space-between;์„ ์‚ฌ์šฉํ•ด ์š”์†Œ ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์ž๋™ ์กฐ์ •

    ๋ ˆ์ด์•„์›ƒ์ด ๋™์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ ๋•Œ

    • ์˜ˆ: ํŠน์ • ์•„์ดํ…œ์ด ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ์ค„์–ด๋“œ๋Š” ๊ฒฝ์šฐ

    ๐Ÿ‘‰ ์ถ”์ฒœ ์‚ฌ์šฉ ์˜ˆ์ œ: ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” (๋‚ด๋น„๊ฒŒ์ด์…˜ ์•„์ดํ…œ์ด ์ž๋™์œผ๋กœ ์–‘์ชฝ ๋์œผ๋กœ ์ •๋ ฌ)

    .nav {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 10px;
    }

    ๊ฒฐ๋ก : ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ?

    โœ” ์›น์‚ฌ์ดํŠธ์˜ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ๋•Œ? → CSS Grid
    โœ” ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”, ๋ฒ„ํŠผ ๊ทธ๋ฃน์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ๋ฐฐ์น˜๋ฅผ ํ•  ๋•Œ? → Flexbox
    โœ” ๋ณต์žกํ•œ ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•  ๋•Œ? → CSS Grid
    โœ” ์š”์†Œ ๊ฐ„ ๊ฐ„๊ฒฉ๊ณผ ์ •๋ ฌ์„ ๋‹ค๋ฃฐ ๋•Œ? → Flexbox

     

    ๐ŸŒŸ ์‹ค๋ฌด์—์„œ๋Š” CSS Grid์™€ Flexbox๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค!
    ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์ฒด ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์€ Grid๋กœ ๋งŒ๋“ค๊ณ , ๋‚ด๋ถ€์˜ ์ž‘์€ ์š”์†Œ ์ •๋ ฌ์€ Flexbox๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹์œผ๋กœ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐ŸŽฏ ํ•ต์‹ฌ ์š”์•ฝ

    • Grid๋Š” **2์ฐจ์› ๋ ˆ์ด์•„์›ƒ(ํ–‰+์—ด)**์— ์ ํ•ฉ
    • Flexbox๋Š” **1์ฐจ์› ์ •๋ ฌ(๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ)**์— ์ ํ•ฉ
    • ๋‘˜ ๋‹ค ์ ์ ˆํžˆ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ!
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

JJung-e Tistory.