[TECH-QA] Flex์™€ Grid ๋น„๊ต

Flex (Flexbox)

  • ๋‹จ์ผ ๋ฐฉํ–ฅ(ํ–‰ ๋˜๋Š” ์—ด)์œผ๋กœ ์•„์ดํ…œ์„ ๋ฐฐ์น˜.
  • ์•„์ดํ…œ์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ์–ด ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์— ์œ ๋ฆฌ.
  • ๊ฐ„๋‹จํ•œ ์ •๋ ฌ๊ณผ ๊ณต๊ฐ„ ๋ถ„๋ฐฐ์— ๊ฐ•๋ ฅ.
<!DOCTYPE html>
<html>
<head>
<style>
  .flex-container {
    display: flex;
    justify-content: space-between; /* ์•„์ดํ…œ ๊ฐ„ ๊ฐ„๊ฒฉ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ */
    background-color: #f0f0f0;
  }
  .flex-item {
    background-color: #4CAF50;
    color: white;
    padding: 20px;
    margin: 10px;
    text-align: center;
  }
</style>
</head>
<body>
  <div class="flex-container">
    <div class="flex-item">1</div>
    <div class="flex-item">2</div>
    <div class="flex-item">3</div>
  </div>
</body>
</html>








  
1
2
3
์œ„ ์˜ˆ์ œ์—์„œ .flex-container๋Š” display: flex๋ฅผ ํ†ตํ•ด ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์•„์ดํ…œ์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. justify-content: space-between ์†์„ฑ์€ ์•„์ดํ…œ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ธ ๊ฐœ์˜ ๋ฐ•์Šค๊ฐ€ ์ˆ˜ํ‰์œผ๋กœ ๋‚˜๋ž€ํžˆ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

Grid

grid๋Š” 2์ฐจ์› ๊ทธ๋ฆฌ๋“œ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ˆ˜ํ‰(๊ฐ€๋กœ)๊ณผ ์ˆ˜์ง(์„ธ๋กœ) ๋ฐฉํ–ฅ ๋ชจ๋‘๋ฅผ ๊ณ ๋ คํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์…€์˜ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์—ฌ ์ผ๊ด€๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ–‰(row)๊ณผ ์—ด(column)์„ ๋ชจ๋‘ ์ •์˜ ๊ฐ€๋Šฅ.
  • ์…€ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ•˜๊ฑฐ๋‚˜ ๋น„์œจ๋กœ ์„ค์ •ํ•˜์—ฌ ์ผ์ •ํ•œ ๊ตฌ์กฐ ์œ ์ง€.
  • ๋ ˆ์ด์•„์›ƒ ๋ณ€ํ™”๊ฐ€ ์ ์€ ์ •์ ์ธ ๋””์ž์ธ์— ์ ํ•ฉ.
<!DOCTYPE html>
<html>
<head>
  <style>
    .grid-container {
      display: grid;
      grid-template-columns: 100px 100px 100px; /* 3์—ด, ๊ฐ 100px */
      grid-template-rows: 80px 80px; /* 2ํ–‰, ๊ฐ 80px */
      gap: 10px; /* ์…€ ๊ฐ„ ๊ฐ„๊ฒฉ */
      background-color: #f0f0f0;
    }
    .grid-item {
      background-color: #2196F3;
      color: white;
      padding: 20px;
      text-align: center;
    }
  </style>
</head>
<body>
  <div class="grid-container">
    <div class="grid-item">1</div>
    <div class="grid-item">2</div>
    <div class="grid-item">3</div>
    <div class="grid-item">4</div>
    <div class="grid-item">5</div>
    <div class="grid-item">6</div>
  </div>
