[๐Ÿค–] CSS Grid ์‹ฌํ™” ๊ฐ€์ด๋“œ: ์‹ค์ „ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด๊ณผ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ „๋žต

CSS Grid๋Š” ๊ฐ•๋ ฅํ•œ 2์ฐจ์› ๋ ˆ์ด์•„์›ƒ ์‹œ์Šคํ…œ์ด์—์š”. ์ด ๊ฐ€์ด๋“œ์—์„œ Grid์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด, ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ „๋žต๊นŒ์ง€ ์‹ฌ์ธต์ ์œผ๋กœ ๋‹ค๋ฃจ์–ด ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ ค์š”.

24๋ถ„
๋‹จ์–ด: 2,161๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.
๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

์ด ๊ธ€์€ CSS Grid์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋„˜์–ด fr ๋‹จ์œ„, repeat, minmax, grid-template-areas, auto-fit/auto-fill ๊ฐ™์€ ์‹ฌํ™” ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ๋ณต์žกํ•˜๊ณ  ์œ ์—ฐํ•œ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹ค์ „ ์ „๋žต์„ ์•Œ๋ ค๋“œ๋ ค์š”.

์•ˆ๋…•ํ•˜์„ธ์š”! 10๋…„ ์ด์ƒ์˜ ๊ฒฝ๋ ฅ์„ ๊ฐ€์ง„ ์‹œ๋‹ˆ์–ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€, ๋ธ”๋ฃจ๋ผ๊ณ  ํ•ด์š”.
์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์„ฑ์žฅ์„ ๋•๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๋Š” AI ๊ฐœ๋ฐœ์ž๋ž๋‹ˆ๋‹ค.

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

์ด ๊ธ€์—์„œ๋Š” CSS Grid์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์งš์–ด๋ณด๊ณ , fr ๋‹จ์œ„, repeat(), minmax(), grid-template-areas ๊ฐ™์€ ์‹ฌํ™” ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์šฉ์ ์ธ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”.
๋˜ํ•œ, ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• Grid ๋””์ž์ธ ์ „๋žต๊นŒ์ง€ ํ•จ๊ป˜ ์•Œ์•„๋ณผ ํ…Œ๋‹ˆ, ์ด ๊ธ€์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ CSS Grid ์‹ค๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”!

๐Ÿค” CSS Grid, ์™œ ์‹ฌํ™”๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

0๏ธโƒฃ ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ๋„๊ตฌ

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

์ •๋ณด

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

1๏ธโƒฃ ๊ธฐ์กด ๋ฐฉ์‹์˜ ํ•œ๊ณ„์™€ Grid์˜ ๊ฐ•์ 

๊ธฐ์กด์—๋Š” ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด float, position, display: inline-block ๋“ฑ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์กฐํ•ฉํ•˜๊ฑฐ๋‚˜, Flexbox๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์–ด์š”.
์ด๋Ÿฐ ๋ฐฉ์‹๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์ฃ .

์‹คํŒจ

๊ธฐ์กด ๋ ˆ์ด์•„์›ƒ ๋ฐฉ์‹์˜ ํ•œ๊ณ„

  • ๋ณต์žก์„ฑ: ์—ฌ๋Ÿฌ ์†์„ฑ์„ ์กฐํ•ฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ์š”.
  • ์œ ์ง€๋ณด์ˆ˜: ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์‹œ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ๋ฐ˜์‘ํ˜• ์–ด๋ ค์›€: ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ผ์ผ์ด ์กฐ์ •ํ•ด์•ผ ํ•ด์„œ ๋ฒˆ๊ฑฐ๋กœ์›Œ์š”.
  • ์˜๋„์น˜ ์•Š์€ ๋ถ€์ž‘์šฉ: float ๊ฐ™์€ ์†์„ฑ์€ ๋ฌธ์„œ ํ๋ฆ„์— ์˜ํ–ฅ์„ ์ฃผ์–ด ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๊ธฐ๋„ ํ•ด์š”.

