🦁_21.11.08 TIL

BoriΒ·2021λ…„ 11μ›” 8일
1
post-thumbnail

21λ…„ 11μ›” 08일

πŸ“ CSS

πŸ“Ž Flex

align-items

  • justify-content와 μˆ˜μ§μΆ• λ°©ν–₯ μ •λ ¬
  .container {
    display: flex;
    align-items: stretch;
    /* align-items: flex-start; */
    /* align-items: flex-end; */
    /* align-items: center; */
    /* align-items: baseline; */
  } 
stretchκΈ°λ³Έκ°’, μ•„μ΄ν…œλ“€μ΄ μˆ˜μ§μΆ• λ°©ν–₯을 λκΉŒμ§€ 쭈욱 λŠ˜μ–΄λ‚¨
flex-startμ•„μ΄ν…œμ„ μ‹œμž‘μ μ„ μ •λ ¬
flex-direction이 row(κ°€λ‘œ 배치)일 λ•ŒλŠ” μœ„, column(μ„Έλ‘œ 배치)일 λ•ŒλŠ” μ™Όμͺ½
flex-endμ•„μ΄ν…œμ„ 끝점을 μ •λ ¬
flex-direction이 row(κ°€λ‘œ 배치)일 λ•ŒλŠ” μ•„λž˜, column(μ„Έλ‘œ 배치)일 λ•ŒλŠ” 였λ₯Έμͺ½
centerμ•„μ΄ν…œμ„ κ°€μš΄λ°λ‘œ μ •λ ¬
baselineμ•„μ΄ν…œλ“€μ„ ν…μŠ€νŠΈ 베이슀라인 κΈ°μ€€μœΌλ‘œ μ •λ ¬

align-content

  • flex-wrap: wrap이 μ„€μ •λœ μƒνƒœμ—μ„œ μ•„μ΄ν…œλ“€μ˜ 행이 2쀄 이상일 경우, μˆ˜μ§μΆ• λ°©ν–₯ μ •λ ¬
    => μˆ˜μ§μΆ• λ°©ν–₯의 justify-content
  .container {
    display: flex;
    align-items: stretch;
    /* align-contetn: flex-start; */
    /* align-contetn: flex-end; */
    /* align-contetn: center; */
    /* align-contetn: space-between; */
    /* align-contetn: space-around; */
    /* align-contetn: space-evenly; */
  } 

align-self

  • align-items의 μ•„μ΄ν…œ 버전
  • align-itemsκ°€ 전체 μ•„μ΄μ³„μ˜ μˆ˜μ§μΆ• λ°©ν–₯ 정렬이라면, align-selfλŠ” ν•΄λ‹Ή μ•„μ΄ν…œμ˜ μˆ˜μ§μΆ• μ •λ ¬
  • align-selfλŠ” align-items보닀 μš°μ„  μˆœμœ„κ°€ λ†’λ‹€.
  .item {
  align-self: auto;
  /* align-self: stretch; */
  /* align-self: flex-start; */
  /* align-self: flex-end; */
  /* align-self: center; */
  /* align-self: baseline; */
  } 
autoκΈ°λ³Έκ°’, align-items 섀정을 상속 λ°›μŒ

flex-wrap

  • μ€„λ„˜κΉ€ 처리 μ„€μ •
  • μ»¨ν…Œμ΄λ„ˆκ°€ 더이상 μ•„μ΄ν…œλ“€μ„ ν•œ 쀄에 담을 μ—¬μœ  곡간이 없을 λ•Œ, μ•„μ΄ν…œ μ€„λ°”κΏˆμ„ μ–΄λ–»κ²Œ ν•  지 κ²°μ •ν•˜λŠ” 속성
  .container {
    display: flex;
    flex-wrap: nowrap;
    /* flex-wrap: wrap; */
    /* flex-wrap: wrap-reverse; */
  } 
