CodeGym /ํ–‰๋™ /Frontend SELF KO /CSS Grid ๊ธฐ๋ณธ

CSS Grid ๊ธฐ๋ณธ

Frontend SELF KO
๋ ˆ๋ฒจ 27 , ๋ ˆ์Šจ 0
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1.1 Grid Layout์˜ ๊ธฐ๋ณธ ์›์น™

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

CSS Grid์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

  1. Grid ์ปจํ…Œ์ด๋„ˆ์™€ Grid ์š”์†Œ๋“ค:
    • Grid ์ปจํ…Œ์ด๋„ˆ๋Š” display: grid๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์†Œ์•ผ. ์ด ์š”์†Œ๋Š” ๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋˜๊ณ , ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋“ค์€ Grid ์š”์†Œ๊ฐ€ ๋ผ
    • Grid ์š”์†Œ๋Š” Grid ์ปจํ…Œ์ด๋„ˆ์˜ ์ง๊ณ„ ์ž์‹ ์š”์†Œ๋“ค์ด์•ผ, ๊ทธ๋ฆฌ๋“œ ์•ˆ์— ๋ฐฐ์น˜๋˜์–ด ์žˆ์–ด
  2. ๊ทธ๋ฆฌ๋“œ ์ถ•:
    • ์ฃผ์ถ• (inline axis)์™€ ๋ธ”๋ก ์ถ• (block axis): Grid๋Š” ์š”์†Œ ๋ฐฐ์น˜๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐœ์˜ ์ถ•์„ ์ง€์›ํ•ด โ€” ์ฃผ์ถ•๊ณผ ๋ธ”๋ก ์ถ•. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผ์ถ•์€ ์ˆ˜ํ‰์œผ๋กœ ๊ฐ€๊ณ , ๋ธ”๋ก ์ถ•์€ ์ˆ˜์ง์œผ๋กœ ๊ฐ€
  3. ๊ทธ๋ฆฌ๋“œ ์…€ (Grid Cells):
    • ๊ทธ๋ฆฌ๋“œ ์…€์€ ํ–‰๊ณผ ์—ด์ด ๊ต์ฐจํ•˜๋Š” ๊ณณ์—์„œ ํ˜•์„ฑ๋˜๋Š” ๊ธฐ๋ณธ ๋ธ”๋ก๋“ค์ด์•ผ. ๊ฐ Grid ์š”์†Œ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์…€์„ ์ฐจ์ง€ํ•ด
  4. ๊ทธ๋ฆฌ๋“œ ๋ผ์ธ (Grid Lines):
    • ๊ทธ๋ฆฌ๋“œ ๋ผ์ธ์€ ํ–‰๊ณผ ์—ด์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ˆ˜ํ‰ ๋ฐ ์ˆ˜์ง์„ ์ด์•ผ. ์š”์†Œ๋ฅผ ๊ทธ๋ฆฌ๋“œ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ผ
  5. ๊ทธ๋ฆฌ๋“œ ์˜์—ญ (Grid Areas):
    • ๊ทธ๋ฆฌ๋“œ ์˜์—ญ์€ ์—ฌ๋Ÿฌ ์…€์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ด๋ฆ„์ด ์žˆ๋Š” ๊ทธ๋ฆฌ๋“œ ์˜์—ญ์ด์•ผ. ์…€์„ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ํŠน์ • ์˜์—ญ์— ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜

1.2 ๋ฌธ๋ฒ• ์š”์†Œ๋“ค

CSS Grid์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์š”์†Œ๋“ค

1. Grid ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ:

    
      .container {
        display: grid; /* ๋˜๋Š” display: inline-grid */
      }
    
  

2. ๊ทธ๋ฆฌ๋“œ ๊ตฌ์กฐ ์ •์˜:

CSS
    
      .container {
        display: grid;
        grid-template-columns: 100px 200px 100px; /* ์„œ๋กœ ๋‹ค๋ฅธ ๋„ˆ๋น„์˜ ์„ธ ์—ด์„ ์ •์˜ */
        grid-template-rows: 50px 100px; /* ์„œ๋กœ ๋‹ค๋ฅธ ๋†’์ด์˜ ๋‘ ํ–‰์„ ์ •์˜ */
      }
    
  

3. grid-area๋ฅผ ํ†ตํ•œ ์…€ ๋ณ‘ํ•ฉ:

CSS
    
      .item1 {
        grid-area: 1 / 1 / 2 / 4; /* ์š”์†Œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ํ–‰๊ณผ ์ฒ˜์Œ ์„ธ ์—ด์„ ์ฐจ์ง€ */
      }
    
  

4. ์š”์†Œ ์ž๋™ ๋ฐฐ์น˜:

CSS
    
      .container {
        display: grid;
        grid-auto-rows: minmax(100px, auto); /* ํ–‰์˜ ์ตœ์†Œ ๋†’์ด๋ฅผ ์ง€์ • */
      }
    
  

1.3 ์˜ˆ์ œ๋“ค

CSS Grid๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ๋ ˆ์ด์•„์›ƒ:

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>CSS Grid ์˜ˆ์ œ</title>
          <style>
            .container {
              display: grid;
              grid-template-columns: 1fr 2fr 1fr;
              grid-template-rows: 100px 200px;
              gap: 10px;
            }

            .item {
              background-color: lightblue;
              padding: 20px;
              text-align: center;
            }
          </style>
        </head>
        <body>
          <div class="container">
            <div class="item">Item 1</div>
            <div class="item">Item 2</div>
            <div class="item">Item 3</div>
            <div class="item">Item 4</div>
            <div class="item">Item 5</div>
            <div class="item">Item 6</div>
          </div>
        </body>
      </html>
    
  

์„ค๋ช…:

  • ์ปจํ…Œ์ด๋„ˆ .container๋Š” ์ฒซ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ ์—ด์ด ๊ฐ€์šฉ ๊ณต๊ฐ„์˜ ๋™์ผํ•œ ๋น„์œจ์„ ์ฐจ์ง€ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ์—ด์ด ๋‘ ๋ฐฐ๋ฅผ ์ฐจ์ง€ํ•˜๋„๋ก ์„ค์ •๋ผ
  • ๊ณ ์ •๋œ ๋†’์ด์˜ ๋‘ ๊ฐœ์˜ ํ–‰์ด ์ง€์ •๋ผ
  • ์†์„ฑ gap์€ ๊ทธ๋ฆฌ๋“œ ์…€ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•ด
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION