๐Ÿ“Web Developing/CSS ๊ธฐ์ดˆ

VII. ๋ฐ˜์‘ํ˜• ์›น๊ณผ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ - 5. CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ์‚ฌ์šฉํ•˜๊ธฐ

Hush 2022. 6. 14. 21:33

์›น ๋””์ž์ธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ๋•Œ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค.

์›น ์‚ฌ์ดํŠธ๋ฅผ ์ œ์ž‘ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ธฐ๊ธฐ๊ฐ€ ๋‚˜๋‚ ์ด ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์†Œ์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๊ธฐ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋ฒ•์ด ๋ฐ”๋กœ CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

 

CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด

ํ”Œ๋ ‰์Šค ๋ฐ•์Šค ๋ ˆ์ด์•„์›ƒ์—์„œ๋Š” ํ”Œ๋ ‰์Šค ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•  ๋•Œ ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ ์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ์ฃผ์ถ•์œผ๋กœ ์ •ํ•ด ๋†“๊ณ  ๋ฐฐ์น˜ํ–ˆ๋‹ค.

๋ฐ˜๋ฉด์— CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์—์„œ๋Š” ๊ทธ๋ฆฌ๋“œ ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•  ๋•Œ ๊ฐ€๋กœ์™€ ์„ธ๋กœ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ํ”Œ๋ ‰์Šค ํ•ญ๋ชฉ์€ 1์ฐจ์›์ด๊ณ  CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ 2์ฐจ์›์ด๋ผ๊ณ  ๋งํ•œ๋‹ค.

 

CSS๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ค„(row)๊ณผ ์„ธ๋กœ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์นผ๋Ÿผ(column)์œผ๋กœ ์›น ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์นผ๋Ÿผ๊ณผ ์นผ๋Ÿผ ์‚ฌ์ด, ์ค„๊ณผ ์ค„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•ด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ ๋‹ค.

 

CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•˜๋Š” ์†์„ฑ

CSS๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ œ์•ˆ๋œ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ์ œ์ž‘ ๋ฐฉ๋ฒ•์ด๋‹ค.

CSS๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

 

๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์ •ํ•˜๋Š” display ์†์„ฑ

๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•  ๋–„์—๋Š” ๊ฐ€์žฅ ๋จผ์ € ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ ์šฉํ•  ์š”์†Œ์˜ ๋ฐ”๊นฅ ๋ถ€๋ถ„์„ ๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š” display ์†์„ฑ์„ grid๋‚˜ inline-gird๋กœ ์ง€์ •ํ•œ๋‹ค.

์ข…๋ฅ˜ ์„ค๋ช…
grid ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ํ•ญ๋ชฉ์„ ๋ธ”๋ก ๋ ˆ๋ฒจ ์š”์†Œ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.
inline-grid ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ํ•ญ๋ชฉ์„ ์ธ๋ผ์ธ ๋ ˆ๋ฒจ ์š”์†Œ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.

 

์นผ๋Ÿผ๊ณผ ์ค„์„ ์ง€์ •ํ•˜๋Š” grid-template-columns, grid-template-rows ์†์„ฑ

๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•  ๋•Œ ์นด๋Ÿผ๊ณผ ์ค„์˜ ํฌ๊ธฐ์™€ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์ด ๋‘ ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

grid-template-columns ์†์„ฑ์€ ๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ํ•ญ๋ชฉ์„ ๋ช‡ ๊ฐœ์˜ ์นผ๋Ÿผ์œผ๋กœ ๋ฐฐ์น˜ํ• ์ง€, ๊ฐ ์นผ๋Ÿผ์˜ ๋„ˆ๋น„๋ฅผ ์–ผ๋งˆ๋กœ ํ• ์ง€ ์ง€์ •ํ•œ๋‹ค.

