Flexbox Layout

1. κ°œμš”

Flexbox Layout은 λͺ¨λ˜ 웹을 μœ„ν•˜μ—¬ μ œμ•ˆλœ κΈ°μ‘΄ layout보닀 더 μ„Έλ ¨λœ λ°©μ‹μ˜ λ‹ˆμ¦ˆμ— λΆ€ν•©ν•˜κΈ° μœ„ν•œ CSS3의 μƒˆλ‘œμš΄ layout방식이닀. ν”Œλž™μŠ€ λ°•μŠ€ λ ˆμ΄μ•„μ›ƒμ€ 비ꡐ적 μ΅œκ·Όμ— λ“±μž₯ν•œ κ°œλ…μ΄λ―€λ‘œ 기쑴의 CSS 속성 외에 μƒˆλ‘œ 곡뢀해야 ν•  속성이 μžˆλ‹€.


2. μš©μ–΄ 정리

Flex Layout Box Model
  • ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ(λΆ€λͺ¨ λ°•μŠ€): ν”Œλ ‰μŠ€ λ°•μŠ€ λ ˆμ΄μ•„μ›ƒμ„ μ μš©ν•  λŒ€μƒμ„ λ¬ΆλŠ” μš”μ†Œμ΄λ‹€. μœ„μ˜ κ·Έλ¦Όμ—μ„œλŠ” 노라색 배경을 κ°€μ§„ 큰 λ°•μŠ€κ°€ ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆμ— ν•΄λ‹Ήλœλ‹€.

  • ν”Œλ ‰μŠ€ ν•­λͺ©(μžμ‹ λ°•μŠ€, flex-item): ν”Œλ ‰μŠ€ λ°•μŠ€ λ ˆμ΄μ•„μ›ƒμ„ μ μš©ν•  λŒ€μƒμ΄λ‹€. μœ„μ˜ κ·Έλ¦Όμ—μ„œλŠ” ν•˜μ–€μƒ‰ 배경을 κ°€μ§„ μž‘μ€ λ°•μŠ€κ°€ ν”Œλ ‰μŠ€ ν•­λͺ©μ— ν•΄λ‹Ήλœλ‹€.

  • μ£ΌμΆ•(main axis): ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ ν”Œλ ‰μŠ€ ν•­λͺ©μ„ λ°°μΉ˜ν•˜λŠ” κΈ°λ³Έ λ°©ν–₯이닀. 기본적으둜 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μ΄λ©° μˆ˜ν‰ λ°©ν–₯으둜 λ°°μΉ˜ν•œλ‹€. ν”Œλ ‰μŠ€ ν•­λͺ©μ˜ λ°°μΉ˜κ°€ μ‹œμž‘λ˜λŠ” μœ„μΉ˜λ₯Ό 'μ£ΌμΆ• μ‹œμž‘μ ', λλ‚˜λŠ” μœ„μΉ˜λ₯Ό 'μ£ΌμΆ• 끝점'이라고 ν•œλ‹€.

  • ꡐ차좕(cross axis): μ£ΌμΆ•κ³Ό κ΅μ°¨ν•˜λŠ” λ°©ν–₯을 λ§ν•˜λ©° 기본적으둜 μœ„μ—μ„œ μ•„λž˜λ‘œ λ°°μΉ˜ν•œλ‹€. ν”Œλ ‰μŠ€ ν•­λͺ©μ˜ λ°°μΉ˜κ°€ μ‹œμž‘λ˜λŠ” μœ„μΉ˜λ₯Ό 'ꡐ차좕 μ‹œμž‘μ ', λλ‚˜λŠ” μœ„μΉ˜λ₯Ό 'ꡐ차좕 끝점'이라고 ν•œλ‹€.


3. Usage