</body>
</html>



  


  
1
2
3
4
5
6
์œ„ ์˜ˆ์ œ์—์„œ๋Š” grid-container๊ฐ€ 2x2 ๊ทธ๋ฆฌ๋“œ ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. grid-template-columns: 1fr 1fr๋กœ ๋‘ ๊ฐœ์˜ ์—ด์„ ๋™์ผํ•œ ๋น„์œจ๋กœ ๋‚˜๋ˆ„๊ณ , grid-template-rows๋กœ ํ–‰ ๋†’์ด๋ฅผ 100px๋กœ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. gap ์†์„ฑ์œผ๋กœ ์…€ ์‚ฌ์ด์— 10px ๊ฐ„๊ฒฉ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Grid๋Š” ๋ฐ˜์‘ํ˜•์— ์ ํ•ฉํ•œ๊ฐ€?

grid๋Š” ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์— ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ์ ์€ ๊ณ ์ •๋œ ๋ ˆ์ด์•„์›ƒ์— ์œ ๋ฆฌํ•˜๋‹ค๋Š” ์˜๋ฏธ์ผ ๋ฟ, ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋™์ ์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๋ฐ๋„ ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค. CSS Grid๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฐ˜์‘ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
  • fr ๋‹จ์œ„: ์œ ์—ฐํ•œ ๋น„์œจ๋กœ ์—ด/ํ–‰ ํฌ๊ธฐ๋ฅผ ์ •์˜.
  • minmax() ํ•จ์ˆ˜: ์ตœ์†Œ/์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ด ์ฝ˜ํ…์ธ ์— ๋”ฐ๋ผ ์ ์‘.
  • auto-fit / auto-fill: ์—ด ๊ฐœ์ˆ˜๋ฅผ ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์กฐ์ •.
  • ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๊ทธ๋ฆฌ๋“œ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝ.
<!DOCTYPE html>
<html>
<head>
<style>
  .grid-container2 {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
  }

.item {
  background-color: lightgreen;
  padding: 20px;
  text-align: center;
}

@media (max-width: 600px) {
  .grid-container {
    grid-template-columns: 1fr; /* ์ž‘์€ ํ™”๋ฉด์—์„œ๋Š” 1์—ด๋กœ */
  }
}
</style>
</head>
<body>
 <div class="grid-container2">
  <div class="item">์•„์ดํ…œ 1</div>
  <div class="item">์•„์ดํ…œ 2</div>
  <div class="item">์•„์ดํ…œ 3</div>
  <div class="item">์•„์ดํ…œ 4</div>
  <div class="item">์•„์ดํ…œ 5</div>
  <div class="item">์•„์ดํ…œ 6</div>
 </div>
</body>
</html>






 
์•„์ดํ…œ 1
์•„์ดํ…œ 2
์•„์ดํ…œ 3
์•„์ดํ…œ 4
์•„์ดํ…œ 5
์•„์ดํ…œ 6
  • auto-fit: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์— ๋”ฐ๋ผ ์—ด์„ ์ž๋™์œผ๋กœ ์ฑ„์›€.
  • minmax(150px, 1fr): ๊ฐ ์—ด์˜ ์ตœ์†Œ ๋„ˆ๋น„๋Š” 150px, ์ตœ๋Œ€๋Š” ๋‚จ์€ ๊ณต๊ฐ„์„ ๋น„์œจ๋กœ ๋‚˜๋ˆ”.
  • ๊ฒฐ๊ณผ: ํ™”๋ฉด์ด ๋„“์œผ๋ฉด ์—ฌ๋Ÿฌ ์—ด๋กœ ๋ฐฐ์น˜๋˜๊ณ , ์ข์•„์ง€๋ฉด ์—ด์ด ์ค„์–ด๋“ฆ.
  • ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ 600px ์ดํ•˜์ผ ๋•Œ 1์—ด๋กœ ๊ฐ•์ œ ์ „ํ™˜.
ํฐ ํ™”๋ฉด์—์„œ๋Š” ์•„์ดํ…œ์ด ์—ฌ๋Ÿฌ ์—ด๋กœ ๋‚˜์—ด๋˜๊ณ , ์ž‘์€ ํ™”๋ฉด์—์„œ๋Š” ์ž๋™์œผ๋กœ ํ•œ ์—ด๋กœ ์ •๋ ฌ๋˜์–ด ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์ด ๊ตฌํ˜„๋จ.