๋‹ค์Œ์€ .items ์š”์†Œ๋ฅผ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ๋ฐ”๊นฅ์„ ๊ฐ์‹ธ๋Š” #wrapper ์š”์†Œ๋ฅผ ๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•œ ์˜ˆ์ œ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋„ˆ๋น„๋ฅผ 200px์ธ ์นผ๋Ÿผ 3๊ฐœ๋กœ ๋ฐฐ์น˜ํ–ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ค„์ด ๋  ๊ฒฝ์šฐ ์ค„ ๋†’์ด๋Š” 100px๋กœ ์ง€์ •ํ–ˆ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Grid Layout</title>
  <style>
    #wrapper{
      display:grid;
      grid-template-columns: 200px 200px 200px;
      grid-template-rows:100px;
    }
  .items{
    padding:10px;
    background-color:#eee;
  }   
  .items:nth-child(odd){
    background-color:#bbb;
  }
  </style>

</head>
<body>
  <div id="wrapper">
    <div class="items">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet, reprehenderit.Lorem ipsum dolor, sit amet consectetur adipisicing elit. </div>
    <div class="items">Lorem ipsum dolor, sit amet consectetur adipisicing elit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit amet.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem, ipsum dolor.</div>
  </div>
</body>
</html>

 

์ƒ๋Œ€์ ์ธ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” fr๋‹จ์œ„

๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์—์„œ ์นผ๋Ÿผ์ด๋‚˜ ์ค„์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ๋•Œ ํ”ฝ์…€(px)์„ ์ด์šฉํ•˜๋ฉด ํ•ญ์ƒ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜๋ฏ€๋กœ ๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์—์„œ๋Š” ์ƒ๋Œ€์ ์ธ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก fr(fraction) ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋„ˆ๋น„๊ฐ€ ๊ฐ™์€ ์นผ๋Ÿผ์„ 3๊ฐœ ๋ฐฐ์น˜ํ•œ๋‹ค๋ฉด fr ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•œ๋‹ค.

grid-template-columns: 1fr 1fr 1fr;

๋˜๋Š” ์นผ๋Ÿผ์„ 2:1:2 ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•œ๋‹ค.

grid-template-columns: 2fr 1fr 2fr;

 

๊ฐ’์ด ๋ฐ˜๋ณต๋  ๋•Œ ์ค„์—ฌ์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” repeat()ํ•จ์ˆ˜

px์ด๋‚˜ fr ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜‘๊ฐ™์€ ๊ฐ’์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•œ๋‹ค.

CSS ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์—๋Š” ๋‚ด์žฅ๋œ repeat()์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋„ˆ๋น„๊ฐ€ ๊ฐ™์€ ์นผ๋Ÿผ์„ 3๊ฐœ ๋ฐฐ์น˜ํ•˜๋ ค๋ฉด 1fr์„ 3๋ฒˆ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, repeat() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

grid-template-columns: 1fr 1fr 1fr;
grid-template-columns: repeat(3,1fr);

 

์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’์„ ์ง€์ •ํ•˜๋Š” minmax() ํ•จ์ˆ˜

์•ž์—์„œ ์‚ดํŽด๋ณธ ์˜ˆ์ œ์—์„œ๋Š” ์ค„ ๋†’์ด๋ฅผ 100px๋กœ ์ง€์ •ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ค„ ๋†’์ด๋ณด๋‹ค ๋‚ด์šฉ์ด ๋” ๋งŽ์œผ๋ฉด ๋ณด์ด์ง€ ์•Š์•˜๋‹ค.