ν”Œλ ‰μŠ€ λ°•μŠ€ λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € μ›Ή μ½˜ν…μΈ λ₯Ό ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆλ‘œ λ¬Άμ–΄ μ£Όμ–΄μ•Ό ν•œλ‹€. 즉, λ°°μΉ˜ν•  μ›Ή μš”μ†Œκ°€ μžˆλ‹€λ©΄ κ·Έ μš”μ†Œλ₯Ό κ°μ‹ΈλŠ” λΆ€λͺ¨ μš”μ†Œλ₯Ό λ§Œλ“€κ³ , κ·Έ λΆ€λͺ¨ μš”μ†Œλ₯Ό ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆλ‘œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

λΆ€λͺ¨ μš”μ†Œμ˜ display 속성에 flexλ₯Ό μ§€μ •ν•˜λ©΄ ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆκ°€ λ§Œλ“€μ–΄μ§„λ‹€.

.flex-container {
  display: flex;
}

λΆ€λͺ¨ μš”μ†Œκ°€ inline μš”μ†ŒμΈ 경우 inline-flex을 μ§€μ •ν•œλ‹€.

.flex-container {
  display: inline-flex;
}

Flexbox Layoutλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” flex λ˜λŠ” inline-flexλŠ” λΆ€λͺ¨ μš”μ†Œμ— λ°˜λ“œμ‹œ μ§€μ •ν•΄μ•Όν•˜λ©° μžμ‹ μš”μ†ŒλŠ” μžλ™μ μœΌλ‘œ flex item이 λœλ‹€.


4. Flexbox container 속성

4.1 flex-direction

ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ ν”Œλ ‰μŠ€ ν•­λͺ©μ„ λ°°μΉ˜ν•˜λŠ” μ£ΌμΆ•(main axis) λ°©ν–₯을 μ„€μ •ν•œλ‹€.

μ•„λž˜λŠ” flex-direction의 ν”„λ‘œνΌν‹°κ°’κ³Ό μ„€λͺ…이닀.

μ’…λ₯˜
μ„€λͺ…

row

주좕을 κ°€λ‘œλ‘œ μ§€μ •ν•˜κ³  μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.(κΈ°λ³Έκ°’)

row-reverse

주좕을 κ°€λ‘œλ‘œ μ§€μ •ν•˜κ³  λ°˜λŒ€λ‘œ 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

column

주좕을 μ„Έλ‘œλ‘œ μ§€μ •ν•˜κ³  μœ„μͺ½μ—μ„œ μ•„λž˜μͺ½μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

column-reverse

주좕을 μ„Έλ‘œλ‘œ μ§€μ •ν•˜κ³  μ•„λž˜μͺ½μ—μ„œ μœ„μͺ½μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        font-size: 20px;
        font-weight: 700;
      }
      .box {
        background-color: yellow;
        width: 60px;
        height: 60px;
        text-align: center;
        line-height: 60px;
        margin: 10px;
      }
      .row {
        display: flex;
        flex-direction: row;
      }
      .row-reverse {
        display: flex;
        flex-direction: row-reverse;
      }
      .column {
        display: flex;
        flex-direction: column;
      }
      .column-reverse {
        display: flex;
        flex-direction: column-reverse;
      }
    </style>
  </head>
  <body>
    <div>
      row
      <div class="row">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
      </div>
    </div>
    <div>
      row-reverse
      <div class="row-reverse">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
      </div>
    </div>
    <div>
      column
      <div class="column">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
      </div>
    </div>
    <div>
      column-reverse
      <div class="column-reverse">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
      </div>
    </div>
  </body>
</html>
flex-direction

4-2 flex-wrap

flex-wrap ν”„λ‘œνΌν‹°λŠ” ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ λ„ˆλΉ„λ³΄λ‹€ λ§Žμ€ ν”Œλ ‰μŠ€ ν•­λͺ©μ΄ μžˆμ„ 경우 쀄을 λ°”κΏ€μ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•œλ‹€.

