Frontend/HTML & CSS

Understanding CSS Flexbox

ej503 2023. 4. 29. 20:20

I'm happy to study CSS Flexbox πŸ’« 

Today's blog, I will test various properties related to flexbox.

 

 

What is Flexbox?


  • ν”Œλ ‰μŠ€ λ°•μŠ€λŠ” ν–‰ λ˜λŠ” 열을 μ£ΌμΆ•μœΌλ‘œ μ„€μ •ν•΄ μš”μ†Œλ₯Ό 배치 및 μ •λ ¬ν•˜λŠ” 1차원 λ ˆμ΄μ•„μ›ƒ λ°©μ‹μž…λ‹ˆλ‹€. 
  • μš”μ†Œμ˜ λ°°μΉ˜μ™€ 정렬은 ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆμ™€ ν”Œλ ‰μŠ€ μ•„μ΄ν…œκ°„μ˜ μƒν˜Έμž‘μš©μ„ 톡해 κ²°μ •λ©λ‹ˆλ‹€.
  • ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆλž€? ν”Œλ ‰μŠ€λ°•μŠ€ λ°©μ‹μœΌλ‘œ λ ˆμ΄μ•„μ›ƒμ„ κ²°μ •ν•  μš”μ†Œμ΄κ³  ν”Œλ ‰μŠ€ μ•„μ΄ν…œμ΄λž€? ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ ν”Œλ ‰μŠ€λ°•μŠ€ λ°©μ‹μœΌλ‘œ λ°°μΉ˜λ˜λŠ” μš”μ†Œμž…λ‹ˆλ‹€.

 

μ΄λ•Œ ν”Œλ ‰μŠ€ λ°•μŠ€λŠ” 두 개의 좕을 μ œκ³΅ν•˜λŠ”λ°μš”. κ·Έ 쀑 ν•˜λ‚˜μ˜ 좕을 μ£ΌμΆ•μœΌλ‘œ ν•΄ μš”μ†Œλ₯Ό λ°°μΉ˜ν•˜κ²Œ 되며 κΈ°λ³Έ 값은 κ°€λ‘œ λ°©ν–₯ (μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½)μž…λ‹ˆλ‹€.

 

ul μš°μΈ‘μ— flex λΌλŠ” ν‘œμ‹œκ°€ 생긴 κ±Έ 확인 ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ ul은 flex containerκ°€ 되며 liλŠ” flex item μž…λ‹ˆλ‹€. flex item은 flex container의 주좕을 따라 일렬둜 정렬이 λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

flex-direction, flex-wrap, flex-flow 


*{
    box-sizing: border-box;
}
body{
    margin: 0;
}

ul{
    display: inline-flex;
    padding: 0;
    list-style-type: none;
    height: 200px;

    flex-direction: row;
    flex-wrap: nowrap;
    // flex flow: row-reverse wrap;
}

flex-directionλŠ” ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆμ˜ 주좕을 κ²°μ •ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€. 행은 κ°€λ‘œμΆ•, 열은 μ„Έλ‘œμΆ•μ„ μ£ΌμΆ•μœΌλ‘œ ν•˜μ£ . 속성값 (row, row-reverse, column, column-reverse)λ₯Ό λ³€κ²½ν•˜λ©° μ£ΌμΆ•κ³Ό λ°©ν–₯을 손볼 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

flex-wrap은 μ•„μ΄ν…œλ“€μ΄ ν•œμ€„μ— λ°°μΉ˜λ˜λ„λ‘ ν•  것인지, λ˜λŠ” μ—¬λŸ¬ ν–‰μœΌλ‘œ λ‚˜λˆ  ν‘œν˜„ν•  것인지 κ²°μ •ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€. 

  • nowrap: ν•œ 쀄 배치
  • wrap: μ—¬λŸ¬ 행에 걸쳐 배치

flex-flowλŠ” flex-directionκ³Ό flex-wrap을 λ™μ‹œμ— μ‚¬μš©ν•  수 μžˆλŠ” μ†μ„±μž…λ‹ˆλ‹€.

 

 