์ด๋Ÿด๋•Œ minmax() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค„ ๋†’์ด๋ฅผ ๊ณ ์ •ํ•˜์ง€ ์•Š๊ณ  ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ์œ ์—ฐํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์ œ๋Š” ๋„ˆ๋น„๊ฐ€ ๊ฐ™์€ ์นผ๋Ÿผ 3๊ฐœ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ์นผ๋Ÿผ์˜ ๋„ˆ๋น„๋Š” ๊ทธ๋ฆฌ๋“œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ค„ ๋†’์ด๋Š” ์ตœ์†Œ 100px๋กœ ์ง€์ •ํ•˜๊ณ , ๋‚ด์šฉ์ด ๋งŽ์•„๋„ ๋‹ค ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋†’์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Grid Layout</title>
  <style>
    #wrapper{
        width:600px;
      display:grid;
      grid-template-columns: repeat(3,1fr);
      grid-template-rows:minmax(100px,auto);
    }
  .items{
    padding:10px;
    background-color:#eee;
  }   
  .items:nth-child(odd){
    background-color:#bbb;
  }
  </style>

</head>
<body>
  <div id="wrapper">
    <div class="items">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet, reprehenderit.Lorem ipsum dolor, sit amet consectetur adipisicing elit. </div>
    <div class="items">Lorem ipsum dolor, sit amet consectetur adipisicing elit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit amet.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem, ipsum dolor.</div>
  </div>
</body>
</html>

 

์ž๋™์œผ๋กœ ์นผ๋Ÿผ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” auto-fill, auto-fit ๊ฐ’

์•ž์—์„œ repeat() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ์นผ๋Ÿผ์„ ๋ฐ˜๋ณตํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์นผ๋Ÿผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ–ˆ๋‹ค.

grid-template-columns: repeat(3, 1fr);

์ด๋•Œ ์นผ๋Ÿผ์˜ ๋„ˆ๋น—๊ฐ’๊ณผ ํ•จ๊ป˜ auto-fit์ด๋‚˜ auto-fill์„ ์ง€์ •ํ•˜๋ฉด ํ™”๋ฉด ๋„ˆ๋น„์— ๋”ฐ๋ผ ์นผ๋Ÿผ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„ˆ๋น„๊ฐ€ 200px์ธ ์นผ๋Ÿผ์„ ํ™”๋ฉด ๋„ˆ๋น„์— ๊ฐ€๋“ ์ฐฐ๋•Œ๊นŒ์ง€ ๋ฐฐ์น˜ํ•œ๋‹ค.

grid-template-columns: repeat(auto-fit, 200px);

auto-fit์ด๋‚˜ auto-fill ๋ชจ๋‘ ์นผ๋Ÿผ ๊ฐœ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•ด ์ฃผ๋ฏ€๋กœ ํ™”๋ฉด์ด ๋„“์–ด์ง€๋ฉด ์นผ๋Ÿผ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๋ฐ˜๋Œ€๋กœ ํ™”๋ฉด์ด ์ข์•„์ง€๋ฉด ์นผ๋Ÿผ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

๋‘ ๊ฐ’์˜ ์ฐจ์ด์ ์€ ๋‚จ๋Š” ๊ณต๊ฐ„์„ ์ฑ„์šธ์ง€ ๋ง์ง€์—ฌ๋ถ€์— ๋‹ฌ๋ ค์žˆ๋‹ค.

auto-fit์€ ํ™”๋ฉด์ด ์ตœ์†Œ๋„ˆ๋น„ ์ด์ƒ์œผ๋กœ ๋‚จ๋”๋ผ๋„ column์„ ๋” ๋„ฃ์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ปจํ…์ธ ๋ฅผ ๋„“ํ˜€ ํ™”๋ฉด์„ ๊ฝ‰ ์ฑ„์šฐ์ง€๋งŒ

auto-fill์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์†Œ ๋„ˆ๋น„ ์ด์ƒ์˜ ๊ณต๊ฐ„์ด ๋‚จ์œผ๋ฉด ๋นˆ column์„ ์ƒ์„ฑํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๋“œ ํ•ญ๋ชฉ์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•˜๋Š” column-gap, row-gap, gap ์†์„ฑ

์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ์˜ˆ์ œ์ฒ˜๋Ÿผ ๊ธฐ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ํ•ญ๋ชฉ์ด ์„œ๋กœ ๋ถ™์–ด ์žˆ๋‹ค.