μ•„λž˜λŠ” flex-wrapμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν”„λ‘œνΌν‹°κ°’κ³Ό μ„€λͺ…이닀.

μ’…λ₯˜
μ„€λͺ…

nowrap

ν”Œλ ‰μŠ€ ν•­λͺ©μ„ ν•œ 쀄에 ν‘œμ‹œν•œλ‹€.(κΈ°λ³Έκ°’)

warp

ν”Œλ ‰μŠ€ ν•­λͺ©μ„ μ—¬λŸ¬ 쀄에 ν‘œμ‹œν•œλ‹€.

wrap-reverse

ν”Œλ ˆμŠ€ ν•­λͺ©μ„ μ—¬λŸ¬ 쀄에 ν‘œμ‹œν•˜λ˜, μ‹œμž‘μ κ³Ό 끝점이 바뀐닀.

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        font-size: 20px;
        font-weight: 700;
      }
      .box {
        background-color: yellow;
        width: 200px;
        height: 60px;
        text-align: center;
        line-height: 60px;
        margin: 10px;
      }
      .nowrap {
        display: flex;
        flex-wrap: nowrap;
      }
      .wrap {
        display: flex;
        flex-wrap: wrap;
      }
      .wrap-reverse {
        display: flex;
        flex-wrap: wrap-reverse;
      }
    </style>
  </head>
  <body>
    <div>
      nowrap
      <div class="nowrap">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
      </div>
    </div>
    <div>
      wrap
      <div class="wrap">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
      </div>
    </div>
    <div>
      wrap-reverse
      <div class="wrap-reverse">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
      </div>
    </div>
  </body>
</html>
flex-wrap

4-3. flex-flow

flex-flow ν”„λ‘œνΌν‹°λŠ” flex-direction ν”„λ‘œνΌν‹°μ™€ flex-wrap ν”„λ‘œνΌν‹°λ₯Ό λ™μ‹œμ— μ„€μ •ν•˜κΈ° μœ„ν•œ shorthand이닀. 기본값은 row nowarp이닀.

μ‚¬μš©λ²• flex-flow: <flex-direction> || <flex-wrap>;


4-4 justify-content

justify-content ν”„λ‘œνΌν‹°λŠ” μ£ΌμΆ•(main axis)을 κΈ°μ€€μœΌλ‘œ flex item을 μˆ˜ν‰ μ •λ ¬ 방법을 μ§€μ •ν•œλ‹€.

flex-direction: column;으둜 인해 주좕이 λ°”λ€Œκ²Œ λ˜λŠ” 경우λ₯Ό μ‘°μ‹¬ν•˜μž.

μ•„λž˜λŠ” justify-content의 ν”„λ‘œνΌν‹°κ°’κ³Ό μ„€λͺ…이닀.

μ’…λ₯˜
μ„€λͺ…

flex-start

μ£ΌμΆ•μ˜ μ‹œμž‘μ μ— 맞좰 λ°°μΉ˜ν•œλ‹€.

flex-end

μ£ΌμΆ•μ˜ 끝점에 맞좰 λ°°μΉ˜ν•œλ‹€.

center

μ£ΌμΆ•μ˜ 쀑앙에 맞좰 λ°°μΉ˜ν•œλ‹€.

space-between

첫 번재 ν•­λͺ©κ³Ό 끝 ν•­λͺ©μ„ μ£ΌμΆ•μ˜ μ‹œμž‘μ κ³Ό 끝점에 λ°°μΉ˜ν•œ ν›„ λ‚˜λ¨Έμ§€ ν•­λͺ©μ€ κ·Έ 사이에 같은 κ°„κ²©μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

space-around