nowrapκΈ°λ³Έκ°’, μ€„λ°”κΏˆμ„ ν•˜μ§€ μ•ŠμŒ
λ„˜μΉ˜λ©΄ 삐져 λ‚˜κ°„λ‹€.
wrapμ€„λ°”κΏˆμ„ ν•œλ‹€.
float μ΄λ‚˜ inline-bloxk으둜 λ°°μΉ˜ν•œ μš”μ†Œλ“€κ³Ό λΉ„μŠ·ν•˜κ²Œ λ™μž‘
wrap-reverseμ€„λ°”κΏˆμ„ ν•˜λŠ”λ°, μ•„μ΄ν…œμ„ μ—­μˆœ 배치

flex-flow

  • flex-directionκ³Ό flex-wrap을 ν•œκΊΌλ²ˆμ— 지정할 수 μžˆλŠ” 단좕 속성
  .container {
    display: flex;
    flex-flow: row wrap;
    /* flex-direction: row; */
    /* flex-wrap: wrap; */
  } 

flex-basis

  • flex-item의 κΈ°λ³Έ 크기 μ„€μ •
    flex-direction: row일 λ•ŒλŠ” λ„ˆλΉ„, flex-direction: column일 λ•ŒλŠ” 높이 μ„€μ •
  • μ—¬λŸ¬ λ‹¨μœ„μ˜ 값듀을 μ μš©ν•  수 μžˆλ‹€.
  .item {
    flex-basis: auto;
    /* flex-basis: 0; */
    /* flex-basis: 50%; */
    /* flex-basis: 300px; */
    /* flex-basis: 10rem; */
    /* flex-basis: content; */    
  } 
autoκΈ°λ³Έκ°’, ν•΄λ‹Ή μ•„μ΄ν…œμ˜ width κ°’ μ‚¬μš©
widthλ₯Ό μ„€μ •ν•˜μ§€ μ•Šμ•˜μ„ 경우 μ½˜ν…μΈ μ˜ 크기
contentμ½˜ν…μΈ μ˜ 크기
widthλ₯Ό μ„€μ •ν•˜μ§€ μ•Šμ€ 것과 κ°™μŒ

flex-grow

  • μ•„μ΄ν…œμ΄ flex-basis의 값보닀 컀질 수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” 속성

flex-shrink

  • flex-grow와 쌍으둜 μ΄λ£¨λŠ” 속성, μ•„μ΄ν…œμ΄ flex-basis의 값보닀 μž‘μ•„μ§ˆ 수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” 속성

flex

  • flex-grow, flex-shrink, flex-basisλ₯Ό ν•œ λ²ˆμ— μ“Έ 수 μžˆλŠ” μΆ•μ•½ν˜• 속성
    => 이 μ„Έ 속성듀은 μ„œλ‘œ 관련이 κΉŠμ–΄ μΆ•μ•½ν˜•μœΌλ‘œ μ“°λŠ” 것이 편리
  .item {
  flex: 1;
  /* flex-grow: 1; flex-shrink: 1; flex-basis: 0; */
  flex: 1 1 auto;
  /* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
  flex: 1 500px;
  /* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */ 
  } 
  • μ£Όμ˜ν•  점
    flex-basisλ₯Ό μƒλž΅ν•΄μ„œ μ‚¬μš©ν•˜λ©΄, flex-basis의 값은 0이 λœλ‹€.
    예) flex: 1;

order

  • 각 μ•„μ΄ν…œλ“€μ˜ μ‹œκ°μ  λ‚˜μ—΄ μˆœμ„œλ₯Ό κ²°μ •ν•˜λŠ” 속성
    => μ‹œκ°μ  μˆœμ„œμΌ 뿐, HTML 자체의 ꡬ쑰λ₯Ό λ°”κΎΈλŠ” 것이 μ•„λ‹ˆλ―€λ‘œ μ ‘κ·Όμ„± μΈ‘λ©΄μ—μ„œ μ£Όμ˜ν•΄μ„œ μ‚¬μš©
  • μˆ«μžκ°’μ΄ λ“€μ–΄κ°€λ©°, μˆ«μžκ°€ μž‘μ„μˆ˜λ‘ λ¨Όμ € 배치(μŒμˆ˜λ„ κ°€λŠ₯)
  .item:nth-child(1) { order: 3; }
  .item:nth-child(2) { order: 1; }
  .item:nth-child(3) { order: 2; }