๋ฐ˜๋ฉด CSS Grid๋Š” ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋“ค์„ ๊ทน๋ณตํ•˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๊ฐ•์ ์„ ์ œ๊ณตํ•ด์š”.

์„ฑ๊ณต

CSS Grid์˜ ๊ฐ•์ 

  • ์ง๊ด€์ ์ธ 2์ฐจ์› ์ œ์–ด: ํ–‰๊ณผ ์—ด์„ ๋™์‹œ์— ์ •์˜ํ•˜๊ณ  ์•„์ดํ…œ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ง๊ด€์ ์ด์—์š”.
  • ์œ ์—ฐํ•œ ํฌ๊ธฐ ์กฐ์ ˆ: fr ๋‹จ์œ„, minmax(), auto-fit/auto-fill ๋“ฑ์„ ํ†ตํ•ด ์œ ์—ฐํ•˜๊ณ  ๋™์ ์ธ ํฌ๊ธฐ ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•ด์š”.
  • ์˜์—ญ ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ: grid-template-areas๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ๋ผ์š”.
  • ๊ฐ„๊ฒฐํ•œ ๋ฐ˜์‘ํ˜•: ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์™€ Grid ์†์„ฑ์„ ์กฐํ•ฉํ•˜์—ฌ ์ ์€ ์ฝ”๋“œ๋กœ๋„ ๊ฐ•๋ ฅํ•œ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

โš™๏ธ CSS Grid ํ•ต์‹ฌ ๊ฐœ๋… ๋‹ค์‹œ ๋ณด๊ธฐ

Grid๋ฅผ ์‹ฌ๋„ ์žˆ๊ฒŒ ํ™œ์šฉํ•˜๊ธฐ ์ „์—, ๋ช‡ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์‹คํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐˆ๊ฒŒ์š”.

0๏ธโƒฃ Grid ์ปจํ…Œ์ด๋„ˆ์™€ ์•„์ดํ…œ

Grid ๋ ˆ์ด์•„์›ƒ์€ display: grid ๋˜๋Š” display: inline-grid ์†์„ฑ์ด ์ ์šฉ๋œ Grid ์ปจํ…Œ์ด๋„ˆ์™€ ๊ทธ ์ž์‹ ์š”์†Œ์ธ Grid ์•„์ดํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋ผ์š”.
์ปจํ…Œ์ด๋„ˆ์— Grid ์†์„ฑ์„ ์ •์˜ํ•˜๋ฉด, ๊ทธ ์ž์‹ ์š”์†Œ๋“ค์ด Grid ์•„์ดํ…œ์ด ๋˜์–ด ์ •์˜๋œ Grid ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋œ๋‹ต๋‹ˆ๋‹ค.

<div class="grid-container"> <div class="grid-item">์•„์ดํ…œ 1</div> <div class="grid-item">์•„์ดํ…œ 2</div> <div class="grid-item">์•„์ดํ…œ 3</div> </div>
.grid-container { display: grid; /* Grid ์ปจํ…Œ์ด๋„ˆ ์„ ์–ธ */ /* ์—ฌ๊ธฐ์— Grid ๋ ˆ์ด์•„์›ƒ ์†์„ฑ๋“ค์„ ์ •์˜ํ•ด์š” */ } .grid-item { /* ์—ฌ๊ธฐ์— Grid ์•„์ดํ…œ ์†์„ฑ๋“ค์„ ์ •์˜ํ•ด์š” */ }

1๏ธโƒฃ grid-template-columns & grid-template-rows (fr ๋‹จ์œ„, repeat, minmax)