λͺ¨λ“  ν•­λͺ©μ„ 주좕에 같은 κ°„κ²©μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        font-size: 20px;
        font-weight: 700;
      }
      .parents {
        margin-bottom: 10px;
      }
      .flex-container {
        background-color: green;
      }
      .box {
        background-color: yellow;
        width: 200px;
        height: 60px;
        text-align: center;
        line-height: 60px;
        margin: 10px;
      }
      .flex-start {
        display: flex;
        justify-content: flex-start;
      }
      .flex-end {
        display: flex;
        justify-content: flex-end;
      }
      .center {
        display: flex;
        justify-content: center;
      }
      .space-between {
        display: flex;
        justify-content: space-between;
      }
      .space-around {
        display: flex;
        justify-content: space-around;
      }
    </style>
  </head>
  <body>
    <div class="parents">
      flex-start
      <div class="flex-start flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      flex-end
      <div class="flex-end flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      center
      <div class="center flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      space-between
      <div class="space-between flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      space-around
      <div class="space-around flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
  </body>
</html>

justify-content


4-5 align-items

align-items ν”„λ‘œνΌν‹°λŠ” 수직 λ°©ν–₯(cross axis)을 κΈ°μ€€μœΌλ‘œ flex item을 μ •λ ¬ν•œλ‹€. align-items ν”„λ‘œνΌν‹°λŠ” λͺ¨λ“  flex-item에 μ μš©λœλ‹€.

μ•„λž˜λŠ” align-items의 ν”„λ‘œνΌν‹°κ°’κ³Ό μ„€λͺ…이닀.

μ’…λ₯˜
μ„€λͺ…

flex-start

κ΅μ°¨μΆ•μ˜ μ‹œμž‘μ μ— 맞좰 λ°°μΉ˜ν•œλ‹€.

flex-end

κ΅μ°¨μΆ•μ˜ 끝점에 맞좰 λ°°μΉ˜ν•œλ‹€.

center

κ΅μ°¨μΆ•μ˜ 쀑아에 λ°°μΉ˜ν•œλ‹€.

baseline

κ΅μ°¨μΆ•μ˜ 문자 기쀀선에 맞좰 λ°°μΉ˜ν•œλ‹€.

stretch

ν”Œλ ‰μŠ€ ν•­λͺ©μ„ 늘렀 ꡐ차좕에 가득 차게 λ°°μΉ˜ν•œλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        font-size: 20px;
        font-weight: 700;
      }
      .parents {
        margin-bottom: 10px;
        background-color: green;
        color: white;
      }
      .flex-container {
        min-height: 120px;
        border-top: 2px solid black;
        padding: 0;
        margin: 0;
        color: green;
      }
      .box {
        background-color: yellow;
        width: 200px;
        text-align: center;
        line-height: 60px;
        margin: 0px 10px;
      }
      .flex-start {
        display: flex;
        align-items: flex-start;
      }
      .flex-end {
        display: flex;
        align-items: flex-end;
      }
      .center {
        display: flex;
        align-items: center;
      }
      .baseline {
        display: flex;
        align-items: baseline;
      }
      .stretch {
        display: flex;
        align-items: stretch;
      }
    </style>
  </head>
  <body>
    <div class="parents">
      flex-start
      <div class="flex-start flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      flex-end
      <div class="flex-end flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      center
      <div class="center flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      baseline
      <div class="baseline flex-container">
        <div class="box" style="padding-top: 10px">1</div>
        <div class="box" style="height: 80px">2</div>
        <div class="box" style="font-size: 32px">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      stretch
      <div class="stretch flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
  </body>
</html>
align-items

4-6. align-content

flex container의 cross axisλ₯Ό κΈ°μ€€μœΌλ‘œ flex item을 수직 μ •λ ¬ν•œλ‹€. 참고둜 justify-content ν”„λ‘œνΌν‹°λŠ” flex container의 main aixsλ₯Ό κΈ°μ€€μœΌλ‘œ flex item을 μˆ˜ν‰ μ •λ ¬ν•œλ‹€.