์ด๋•Œ ํ•ญ๋ชฉ๊ณผ ํ•ญ๋ชฉ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์กฐ์ ˆํ•˜๋ ค๋ฉด ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ข…๋ฅ˜ ์„ค๋ช…
column-gap ์นผ๋Ÿผ๊ณผ ์นผ๋Ÿผ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•œ๋‹ค.
row-gap ์ฆ๊ณผ ์ค„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ง€์ •ํ•œ๋‹ค.
gap ์นผ๋Ÿผ๊ณผ ์ค„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ค„๊ณผ ์ค„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ 20px๋กœ ํ•˜๊ณ , ์นผ๋Ÿผ๊ณผ ์นผ๋Ÿผ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ 30px๋กœ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

row-gap: 20px;
column-gap: 30px;

gap ์†์„ฑ์„ ์ด์šฉํ•ด ์นผ๋Ÿผ๊ณผ ์ค„์˜ ๊ฐ„๊ฒฉ์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ grid-row-gap์— ํ•ด๋‹นํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ column-gap์— ํ•ด๋‹นํ•œ๋‹ค.

์ฆ‰ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Grid Layout</title>
  <style>
    #wrapper{
      display:grid;
      grid-template-columns: repeat(3,200px);
      gap: 20px;
    }
  .items{
    padding:10px;
    background-color:#eee;
  }   
  .items:nth-child(odd){
    background-color:#bbb;
  }
  </style>

</head>
<body>
  <div id="wrapper">
    <div class="items">Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet, reprehenderit.Lorem ipsum dolor, sit amet consectetur adipisicing elit. </div>
    <div class="items">Lorem ipsum dolor, sit amet consectetur adipisicing elit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor, sit amet consectetur adipisicing elit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit amet.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem ipsum dolor sit.Lorem ipsum dolor, sit amet consectetur adipisicing elit</div>
    <div class="items">Lorem, ipsum dolor.</div>
  </div>
</body>
</html>

 

๊ทธ๋ฆฌ๋“œ ๋ผ์ธ์„ ์ด์šฉํ•ด ๋ฐฐ์น˜ํ•˜๊ธฐ

๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ทธ๋ฆฌ๋“œ ๋ผ์ธ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด column 3๊ฐœ์™€ row 3๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ๊ฐํ•ด ๋ณด์ž.

์นผ๋Ÿผ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์„ธ๋กœ์ค„ ๋„ค๊ฐœ, ๊ทธ๋ฆฌ๊ณ  row๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ€๋กœ์ค„ ๋„ค๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ด ๊ทธ๋ฆฌ๋“œ ๋ผ์ธ์„ ์ด์šฉํ•ด์„œ ๊ทธ๋ฆฌ๋“œ ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ข…๋ฅ˜ ์„ค๋ช… ์˜ˆ์‹œ
grid-column-start ์นผ๋Ÿผ ์‹œ์ž‘์˜ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. grid-column-start: 1
grid-column-end ์นผ๋Ÿผ ๋งˆ์ง€๋ง‰์˜ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. grid-column-end: 1
grid-column ์นผ๋Ÿผ ์‹œ์ž‘ ๋ฒˆํ˜ธ์™€ ์นผ๋Ÿผ ๋ ๋ฒˆํ˜ธ ์‚ฌ์ด์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉํ•œ๋‹ค. grid-column: 1/4
grid-row-start ์ค„ ์‹œ์ž‘์˜ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. grid-row-start: 2
grid-row-end ์ค„ ๋งˆ์ง€๋ง‰์˜ ๋ผ์ธ ๋ฒˆํ˜ธ์ด๋‹ค. grid-row-end:4
grid-row ์ค„ ์‹œ์ž‘๊ณผ ์ค„ ๋ ๋ฒˆํ˜ธ ์‚ฌ์ด์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉํ•œ๋‹ค grid-row: 2/4

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