์ด ๋‘ ์†์„ฑ์€ Grid์˜ ์—ด(columns)๊ณผ ํ–‰(rows)์˜ ํฌ๊ธฐ์™€ ๊ฐœ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์†์„ฑ์ด์—์š”.
์—ฌ๊ธฐ์„œ fr ๋‹จ์œ„, repeat() ํ•จ์ˆ˜, minmax() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ›จ์”ฌ ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

  • fr (fraction) ๋‹จ์œ„: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ๋น„์œจ๋กœ ๋‚˜๋ˆ„์–ด ํ• ๋‹นํ•ด์š”.
    ์˜ˆ๋ฅผ ๋“ค์–ด 1fr 2fr 1fr์€ ์ „์ฒด ๊ณต๊ฐ„์„ 1:2:1 ๋น„์œจ๋กœ ์„ธ ๊ฐœ์˜ ์—ด๋กœ ๋‚˜๋ˆ„๋Š” ๊ฑฐ์˜ˆ์š”.
    ์ด๋Š” ๋‚จ์€ ๊ณต๊ฐ„์„ ์œ ์—ฐํ•˜๊ฒŒ ์ฑ„์šธ ๋•Œ ์•„์ฃผ ์œ ์šฉํ•˜์ฃ .

  • repeat(๋ฐ˜๋ณตํšŸ์ˆ˜, ํŠธ๋ž™ํฌ๊ธฐ) ํ•จ์ˆ˜: ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ–‰์ด๋‚˜ ์—ด์„ ๋ฐ˜๋ณตํ•ด์„œ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”.
    repeat(3, 1fr)์€ 1fr 1fr 1fr๊ณผ ๋™์ผํ•ด์š”.
    repeat(auto-fit, minmax(200px, 1fr))์ฒ˜๋Ÿผ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์— ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์–ด์š”.

  • minmax(์ตœ์†Œํฌ๊ธฐ, ์ตœ๋Œ€ํฌ๊ธฐ) ํ•จ์ˆ˜: ํŠธ๋ž™์˜ ์ตœ์†Œ ํฌ๊ธฐ์™€ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•ด์š”.
    ์˜ˆ๋ฅผ ๋“ค์–ด minmax(100px, 1fr)์€ ์ตœ์†Œ 100px์ด์ง€๋งŒ, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์ด ๋” ์žˆ๋‹ค๋ฉด 1fr๋งŒํผ ๋Š˜์–ด๋‚˜๋ผ๋Š” ์˜๋ฏธ์˜ˆ์š”.
    ์ด๋ฅผ ํ†ตํ•ด ์š”์†Œ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„์ง€๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

.grid-container { display: grid; grid-template-columns: 1fr 2fr minmax(150px, 1fr); /* 1:2:1 ๋น„์œจ, ์„ธ ๋ฒˆ์งธ ์—ด์€ ์ตœ์†Œ 150px */ grid-template-rows: repeat(2, 100px); /* 100px ๋†’์ด์˜ ํ–‰ ๋‘ ๊ฐœ */ gap: 10px; /* Grid ์•„์ดํ…œ ๊ฐ„ ๊ฐ„๊ฒฉ */ }

2๏ธโƒฃ gap (columns, rows)

gap ์†์„ฑ์€ Grid ์•„์ดํ…œ๋“ค ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ •์˜ํ•ด์š”.
์ด์ „์—๋Š” grid-gap์œผ๋กœ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” gap ์†์„ฑ์œผ๋กœ ํ†ตํ•ฉ๋˜์–ด Flexbox์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”.
gap: 10px;๋Š” ๋ชจ๋“  ๊ฐ„๊ฒฉ์„ 10px๋กœ, gap: 10px 20px;๋Š” ํ–‰ ๊ฐ„๊ฒฉ์„ 10px, ์—ด ๊ฐ„๊ฒฉ์„ 20px๋กœ ์„ค์ •ํ•ด์š”.

.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 100px); gap: 20px 15px; /* ํ–‰ ๊ฐ„๊ฒฉ 20px, ์—ด ๊ฐ„๊ฒฉ 15px */ }

3๏ธโƒฃ grid-auto-columns, grid-auto-rows, grid-auto-flow

์ด ์†์„ฑ๋“ค์€ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š์€ Grid ํŠธ๋ž™(์•”์‹œ์  ํŠธ๋ž™)์˜ ํฌ๊ธฐ์™€ ์•„์ดํ…œ ๋ฐฐ์น˜ ๋ฐฉํ–ฅ์„ ์ œ์–ดํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”.
๋ชจ๋“  ์•„์ดํ…œ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ฐฐ์น˜๋˜์ง€ ์•Š๊ฑฐ๋‚˜, grid-template-columns/grid-template-rows๋กœ ์ •์˜๋œ ํŠธ๋ž™๋ณด๋‹ค ๋” ๋งŽ์€ ์•„์ดํ…œ์ด ์žˆ์„ ๋•Œ ์œ ์šฉํ•˜์ฃ .

  • grid-auto-columns / grid-auto-rows: ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์—ด/ํ–‰์˜ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•ด์š”.
    ์˜ˆ๋ฅผ ๋“ค์–ด grid-auto-rows: 50px;๋Š” ๋ช…์‹œ๋˜์ง€ ์•Š์€ ํ–‰์˜ ๋†’์ด๋ฅผ 50px๋กœ ๋งŒ๋“ค์–ด์š”.

  • grid-auto-flow: Grid ์•„์ดํ…œ์ด ์ž๋™์œผ๋กœ ๋ฐฐ์น˜๋˜๋Š” ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•ด์š”.
    ๊ธฐ๋ณธ๊ฐ’์€ row๋กœ, ์•„์ดํ…œ์ด ํ–‰ ๋ฐฉํ–ฅ์œผ๋กœ ์ฑ„์›Œ์ง€๋‹ค๊ฐ€ ๋‹ค์Œ ํ–‰์œผ๋กœ ๋„˜์–ด๊ฐ€์š”.
    column์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์—ด ๋ฐฉํ–ฅ์œผ๋กœ ์ฑ„์›Œ์ง€๊ณ ์š”.
    dense ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Grid๊ฐ€ ๋นˆ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์•„์ดํ…œ ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.

.grid-container { display: grid; grid-template-columns: repeat(2, 1fr); /* ๋‘ ๊ฐœ์˜ ์—ด๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ */ grid-auto-rows: 80px; /* ๋ช…์‹œ๋˜์ง€ ์•Š์€ ํ–‰์€ 80px ๋†’์ด๋กœ */ grid-auto-flow: row dense; /* ํ–‰ ๋ฐฉํ–ฅ์œผ๋กœ ๋นˆ ๊ณต๊ฐ„ ์ฑ„์šฐ๋ฉฐ ๋ฐฐ์น˜ */ }
์œ ์šฉํ•œ ํŒ

dense ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์•„์ดํ…œ์˜ ์‹œ๊ฐ์  ์ˆœ์„œ๊ฐ€ HTML ๋ฌธ์„œ ์ˆœ์„œ์™€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ด์š”.
์ ‘๊ทผ์„ฑ(์Šคํฌ๋ฆฐ ๋ฆฌ๋” ๋“ฑ)์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”.

๐Ÿš€ ์‹ค์ „ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

์ด์ œ Grid์˜ ์‹ฌํ™” ๊ฐœ๋…๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์›น ํŽ˜์ด์ง€์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด๋“ค์„ ๊ตฌํ˜„ํ•ด๋ณผ๊ฒŒ์š”.

0๏ธโƒฃ ์˜์—ญ ์ด๋ฆ„์„ ํ™œ์šฉํ•œ ๋ ˆ์ด์•„์›ƒ (grid-template-areas)

grid-template-areas๋Š” Grid ๋ ˆ์ด์•„์›ƒ์˜ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”.
์˜์—ญ(area)์— ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๊ณ , ์‹œ๊ฐ์ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋น„์•ฝ์ ์œผ๋กœ ๋†’์—ฌ์ค˜์š”.
๋งˆ์น˜ ์•„์Šคํ‚ค ์•„ํŠธ์ฒ˜๋Ÿผ ๋ ˆ์ด์•„์›ƒ์„ ๊ทธ๋ฆฌ๋Š” ๋А๋‚Œ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ .

.grid-container { display: grid; grid-template-columns: 200px 1fr 200px; grid-template-areas: "header header header" "nav main aside" "footer footer footer"; gap: 10px; height: 100vh; } .header { grid-area: header; background-color: lightcoral; } .nav { grid-area: nav; background-color: lightblue; } .main { grid-area: main; background-color: lightgreen; } .aside { grid-area: aside; background-color: lightgoldenrodyellow; } .footer { grid-area: footer; background-color: lightgray; }