justify-content


jusfify-contentλŠ” ν”Œλ ‰μŠ€ μ•„μ΄ν…œλ“€μ΄ ν”Œλ ‰μŠ€ λ°•μŠ€μ˜ 주좕을 따라 배치될 λ•Œ, μš”μ†Œ μ‚¬μ΄μ˜ 곡간을 λΆ„λ°°ν•˜λŠ” 방식을 κ²°μ •ν•©λ‹ˆλ‹€.

justify-content: space-around;

 

space-aroundλŠ” λͺ¨λ“  μš”μ†Œκ°€ λ™μΌν•œ 여백을 갖도둝 λ°°μΉ˜ν•©λ‹ˆλ‹€.

justify-content: space-between;

space-between은 μ£ΌμΆ•μ—μ„œ μΌμ •ν•œ 간격을 λ‘” 채 양끝 μ •λ ¬ λ°°μΉ˜ν•©λ‹ˆλ‹€.

justify-content: space-evenly

space-evenlyλŠ” λͺ¨λ“  μš”μ†Œ μ‚¬μ΄μ˜ 간격을 λ™μΌν•˜κ²Œ μœ μ§€ν•΄ λ°°μΉ˜ν•©λ‹ˆλ‹€.

 

 

align-items, align-self, align-content


align-itemsλŠ” ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆμ˜ ꡐ차좕 μœ„μ—μ„œ ν”Œλ ‰μŠ€ μ•„μ΄ν…œλ“€μ΄ μ–΄λ–€ μ‹μœΌλ‘œ 정렬될 것인지λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.

 

align-items: flex-start;

 

ul{
    display: flex;
    padding: 0;
    list-style-type: none;
    height: 200px;
    
    border: 5px solid green;
    align-items: center;
}

li:nth-child(3){
    align-self: flex-start;
}

 

ul은 align-items: center둜 μ„€μ •ν•˜κ³  3번째 μš”μ†Œμ—λ§Œ flex-start둜 μ„€μ •ν•˜λ©΄... Orange만 μœ„μͺ½μœΌλ‘œ μ˜¬λΌκ°„ λͺ¨μŠ΅λ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

flex-grow, flex-shrink


flex-growλŠ” ν”Œλ ‰μŠ€ μ•„μ΄ν…œμ΄ κΈ°λ³Έ 크기보닀 더 컀질 수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•˜κ³ , ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ 할당받을 수 μžˆλŠ” 곡간을 μƒλŒ€μ μœΌλ‘œ μ •μ˜ν•  수 μžˆλŠ” μ†μ„±μž…λ‹ˆλ‹€.

 

flex-shrinkλŠ” ν”Œλ ‰μŠ€ μ•„μ΄ν…œμ΄ κΈ°λ³Έ 크기λͺ¨λ‹€ 더 μž‘μ•„μ§ˆ 수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•˜κ³ , ν”Œλ ‰μŠ€ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ 할당받을 수 μžˆλŠ” 곡간을 μƒλŒ€μ μœΌλ‘œ μ •μ˜ν•  수 μžˆλŠ” μ†μ„±μž…λ‹ˆλ‹€.

 

flex-grow: 1;

 

order


ν”Œλ ‰μŠ€ μ•„μ΄ν…œμ˜ 배치 μˆœμ„œλ₯Ό μ„€μ •ν•  수 있으며 μ§€μ •ν•œ μˆ«μžμ— 맞좰 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°°μΉ˜κ°€ λœλ‹€. μ΄λŠ” μ½”λ“œμ— 영ν–₯을 λΌμΉ˜λŠ” 것이 μ•„λ‹Œ λ³΄μ—¬μ§€λŠ” μˆœμ„œμ—λ§Œ 영ν–₯을 μ€λ‹ˆλ‹€.

li:nth-child(1){
    order: 5;
}
li:nth-child(2){
    order: 4;
}
li:nth-child(3){
    order: 3;
}
li:nth-child(4){
    order: 2;
}
li:nth-child(5){
    order: 1;
}

 

Hope you'll enjoy playing with flexbox! 😁