์šฐ์„  box1๋ถ€ํ„ฐ box4 ์˜์—ญ๊นŒ์ง€ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” #wrapper ์š”์†Œ๋ฅผ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•˜๊ณ , ์นผ๋Ÿผ์€ 1fr์”ฉ 3๊ฐœ๋กœ, ์ค„ ๋†’์ด๋Š” repeat(3,100px)๋กœ ์ง€์ •ํ•œ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Grid Layout</title>
  <style>
    div{
      text-align: center;
    }
    #wrapper{
      width: 700px;
      display: grid;
      grid-template-rows: repeat(3,100px);
      grid-template-columns: repeat(3,1fr);
    }
    .box1{
      background-color: blue;
      grid-column: 1/4;
    }    
    .box2{
      background-color: green;
      grid-row:2/4;
    }
    .box3{
      background-color: red;
      grid-column:2/4;
    }
    .box4{
      background-color: purple;
      grid-row:3/4;
      grid-column:3/4;
    }
    
  </style>

</head>
<body>
  <div id="wrapper">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    <div class="box4">4</div>
  </div>
</body>
</html>

 

 

ํ…œํ”Œ๋ฆฟ ์˜์—ญ์„ ๋งŒ๋“ค์–ด ๋ฐฐ์น˜ํ•˜๊ธฐ

์•ž์—์„œ ์‚ดํŽด๋ณธ ๊ทธ๋ฆฌ๋“œ ๋ผ์ธ์€ ์‹œ์ž‘ ๋ฒˆํ˜ธ์™€ ๋ ๋ฒˆํ˜ธ๋ฅผ ์ผ์ผ์ด ์ง€์ •ํ•ด์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ์˜์—ญ์œผ๋กœ ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•˜๋ฉด ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์‰ฝ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ํ…œํ”Œ๋ฆฟ ์˜์—ญ์„ ์‚ฌ์šฉํ•ด์„œ ์•ž์—์„œ ๋ฐฐ์น˜ํ•œ ํ•ญ๋ชฉ๊ณผ ๋˜‘๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํ•ญ๋ชฉ์— ์ ์šฉํ•  ์Šคํƒ€์ผ์— grid-area: ์˜์—ญ๋ช…; ์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

2. ๋ ˆ์ด์•„์›ƒ ์ปจํ…Œ์ด๋„ˆ์˜ ์Šคํƒ€์ผ์— grid-template-areas: ๋ฐฐ์น˜๊ตฌ์กฐ; ์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

๋ฐฐ์น˜๊ตฌ์กฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS Grid Layout</title>
  <style>
    div{
      text-align: center;
    }
    #wrapper{
      width: 700px;
      display: grid;
      grid-template-rows: repeat(3,100px);
      grid-template-columns: repeat(3,1fr);
      grid-template-areas:
        "box1 box1 box1"
        "box2 box3 box3"
        "box2 . box4"
    }
    .box1{
      background-color: blue;
      grid-area: box1;
    }    
    .box2{
      background-color: green;
      grid-area: box2;
    }
    .box3{
      background-color: red;
      grid-area: box3;
    }
    .box4{
      background-color: purple;
      grid-area: box4;
    }
    
  </style>

</head>
<body>
  <div id="wrapper">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    <div class="box4">4</div>
  </div>
</body>
</html>

 

+ span์„ ์ด์šฉํ•ด ๋ฐฐ์น˜ํ•˜๊ธฐ

์—ฌ๋Ÿฌ ์นธ์„ ์ฐจ์ง€ํ•  ์š”์†Œ์— span ์š”์†Œ๊ฐ’์„ ๋ถ€์—ฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ์นธ์„ ์ฐจ์ง€ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

.calculator form .clear{
    grid-column: span 3;
}

.calculator form .result{
    grid-column: span 2;
}