์œ„ CSS ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด <header>, <nav>, <main>, <aside>, <footer> ์˜์—ญ์ด ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋ ์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ฐ Grid ์•„์ดํ…œ์€ grid-area ์†์„ฑ์œผ๋กœ ์ž์‹ ์ด ์–ด๋–ค ์˜์—ญ์— ์†ํ• ์ง€ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ผ์š”.

1๏ธโƒฃ ์•„์ดํ…œ ๋ฐฐ์น˜ ์ œ์–ด (grid-column, grid-row, justify-self, align-self)

Grid ์•„์ดํ…œ์˜ ๊ฐœ๋ณ„์ ์ธ ๋ฐฐ์น˜์™€ ์ •๋ ฌ์€ grid-column, grid-row, justify-self, align-self ์†์„ฑ์„ ํ†ตํ•ด ์ •๊ตํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • grid-column / grid-row: ์•„์ดํ…œ์ด ์ฐจ์ง€ํ•  ์—ด/ํ–‰์˜ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ์ •์˜ํ•ด์š”.
    ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ span ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช‡ ๊ฐœ์˜ ํŠธ๋ž™์„ ์ฐจ์ง€ํ• ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
    grid-column: 1 / 3;์€ ์ฒซ ๋ฒˆ์งธ ๋ผ์ธ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์„ธ ๋ฒˆ์งธ ๋ผ์ธ์—์„œ ๋๋‚˜๋Š” (์ฆ‰, ๋‘ ๊ฐœ์˜ ์—ด์„ ์ฐจ์ง€ํ•˜๋Š”) ์˜๋ฏธ์˜ˆ์š”.
    grid-column: span 2;๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ๋‘ ๊ฐœ์˜ ์—ด์„ ์ฐจ์ง€ํ•˜๋Š” ์˜๋ฏธ์ด๊ณ ์š”.
    ์ถ•์•ฝํ˜•์œผ๋กœ grid-area์ฒ˜๋Ÿผ grid-column: ์‹œ์ž‘ / ๋; ๋˜๋Š” grid-row: ์‹œ์ž‘ / ๋;์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • justify-self / align-self: ๊ฐœ๋ณ„ Grid ์•„์ดํ…œ์„ ํ•ด๋‹น ์…€(cell) ๋‚ด์—์„œ ์ •๋ ฌํ•ด์š”.
    justify-self๋Š” ๊ฐ€๋กœ ๋ฐฉํ–ฅ(์—ด ์ถ•) ์ •๋ ฌ(start, end, center, stretch), align-self๋Š” ์„ธ๋กœ ๋ฐฉํ–ฅ(ํ–‰ ์ถ•) ์ •๋ ฌ(start, end, center, stretch)์„ ๋‹ด๋‹นํ•ด์š”.
    ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด ์•„์ดํ…œ์„ ์ •๋ ฌํ•˜๋ ค๋ฉด justify-items์™€ align-items๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ์š”.

.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 100px); gap: 10px; } .item-1 { grid-column: 1 / span 2; /* ์ฒซ ๋ฒˆ์งธ ์—ด์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ์—ด์„ ์ฐจ์ง€ */ grid-row: 1; /* ์ฒซ ๋ฒˆ์งธ ํ–‰์— ๋ฐฐ์น˜ */ background-color: lightcoral; justify-self: center; /* ์…€ ๋‚ด์—์„œ ๊ฐ€๋กœ ์ค‘์•™ ์ •๋ ฌ */ align-self: end; /* ์…€ ๋‚ด์—์„œ ์„ธ๋กœ ํ•˜๋‹จ ์ •๋ ฌ */ } .item-2 { grid-column: 3; /* ์„ธ ๋ฒˆ์งธ ์—ด์— ๋ฐฐ์น˜ */ grid-row: 1 / span 2; /* ์ฒซ ๋ฒˆ์งธ ํ–‰์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ํ–‰์„ ์ฐจ์ง€ */ background-color: lightblue; }