flex μ‹€μŠ΅ - 둜그인 λ ˆμ΄μ•„μ›ƒ λ§Œλ“€κΈ°

  • 이 전에 float을 μ΄μš©ν•΄μ„œ λ§Œλ“  λ ˆμ΄μ•„μ›ƒμ„ flexλ₯Ό μ΄μš©ν•΄ λ§Œλ“€κΈ°

πŸ“Ž Grid

  • flex vs grid?
    => flex : ν•œ λ°©ν–₯ λ ˆμ΄μ•„μ›ƒ μ‹œμŠ€ν…œ(1차원)
    => grid : 두 λ°©ν–₯(κ°€λ‘œ-μ„Έλ‘œ) λ ˆμ΄μ•„μ›ƒ μ‹œμŠ€ν…œ(2차원)
  <div class="container">
    <div class="item">A</div>
    <div class="item">B</div>
    <div class="item">C</div>
    <div class="item">D</div>
    <div class="item">E</div>
    <div class="item">F</div>
    <div class="item">G</div>
    <div class="item">H</div>
    <div class="item">I</div>
  </div>
  • λΆ€λͺ¨ μš”μ†ŒμΈ div.containerλ₯Ό grid-container, μžμ‹ μš”μ†ŒμΈ div.item을 grid-item이라고 λΆ€λ₯Έλ‹€.
    => μ»¨ν…Œμ΄λ„ˆκ°€ grid의 영ν–₯을 λ°›λŠ” 전체 곡간, μ„€μ •λœ 속성에 따라 각각의 μ•„μ΄ν…œλ“€μ΄ μ–΄λ–€ ν˜•νƒœλ‘œ λ°°μΉ˜λ˜λŠ” 것
  .container {
    display: grid;
    /* display: inline-grid; */
  }    

μš©μ–΄ 정리

[좜처: 1λΆ„ μ½”λ”©]

grid containergrid의 전체 μ˜μ—­
grid container μ•ˆμ˜ μš”μ†Œλ“€(=grid item)이 grid κ·œμΉ™μ˜ 영ν–₯을 λ°›μ•„ μ •λ ¬
grid itemgrid container의 μžμ‹ μš”μ†Œ
grid trackgrid의 ν–‰(row) λ˜λŠ” μ—΄(column)
grid cellgrid의 ν•œ μΉΈ
grid linegrid cell 을 κ΅¬λΆ„ν•˜λŠ” μ„ 
grid numbergrid line 의 각 번호
grid gapgrid cell μ‚¬μ΄μ˜ 간격
grid areagrid line으둜 λ‘˜λŸ¬μ‹ΈμΈ μ‚¬κ°ν˜• μ˜μ—­, grid cell의 집합

grid-template-columns / grid-template-rows

  • μ»¨ν…Œμ΄λ„ˆμ— grid track의 크기듀을 μ§€μ •ν•΄μ£ΌλŠ” 속성
  • grid-template-columns : μ—΄μ˜ 배치, μ—΄μ˜ 넓이 μ„€μ •
  • grid-template-rows : ν–‰μ˜ 배치, ν–‰μ˜ 높이 μ„€μ •
  .container {
  grid-template-columns: 200px 200px 500px;
  /* grid-template-columns: 1fr 1fr 1fr */
  /* grid-template-columns: repeat(3, 1fr) */
  /* grid-template-columns: 200px 1fr */
  /* grid-template-columns: 100px 200px auto */

  grid-template-rows: 200px 200px 500px;
  /* grid-template-rows: 1fr 1fr 1fr */
  /* grid-template-rows: repeat(3, 1fr) */
  /* grid-template-rows: 200px 1fr */
  /* grid-template-rows: 100px 200px auto */
  }    
  • fr(fraction) : 숫자 λΉ„μœ¨λŒ€λ‘œ νŠΈλž™μ˜ 크기λ₯Ό λ‚˜λˆ„λŠ” λ‹¨μœ„
    • 1fr 1fr 1fr = κ· μΌν•˜κ²Œ 1:1:1 λΉ„μœ¨μΈ 3개의 column을 λ§Œλ“¦

  • repeatν•¨μˆ˜ : repeat(반볡횟수, λ°˜λ³΅κ°’)
    • 1fr 1fr 1fr = repeat(3, 1fr)

row-gap / column-gap / gap

  • κ·Έλ¦¬λ“œ μ…€ μ‚¬μ΄μ˜ 간격 μ„€μ •
  .container {
    row-gap: 10px;
    /* row의 간격을 10px둜 */
    column-gap: 20px;
    /* column의 간격을 20px둜 */
    
    gap: 10px 20px;
    /* row-gap: 10px; colum-gap: 20px; */
  }

각 μ…€μ˜ μ˜μ—­ 지정

  • grid-column-start : column μ‹œμž‘ 번호
  • grid-column-end : column 끝 번호
  • grid-column : μœ„μ˜ 두 속성 μΆ•μ•½ν˜•
  • grid-row-start : row μ‹œμž‘ 번호
  • grid-row-end : row 끝 번호
  • grid-row: μœ„μ˜ 두 속성 μΆ•μ•½ν˜•

[좜처: 1λΆ„ μ½”λ”©]

  .item:nth-child(1) {
    grid-column-start: 1;
    grid-column-end: 3;
    grid-row-start: 1;
    grid-row-end: 2;
  }
  
 /* μœ„μ™€ λ™μΌν•œ μ½”λ“œ */
 .item:nth-child(1) {
    grid-column: 1 / 3;
    grid-row: 1 / 2;
  }
  
 /* μœ„μ™€ λ™μΌν•œ μ½”λ“œ */
 /* span: λͺ‡ 개의 셀을 차지할 것 인지 지정 */
 .item:nth-child(1) {
    grid-column: 1 / span 2;
    grid-row: 1 / span 1;
  }  