즉, μ£ΌμΆ•μ—μ„œ 쀄 λ°”κΏˆμ΄ μƒκ²¨μ„œ flex item을 μ—¬λŸ¬ μ€„λ‘œ ν‘œμ‹œν•  λ•Œ align-content ν”„λ‘œνΌν‹°λ₯Ό 톡해 κ΅μ°¨μΆ•μ—μ„œ flex item의 간격을 μ§€μ •ν•  수 μžˆλ‹€.

μ•„λž˜λŠ” align-content의 ν”„λ‘œνΌν‹°κ°’κ³Ό μ„€λͺ…이닀.

μ’…λ₯˜
μ„€λͺ…

flex-start

κ΅μ°¨μΆ•μ˜ μ‹œμž‘μ μ—μ„œ 맞좰 λ°°μΉ˜ν•œλ‹€.

flex-end

κ΅μ°¨μΆ•μ˜ 끝점에 맞좰 λ°°μΉ˜ν•œλ‹€.

center

κ΅μ°¨μΆ•μ˜ 쀑앙에 맞좰 λ°°μΉ˜ν•œλ‹€.

space-between

첫 번째 ν•­λͺ©κ³Ό 끝 ν•­λͺ©μ„ κ΅μ°¨μΆ•μ˜ μ‹œμž‘μ κ³Ό 끝점에 λ§žμΆ”κ³  λ‚˜λ¨Έμ§€ ν•­λͺ©μ€ κ·Έ 사이에 같은 κ°„κ²©μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

space-around

λͺ¨λ“  ν•­λͺ©μ„ ꡐ차좕에 같은 κ°„κ²©μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

stretch

ν”Œλ ‰μŠ€ ν•­λͺ©μ„ λŠ˜λ €μ„œ ꡐ차좕에 가득 차게 λ°°μΉ˜ν•œλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        font-size: 20px;
        font-weight: 700;
      }
      .parents {
        margin-bottom: 10px;
        background-color: green;
        color: white;
      }
      .flex-container {
        min-height: 160px;
        border-top: 2px solid black;
        padding: 0;
        margin: 0;
        color: green;
      }
      .box {
        background-color: yellow;
        width: 200px;
        text-align: center;
        line-height: 60px;
        margin: 0px 10px;
      }
      .box:nth-child(1) {
        margin-bottom: 10px;
      }
      .box:nth-child(2) {
        margin-bottom: 10px;
      }
      .flex-start {
        display: flex;
        flex-wrap: wrap;
        align-content: flex-start;
      }
      .flex-end {
        display: flex;
        flex-wrap: wrap;
        align-content: flex-end;
      }
      .center {
        display: flex;
        flex-wrap: wrap;
        align-content: center;
      }
      .sapce-between {
        display: flex;
        flex-wrap: wrap;
        align-content: space-between;
      }
      .space-around {
        display: flex;
        flex-wrap: wrap;
        align-content: space-around;
      }
      .stretch {
        display: flex;
        flex-wrap: wrap;
        align-content: stretch;
      }
    </style>
  </head>
  <body>
    <div class="parents">
      flex-start
      <div class="flex-start flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      flex-end
      <div class="flex-end flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      center
      <div class="center flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      sapce-between
      <div class="sapce-between flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      space-around
      <div class="space-around flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
    <div class="parents">
      stretch
      <div class="stretch flex-container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
      </div>
    </div>
  </body>
</html>
align-content1
align-content2

5. Flexbox item 속성

5-1. order

flex item의 배치 μˆœμ„œλ₯Ό μ§€μ •ν•œλ‹€. HTML μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  order ν”„λ‘œνΌν‹°κ°’μ„ μ§€μ •ν•˜λŠ” κ²ƒμœΌλ‘œ κ°„λ‹¨νžˆ μž¬λ°°μΉ˜ν•  수 μžˆλ‹€. κΈ°λ³Έ 배치 μˆœμ„œλŠ” flex container에 μΆ”κ°€λœ μˆœμ„œμ΄λ‹€. 기본값은 0이닀.