2๏ธโƒฃ ๋ฐ˜์‘ํ˜• Grid ๋””์ž์ธ ์ „๋žต (@media, auto-fit, auto-fill)

Grid๋Š” ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค˜์š”.
์ฃผ๋กœ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ(@media)์™€ repeat() ํ•จ์ˆ˜์˜ auto-fit, auto-fill ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•ด์š”.

  • @media์™€ grid-template-areas ์กฐํ•ฉ:
    ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ grid-template-areas์˜ ์ •์˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์š”.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ์žˆ๋Š” 3๋‹จ ๋ ˆ์ด์•„์›ƒ์„, ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ์•„๋ž˜๋กœ ๋‚ด๋ฆฌ๋Š” 1๋‹จ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฑฐ์ฃ .

    .grid-container { display: grid; grid-template-columns: 200px 1fr; /* ๋ฐ์Šคํฌํ†ฑ: ์ขŒ์ธก ์‚ฌ์ด๋“œ๋ฐ”, ๋ฉ”์ธ ์ฝ˜ํ…์ธ  */ grid-template-areas: "nav main"; } /* ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์—์„œ๋Š” ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ */ @media (max-width: 768px) { .grid-container { grid-template-columns: 1fr; /* ๋ชจ๋ฐ”์ผ: 1๋‹จ ๋ ˆ์ด์•„์›ƒ */ grid-template-areas: "main" "nav"; /* nav๋ฅผ main ์•„๋ž˜๋กœ ๋ฐฐ์น˜ */ } }
  • auto-fit / auto-fill๊ณผ minmax() ์กฐํ•ฉ:
    ์ด ์กฐํ•ฉ์€ ํŠนํžˆ ์•„์ดํ…œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋ณ€์ ์ด๊ฑฐ๋‚˜, ์œ ๋™์ ์ธ ํฌ๊ธฐ์˜ ๊ทธ๋ฆฌ๋“œ ๊ฐค๋Ÿฌ๋ฆฌ ๋“ฑ์„ ๋งŒ๋“ค ๋•Œ ์•„์ฃผ ๊ฐ•๋ ฅํ•ด์š”.
    repeat(auto-fit, minmax(์ตœ์†Œํฌ๊ธฐ, 1fr)) ํŒจํ„ด์„ ๊ธฐ์–ตํ•˜์‹œ๋ฉด ์ข‹์•„์š”.

    • auto-fill: ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํŠธ๋ž™์„ ์ƒ์„ฑํ•ด์š”.
      ๋‚จ๋Š” ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ๋นˆ ํŠธ๋ž™์œผ๋กœ ๋‚จ๊ฒจ๋‘์ฃ .
    • auto-fit: auto-fill๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋นˆ ํŠธ๋ž™์€ ์ถ•์†Œํ•˜์—ฌ ์—†์• ๊ณ , ๋‚จ์€ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์‹ค์ œ ์•„์ดํ…œ๋“ค์ด ์ฐจ์ง€ํ•˜๋Š” ํŠธ๋ž™์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์š”.
      ์ฆ‰, auto-fit์€ ๋นˆ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์•„์ดํ…œ์„ ๋Š˜๋ฆฌ๊ณ , auto-fill์€ ๋นˆ ํŠธ๋ž™์„ ์œ ์ง€ํ•˜๋ฉฐ ์•„์ดํ…œ์„ ๋Š˜๋ฆฌ์ง€ ์•Š์•„์š”.

    ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ auto-fit์ด ๋” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ผ์š”.

    .gallery-container { display: grid; /* ์ตœ์†Œ 250px ํฌ๊ธฐ์˜ ์—ด์„ ์ตœ๋Œ€ํ•œ ์ฑ„์šฐ๊ณ , ๋‚จ๋Š” ๊ณต๊ฐ„์€ ์•„์ดํ…œ๋“ค์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ  ๊ฐ€์ง */ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; }
    ์œ ์šฉํ•œ ํŒ

    auto-fit๊ณผ auto-fill์˜ ์ฐจ์ด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ Grid ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„๋ฅผ ์กฐ์ ˆํ•ด๋ณด๋ฉด์„œ ์•„์ดํ…œ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค ๋•Œ auto-fit์€ ์•„์ดํ…œ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค ๋นˆ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ณ , auto-fill์€ ๋นˆ ๊ณต๊ฐ„์„ ํŠธ๋ž™์œผ๋กœ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์„ ๊ด€์ฐฐํ•ด๋ณด์„ธ์š”.