μ‹€μŠ΅

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>grid - μ‹€μŠ΅</title>
    <link rel="stylesheet" href="reset.css" />
    <style>
      body {
        display: flex;
        align-items: center;
        justify-content: center;
        min-height: 100vh;
      }
      .container {
        display: grid;
        grid-template-columns: repeat(5, 100px);
        grid-template-rows: repeat(5, 100px);
        gap: 10px;
      }

      .item img {
        width: 100%;
        height: 100%;
        object-fit: cover;
      }

      .item1 {
        grid-column: 1 / 4;
        grid-row: 1 / 3;
      }

      .item2 {
        grid-column: 4 / 6;
        grid-row: 1 / 4;
      }

      .item3 {
        grid-column: 1 / 3;
      }

      .item5 {
        grid-column: 1 / 3;
        grid-row: 4 / 6;
      }

      .item6 {
        grid-column: 3 / 6;
        grid-row: 4 / 6;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="item item1"><img src="img_grid/1.jpg" alt="" /></div>
      <div class="item item2"><img src="img_grid/6.jpg" alt="" /></div>
      <div class="item item3"><img src="img_grid/2.jpg" alt="" /></div>
      <div class="item item4"><img src="img_grid/5.webp" alt="" /></div>
      <div class="item item5"><img src="img_grid/3.webp" alt="" /></div>
      <div class="item item6"><img src="img_grid/4.jpg" alt="" /></div>
    </div>
  </body>
</html>


πŸ“ ν”„λ‘ νŠΈμ—”λ“œ 개발자둜 μ„±μž₯ν•˜κΈ° μŠ€ν”„λ¦°νŠΈ_1 with μž„λ™μ€€λ‹˜

  • 체크인 : ν˜„μž¬ μ»¨λ””μ…˜μ„ 1~10점 μ‚¬μ΄μ˜ 점수둜 ν‘œν˜„, 이유 μž‘μ„±
  • 였늘 κΈ°λŒ€ν•˜λŠ” λΆ€λΆ„?
  • μ•‘μ…˜ν”Œλžœ 점검 : κ³„νšν–ˆλ˜ μ•‘μ…˜ν”Œλžœμ΄ 잘 μ§„ν–‰λ˜μ—ˆλŠ”μ§€? 잘 λ˜μ—ˆλ‹€λ©΄ μ–΄λ–»κ²Œ μ§„ν–‰ν–ˆλŠ”μ§€, 잘 μ•ˆλ˜μ—ˆμ•„λ©΄ μ–΄λ–€ 뢀뢄이 μ–΄λ €μ› λŠ”μ§€ μž‘μ„±
  • κ°€μž₯ κ°œμ„ ν•˜κ³  싢은 μ•‘μ…˜ν”Œλžœμ„ 선택 ν›„ λ‚΄κ°€ μƒκ°ν•˜λŠ” κ°œμ„  λ°©μ•ˆ 적기
  • νŒ€μ›λ“€μ˜ ν”Όλ“œλ°±μ„ λ°›μ•„ λ‹€μŒ μŠ€ν”„λ¦°νŠΈκΉŒμ§€ 달성할 수 μžˆλ„λ‘ μ•‘μ…˜ν”Œλžœ κ°œμ„ ν•΄λ³΄κΈ°
    => 개인적인 μ•‘μ…˜κ³Ό 그룹을 μœ„ν•œ μ•‘μ…˜ 1가지 이상 μž‘μ„±ν•˜κΈ°
  • λ‹€μŒ μŠ€ν”„λ¦°νŠΈλ₯Ό μœ„ν•΄ 2μ£Όμ°¨ μ•‘μ…˜ν”Œλžœ μž‘μ„± : ν”Œλžœμ„ 더 μ„ΈλΆ€μ μœΌλ‘œ μͺΌκ°œκΈ°
  • νšŒκ³ μ— λŒ€ν•œ 회고 : 였늘 νšŒκ³ μ— λŒ€ν•œ 생각
  • 체크아웃 : ν˜„μž¬ μ»¨λ””μ…˜μ„ 1~10점 μ‚¬μ΄μ˜ 점수둜 ν‘œν˜„, 이유 μž‘μ„±

마무리

  • 였늘의 일정
09:00 - 12:00μ˜€μ „ μˆ˜μ—…
12:00 - 13:00점심 식사
13:00 - 18:00μ˜€ν›„ μˆ˜μ—…
18:00 - 19:00저녁 식사
19:00 - 21:00μŠ€ν”„λ¦°νŠΈ 회고!
  • μŠ€ν”„λ¦°νŠΈ 회고 ν•  λ•Œ 쑸지 μ•Šμ„κΉŒ μ‹Άμ—ˆλŠ”λ° κ½€ λ©€μ©‘ν–ˆλ‹€. κ·Έ 전에 미리 μ‘Έμ•„μ„œ κ·ΈλŸ°κ°€λ³΄λ‹€ν•˜ν•˜ν•˜
  • 아직도 κ³„νš μ„Έμš°κ³  μž‘μ„±ν•˜κΈ°λŠ” μ–΄λ ΅μ§€λ§Œ μ²˜μŒλ³΄λ‹€λŠ” λ‚˜μ•„μ§€λŠ” 것 같은데...?!
  • 배우고 μ‹Άμ—ˆλ˜ grid! 막상 μ‹€μŠ΅ν•΄λ³΄λ©΄ 생각보닀 어렡지 μ•Šκ²Œ ν•˜λŠ”λ° κΈ€λ‘œ 적힌 μ„€λͺ…λ§Œ 보면 눈 μ•žμ΄ κΉœκΉœν•΄μ§„λ‹€.
    => μ„€λͺ…이 이해가 μ•ˆλ˜λ©΄ 예제λ₯Ό μž‘μ„±ν•΄λ³΄μž
  • ν…Œμ΄λΈ” λ§ˆν¬λ‹€μš΄μ— μ™œ ν…μŠ€νŠΈ κ°€μš΄λ° 정렬이 μ•ˆλ˜μ§€? μ™œ?! μ™œλƒκ³ !!

0개의 λŒ“κΈ€