μ‚¬μš©λ²• order: <μ •μˆ˜κ°’>

.flex-item {
  order: 2;
}

5-2. flex-grow

flex item의 λ„ˆλΉ„μ— λŒ€ν•œ ν™•λŒ€ 인자λ₯Ό μ§€μ •ν•œλ‹€. 기본값은 0이고 μŒμˆ˜κ°’μ€ λ¬΄νš¨ν•˜λ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      .flex-container {
        display: flex;
        justify-content: space-around;
      }
      .box {
        height: 120px;
        background-color: yellow;
      }
      .box:not(:last-child) {
        margin-right: 10px;
      }
      .box:not(:nth-child(2)) {
        flex-grow: 1;
      }
      .box:nth-child(2) {
        flex-grow: 3;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="box">1</div>
      <div class="box">2 / flex-grow: 3</div>
      <div class="box">3</div>
      <div class="box">4</div>
    </div>
  </body>
</html>
flex-grow

5-3. flex-shrink

flex item의 λ„ˆλΉ„μ— λŒ€ν•œ μΆ•μ†Œ 인자λ₯Ό μ§€μ •ν•œλ‹€. 기본값은 1이고 μŒμˆ˜κ°’μ€ λ¬΄νš¨ν•˜λ‹€. 0λ₯Ό μ§€μ •ν•˜λ©΄ μΆ•μ†Œκ°€ ν•΄μ œλ˜μ–΄ μ›λž˜μ˜ λ„ˆλΉ„λ₯Ό μœ μ§€ν•œλ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      .flex-container {
        display: flex;
        justify-content: space-around;
      }
      .box {
        width: 300px;
        height: 120px;
        background-color: yellow;
      }
      .box:not(:last-child) {
        margin-right: 10px;
      }
      .box:nth-child(2) {
        flex-shrink: 0;
      }
      .box:nth-child(3) {
        flex-shrink: 2;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="box">1</div>
      <div class="box">2 / flex-shrink: 0</div>
      <div class="box">3 / flex-shrink: 2</div>
      <div class="box">4</div>
    </div>
  </body>
</html>
flex-shrink

5-4. flex-basis

flex item의 λ„ˆλΉ„ 기본값을 px, % λ“±μ˜ λ‹¨μœ„λ‘œ μ§€μ •ν•œλ‹€. 기본값은 auto이닀.

<!DOCTYPE html>
<html>
  <head>
    <style>
      .flex-container {
        display: flex;
        justify-content: space-around;
      }
      .box {
        width: 100px;
        height: 120px;
        background-color: yellow;
      }
      .box:not(:last-child) {
        margin-right: 10px;
      }
      .box:nth-child(2) {
        flex-basis: 500px;
      }
      .box:nth-child(3) {
        flex-basis: 50%;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="box">1 / flex-basis: auto => 100px</div>
      <div class="box">2 / flex-basis: 500px</div>
      <div class="box">3 / flex-basis: 50%</div>
      <div class="box">4 / flex-basis: auto => 100px</div>
    </div>
  </body>
</html>
flex-basis

5-5. flex

flex-grow, flex-shrink, flex-basis ν”„λ‘œνΌν‹°μ˜ shorthand이닀. 기본값은 0 1 auto이닀.

W3Cμ—μ„œλŠ” 이 ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•˜λŠ” 것 보닀 κ°œλ³„μ μœΌλ‘œ κΈ°μˆ ν•˜λŠ” 것을 μΆ”μ²œν•˜κ³  μžˆλ‹€.


5-6. align-self

align-item 속성은 ꡐ차좕을 κΈ°μ€€μœΌλ‘œ ν”Œλ ‰μŠ€ ν•­λͺ©μ˜ μ •λ ¬ 방법을 κ²°μ •ν•˜μ§€λ§Œ κ·Έμ€‘μ—μ„œ νŠΉμ • ν•­λͺ©λ§Œ μ§€μ •ν•˜κ³  μ‹Άλ‹€λ©΄ align-self 속성을 μ‚¬μš©ν•œλ‹€. align-item ν”„λ‘œνΌν‹°λ³΄λ‹€ μš°μ„ ν•˜μ—¬ κ°œλ³„ flex item을 μ •λ ¬ν•œλ‹€.

align-self ν”„λ‘œνΌν‹°μ—μ„œ μ‚¬μš©ν•œ 값은 align-items ν”„λ‘œνΌν‹°μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°’κ³Ό κ°™λ‹€.

<!DOCTYPE html>
<html>
  <head>
    <style>
      .flex-container {
        display: flex;
        justify-content: space-around;
        height: 600px;
        background-color: aliceblue;
      }
      .box {
        width: 100px;
        padding: 60px;
        background-color: yellow;
      }
      .box:not(:last-child) {
        margin-right: 10px;
      }
      .box:nth-child(1) {
        align-self: flex-start;
      }
      .box:nth-child(2) {
        align-self: flex-end;
      }
      .box:nth-child(3) {
        align-self: center;
      }
      .box:nth-child(4) {
        align-self: stretch;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="box">1 / align-self: flex-start</div>
      <div class="box">2 / align-self: flex-end</div>
      <div class="box">3 / align-self: center</div>
      <div class="box">4 / align-self: stretch</div>
    </div>
  </body>
</html>
align-self

6. Conclusion

flex-growλŠ” 처음 μ¨λ³΄λŠ” ν”„λ‘œνΌν‹°μ΄λ‹€. ꡉμž₯히 μ‹ κΈ°ν–ˆλ‹€. μœ„μ˜ μ½”λ“œλ₯Ό 예λ₯Όλ“€μ–΄ box 클래슀λ₯Ό κ°€μ§„ divλ“€μ˜ λ„ˆλΉ„λ₯Ό 100%둜 μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ flex-growλ₯Ό 1둜 μ§€μ •ν•˜λ©΄ 전체 λ„ˆλΉ„λ₯Ό λͺ¨λ‘ λ™λ“±ν•˜κ²Œ μ°¨μ§€ν•˜κ²Œ λœλ‹€. 기본값은 0 μ΄λ―€λ‘œ λ”± μžμ‹ μ˜ μš”μ†Œλ§ŒνΌλ§Œ λ„ˆλΉ„λ₯Ό μ°¨μ§€ν•˜λŠ” 것 κ°™λ‹€. 뿐만 μ•„λ‹ˆλΌ flex-shrinkκ³Ό flex-basis도 이번 곡뢀λ₯Ό ν•˜λ©΄μ„œ 처음 μ¨λ³΄λŠ” ν”„λ‘œνΌν‹°μ˜€λ‹€. flexλŠ” gridλ₯Ό 배우기 μ „κΉŒμ§€ 자주 μ‚¬μš©ν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ gridλ₯Ό 배우고 λ‚˜μ„œλŠ” μ‚¬μš©λΉˆλ„κ°€ 많이 μ€„μ—ˆλ‹€. 두 개의 ν”„λ‘œνΌν‹° λͺ¨λ‘ CSSμ—μ„œ μ€‘μš”ν•œ λ‚΄μš©μ΄λ‹ˆ ν•„μš”ν•œ 상황에 맞좰 잘 μ‚¬μš©ν•˜λ„λ‘ ν•˜μž.


μ°Έκ³ 

poiemaweb 2-20 ν”Œλ ‰μŠ€ λ°•μŠ€ λ ˆμ΄μ•„μ›ƒ λ„μ„œ - HTML + CSS + μžλ°”μŠ€ν¬λ¦½νŠΈ μ›Ή ν‘œμ€€μ˜ 정석


πŸ‘†

πŸ“… 2022-07-24

Last updated