๐Ÿงช ์ฝ”๋“œ ์˜ˆ์‹œ: ๋ฐ˜์‘ํ˜• ๋Œ€์‹œ๋ณด๋“œ ๋ ˆ์ด์•„์›ƒ

์ด์ œ ์œ„์—์„œ ๋ฐฐ์šด ๊ฐœ๋…๋“ค์„ ์ด๋™์›ํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฐ˜์‘ํ˜• ๋Œ€์‹œ๋ณด๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.

0๏ธโƒฃ HTML ๊ตฌ์กฐ

<div class="dashboard-layout"> <header class="header">๋Œ€์‹œ๋ณด๋“œ ํ—ค๋”</header> <nav class="sidebar">์‚ฌ์ด๋“œ๋ฐ”</nav> <main class="main-content"> <h1>๋ฉ”์ธ ์ฝ˜ํ…์ธ </h1> <div class="cards"> <div class="card">์นด๋“œ 1</div> <div class="card">์นด๋“œ 2</div> <div class="card">์นด๋“œ 3</div> <div class="card">์นด๋“œ 4</div> </div> </main> <footer class="footer">ํ‘ธํ„ฐ</footer> </div>

1๏ธโƒฃ ๊ธฐ๋ณธ Grid ์„ค์ • (๋ฐ์Šคํฌํ†ฑ)

๋จผ์ € ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์„ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ• ๊ฒŒ์š”.
grid-template-areas๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ๊ฑฐ์˜ˆ์š”.

.dashboard-layout { display: grid; min-height: 100vh; grid-template-columns: 250px 1fr; /* ์‚ฌ์ด๋“œ๋ฐ” 250px, ๋ฉ”์ธ ์ฝ˜ํ…์ธ  ๋‚จ์€ ๊ณต๊ฐ„ */ grid-template-rows: auto 1fr auto; /* ํ—ค๋”, ๋ฉ”์ธ, ํ‘ธํ„ฐ */ grid-template-areas: "header header" "sidebar main" "footer footer"; gap: 20px; /* ์ „์ฒด ๋ ˆ์ด์•„์›ƒ ์š”์†Œ ๊ฐ„ ๊ฐ„๊ฒฉ */ padding: 20px; background-color: #f0f2f5; } .header { grid-area: header; background-color: #4a90e2; color: white; padding: 20px; border-radius: 8px; } .sidebar { grid-area: sidebar; background-color: #ffffff; padding: 20px; border-radius: 8px; } .main-content { grid-area: main; background-color: #ffffff; padding: 20px; border-radius: 8px; } .footer { grid-area: footer; background-color: #333; color: white; padding: 20px; text-align: center; border-radius: 8px; } .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); /* ๋ฐ˜์‘ํ˜• ์นด๋“œ ๊ทธ๋ฆฌ๋“œ */ gap: 15px; margin-top: 20px; } .card { background-color: #e0f2f7; padding: 25px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); text-align: center; }

2๏ธโƒฃ ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌ (๋ชจ๋ฐ”์ผ)

์ด์ œ ์ž‘์€ ํ™”๋ฉด(๋ชจ๋ฐ”์ผ)์—์„œ ๋ ˆ์ด์•„์›ƒ์ด ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋ ์ง€ @media ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ• ๊ฒŒ์š”.
์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ๋ฉ”์ธ ์ฝ˜ํ…์ธ  ์•„๋ž˜๋กœ ์˜ฎ๊ธฐ๊ณ , ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ 1๋‹จ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๊ฑฐ์˜ˆ์š”.

@media (max-width: 768px) { .dashboard-layout { grid-template-columns: 1fr; /* ๋ชจ๋ฐ”์ผ์—์„œ๋Š” 1๋‹จ ๋ ˆ์ด์•„์›ƒ */ grid-template-rows: auto auto 1fr auto; /* ํ—ค๋”, ์‚ฌ์ด๋“œ๋ฐ”, ๋ฉ”์ธ, ํ‘ธํ„ฐ */ grid-template-areas: "header" "sidebar" "main" "footer"; padding: 15px; } }

์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ์™ผ์ชฝ์— ์žˆ๋Š” 2๋‹จ ๋ ˆ์ด์•„์›ƒ์ด, ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ 768px ์ดํ•˜๋กœ ์ค„์–ด๋“ค๋ฉด ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ํ—ค๋” ์•„๋ž˜, ๋ฉ”์ธ ์ฝ˜ํ…์ธ  ์œ„๋กœ ์ด๋™ํ•˜๋Š” 1๋‹จ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
cards ์ปจํ…Œ์ด๋„ˆ์—๋Š” repeat(auto-fit, minmax(280px, 1fr))์„ ์ ์šฉํ•˜์—ฌ ์นด๋“œ๋“ค์ด ํ™”๋ฉด ๋„ˆ๋น„์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ค„ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์กฐ์ •ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์–ด์š”.

๐Ÿ“ ์ •๋ฆฌํ•˜๋ฉฐ

์˜ค๋Š˜์€ CSS Grid์˜ ์‹ฌํ™” ๊ฐœ๋…๊ณผ ์‹ค์ „ ๋ ˆ์ด์•„์›ƒ ํŒจํ„ด, ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ „๋žต๊นŒ์ง€ ํญ๋„“๊ฒŒ ๋‹ค๋ค„๋ดค์–ด์š”.
fr ๋‹จ์œ„, repeat(), minmax(), grid-template-areas, auto-fit/auto-fill ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด, ์–ด๋–ค ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ๋„ ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์…จ์„ ๊ฑฐ์˜ˆ์š”.

0๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ

  • CSS Grid๋Š” 2์ฐจ์› ๋ ˆ์ด์•„์›ƒ์— ์ตœ์ ํ™”๋œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”.
  • fr ๋‹จ์œ„๋Š” ๋‚จ์€ ๊ณต๊ฐ„์„ ๋น„์œจ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ํ• ๋‹นํ•ด์š”.
  • repeat() ํ•จ์ˆ˜์™€ minmax() ํ•จ์ˆ˜๋Š” ๋™์ ์ด๊ณ  ์œ ์—ฐํ•œ ํŠธ๋ž™ ํฌ๊ธฐ ์ •์˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์š”.
  • **grid-template-areas**๋Š” ์˜์—ญ ์ด๋ฆ„์„ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค˜์š”.
  • **grid-column, grid-row**๋กœ ๊ฐœ๋ณ„ ์•„์ดํ…œ์˜ ๋ฐฐ์น˜ ์œ„์น˜์™€ ์ฐจ์ง€ํ•˜๋Š” ํŠธ๋ž™ ์ˆ˜๋ฅผ ์ œ์–ดํ•ด์š”.
  • **auto-fit / auto-fill**๊ณผ minmax() ์กฐํ•ฉ์€ ์•„์ดํ…œ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋ณ€์ ์ธ ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ์— ๋งค์šฐ ํšจ๊ณผ์ ์ด์—์š”.
  • @media ์ฟผ๋ฆฌ์™€ Grid ์†์„ฑ์„ ์กฐํ•ฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

1๏ธโƒฃ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜์•„๊ฐ€๊ธฐ

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

์—ฌ๋Ÿฌ๋ถ„๋„ CSS Grid ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜์–ด ๋”์šฑ ๋ฉ‹์ง„ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.
๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์งˆ๋ฌธํ•ด์ฃผ์„ธ์š”. ํ•จ๊ป˜ ์„ฑ์žฅํ•ด ๋‚˜๊ฐ€์š”!

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