[CSS] Flexbox

YuhalloΒ·2022λ…„ 12μ›” 23일

CSS

λͺ©λ‘ 보기
5/5
post-thumbnail

🧑 HTML/CSS ν™œμš©

πŸ’š λ ˆμ΄μ•„μ›ƒ

각 μš”μ†Œλ₯Ό λͺ©μ μ— 맞게 λ°°μΉ˜ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

normal flow

  • λΈŒλΌμš°μ €λŠ” 기본적으둜 μ†ŒμŠ€μ½”λ“œ μˆœμ„œλŒ€λ‘œ HTML에 ν‘œμ‹œλ©λ‹ˆλ‹€. μš”μ†Œκ°€ μƒλŒ€μš”μ†Œ λ°”λ‘œ μ•„λž˜ λ‚˜νƒ€λ‚˜λŠ” 것을 blockμš”μ†ŒλΌκ³  ν•©λ‹ˆλ‹€.

CSSλ₯Ό μ‚¬μš©ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€ 경우 μ΄λŸ¬ν•œ normal flowμ—μ„œ λ²—μ–΄λ‚˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹€μˆ˜μ˜ μš”μ†ŒλŠ” λ³΄ν†΅μ˜ νλ¦„λŒ€λ‘œ λ§Œλ“€μ–΄μ§€λ―€λ‘œ 잘 κ΅¬μ‘°ν™”λœ HTMLλ¬Έμ„œλ₯Ό λ§Œλ“œλŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

와이어 ν”„λ ˆμž„

  • λ ˆμ΄μ•„μ›ƒμ˜ λΌˆλŒ€λ₯Ό κ·Έλ¦¬λŠ” 단계λ₯Ό λ§ν•©λ‹ˆλ‹€. 'μ™€μ΄μ–΄λ‘œ μ„€κ³„λœ λͺ¨μ–‘'μ΄λΌλŠ” 의미λ₯Ό κ°€μ§€λ©°, λ‹¨μˆœν•œ μ„ μ΄λ‚˜ λ„ν˜•μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹œκ°μ μœΌλ‘œ λ¬˜μ‚¬ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • μ•„μ£Ό λ‹¨μˆœν•œ λ ˆμ΄μ•„μ›ƒκ³Ό ꡬ쑰λ₯Ό λ³΄μ—¬μ£ΌλŠ” μš©λ„μž…λ‹ˆλ‹€. μ „ν™˜νš¨κ³Όλ‚˜ μ• λ‹ˆλ§€μ΄μ…˜, μŠ€νƒ€μΌλ§ μš”μ†Œλ‚˜ UXλ₯Ό νŒλ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • 와이어 ν”„λ ˆμž„μ˜ κ°€μž₯ 큰 λͺ©μ μ€ ν™”λ©΄μ˜ μ˜μ—­μ„ ꡬ뢄 ν•˜λŠ” μΌμž…λ‹ˆλ‹€. 각 μ˜μ—­μ—μ„œ μ‚¬μš©ν•  μ£Όμš” νƒœκ·Έλ₯Ό λ©”λͺ¨ν•˜λŠ” ν˜•μ‹μœΌλ‘œ 와이어 ν”„λ ˆμž„μ„ μž‘μ„±ν•©λ‹ˆλ‹€.

λͺ©μ—…

  • μ›Ή λ˜λŠ” μ•±μ˜ λͺ©μ—…은 μž‘λ™ν•˜λŠ” λͺ¨μŠ΅κ³Ό λ™μΌν•˜κ²Œ HTML λ¬Έμ„œ 내에 ν•˜λ“œμ½”λ”©ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν•©λ‹ˆλ‹€.

    πŸŽ€ ν•˜λ“œμ½”λ”©μ΄λž€?
    λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , λ‚΄μš©μ„ μ†ŒμŠ€μ½”λ“œμ— λͺ¨λ‘ ν•˜λ‚˜ν•˜λ‚˜ μž…λ ₯ν•˜μ—¬ 좜λ ₯ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

  • 와이어 ν”„λ ˆμž„κ³Ό λͺ©μ—…을 μž‘μ„±ν•˜λŠ” 단계λ₯Ό μ§„ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ 섀계도 없이 건물을 μ§“λŠ” 것과 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.


πŸ’š 화면을 λ‚˜λˆ„λŠ” 방법

HTML κ΅¬μ„±ν•˜κΈ°

  • CSS둜 화면을 ꡬ뢄할 λ•ŒλŠ” μˆ˜μ§λΆ„ν• κ³Ό μˆ˜ν‰λΆ„ν• μ„ μ°¨λ‘€λ‘œ μ μš©ν•˜μ—¬ μ½˜ν…μΈ μ˜ 흐름(쒌 β†’ 우, 상 β†’ ν•˜ 의 흐름)을 따라 μž‘μ—…μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

  • μˆ˜μ§λΆ„ν•  : 화면을 수직으둜 κ΅¬λΆ„ν•˜μ—¬ μ½˜ν…μΈ λ₯Ό κ°€λ‘œλ‘œ λ°°μΉ˜ν•©λ‹ˆλ‹€.

  • μˆ˜ν‰λΆ„ν•  : λΆ„ν• λœ 각 μš”μ†Œλ₯Ό μˆ˜ν‰μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ„Έλ‘œλ‘œ λ°°μΉ˜ν•©λ‹ˆλ‹€.

  • μˆ˜ν‰μœΌλ‘œ κ΅¬λΆ„λœ μš”μ†Œμ— height속성을 μΆ”κ°€ν•˜λ©΄ μ§κ΄€μ μœΌλ‘œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 'Atomic CSS방법둠'을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀 λͺ…μœΌλ‘œ 'w10, h10'κ³Ό 같이 μ§€μ •ν•˜κ³  CSSμ—μ„œ 1:1둜 κ΅¬ν˜„ν•˜μ—¬ μ•„μ£Ό μž‘μ€ λ‹¨μœ„λ‘œ CSSλ₯Ό μž‘μ„±ν•˜λŠ” 기법을 λ§ν•©λ‹ˆλ‹€.

λ ˆμ΄μ•„μ›ƒ 리셋

  • HTML λ¬Έμ„œμ˜ κΈ°λ³Έ μŠ€νƒ€μΌμ΄ λ ˆμ΄μ•„μ›ƒμ„ λ°©ν•΄ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ»¨λŒ€ λ°•μŠ€μ˜ μ‹œμž‘μ„ μ •ν™•νžˆ (0, 0)μ—μ„œ μ‹œμž‘ν•˜κ³  싢은데 <body>μš”μ†Œμ— 여백이 μžˆλŠ” κ²½μš°λ‚˜, width와 height 계산이 여백을 ν¬ν•¨ν•˜μ§€ μ•Šμ•„ 계산이 번거둜운 것듀이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ΄λŸ¬ν•œ 경우 κΈ°λ³ΈμŠ€νƒ€μΌλ§μ„ μ œκ±°ν•˜λŠ” CSSμ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ λ¦¬μ…‹μ‹œν‚€κ³  λ””μžμΈν•œλŒ€λ‘œ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

/* κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒμ„ λ¦¬μ…‹ν•˜λŠ” CSSμ½”λ“œ */

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}


πŸ’š Flexbox

λ°•μŠ€λ₯Ό μœ μ—°ν•˜κ²Œ λŠ˜λ¦¬κ±°λ‚˜ μ€„μ—¬μ„œ λ ˆμ΄μ•„μ›ƒμ„ μž‘λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
flexbox 속성듀을 ν™œμš©ν•˜λ©΄ μš”μ†Œμ˜ μ •λ ¬, μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ μ ˆν•œ μœ„μΉ˜μ— 속성을 μ§€μ •ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ μš”μ†Œλ“€μ΄ μ›ν•˜λŠ” λŒ€λ‘œ μ •λ ¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • flex-item이 λ†“μ—¬μžˆλŠ” display:flexκ°€ μ„€μ •λœ λΆ€λͺ¨ μš”μ†Œλ₯Ό flex-container 라고 λΆ€λ¦…λ‹ˆλ‹€.

  • flex-container둜 μ§€μ •λœ μ»¨ν…Œμ΄λ„ˆμ˜ 일차 μžμ‹μš”μ†Œλ‘œ, λ‚΄λΆ€μ—μ„œ flexbox둜 λ ˆμ΄μ•„μ›ƒλ˜λŠ” 항볡이 flex-item μž…λ‹ˆλ‹€.

  • flexboxλŠ” λΆ€λͺ¨λ°•μŠ€ μš”μ†Œμ— μ μš©ν•΄, μžμ‹λ°•μŠ€μ˜ λ°©ν–₯κ³Ό 크기λ₯Ό κ²°μ •ν•˜λŠ” λ ˆμ΄μ•„μ›ƒ κ΅¬μ„±λ°©λ²•μž…λ‹ˆλ‹€.


🀍 λΆ€λͺ¨(Flex-Container) 속성

display : flex

  • display: flex;을 μ„€μ •ν•˜λ©΄ 각 ν•­λͺ© 별 λ‚΄λΆ€ μš”μ†Œμ˜ 크기둜 주좕을 따라 μ •λ ¬λ©λ‹ˆλ‹€. 높이값이 κ°€μž₯ 큰 ν•­λͺ©μ— λ§žμΆ”μ–΄ λ‚˜λ¨Έμ§€ λͺ¨λ“  ν•­λͺ©λ“€μ΄ λŠ˜μ–΄λ‚©λ‹ˆλ‹€.

flex-direction : μ •λ ¬ μΆ• μ •ν•˜κΈ°

  • flexboxμ—λŠ” μ£ΌμΆ•(Main Axis)와 ꡐ차좕(Cross Axis)κ°€ μžˆμŠ΅λ‹ˆλ‹€. flexboxλŠ” 이 두 좕을 μ„€μ •ν•˜κ³  μ›€μ§μ΄λŠ” κ²ƒμ΄λ―€λ‘œ μΆ•λΆ€ν„° μ΄ν•΄ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

  • μ£Ό μΆ•(Main axis) : flex item이 배치되고 μžˆλŠ” λ°©ν–₯으둜 μ§„ν–‰ν•˜λŠ” μΆ•μž…λ‹ˆλ‹€. 이 μΆ•μ˜ μ‹œμž‘κ³Ό 끝을 main start 와 main end라고 ν•©λ‹ˆλ‹€.

  • ꡐ차좕 (Cross axis) : flex item이 내뢀에 λ°°μΉ˜λ˜λŠ” λ°©ν–₯에 직각을 μ΄λ£¨λŠ” μΆ•μž…λ‹ˆλ‹€. 이 μΆ•μ˜ μ‹œμž‘κ³Ό 끝을 cross start 와 cross end라고 ν•©λ‹ˆλ‹€.

flex-direction : row;

  • 좕을 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ κ°„λ‹€κ³  ν•˜μ§€ μ•Šκ³  'μ‹œμž‘μ 'μ—μ„œ '끝점'으둜 κ°„λ‹€κ³  ν•©λ‹ˆλ‹€. 각 λ‚˜λΌμ˜ 언어에 따라 μ‹œμž‘μ κ³Ό 끝점이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν•œκ΅­μ–΄μ˜ 경우 쒌츑이 μ‹œμž‘μ μ΄μ§€λ§Œ, μ•„λžμ–΄μ˜ 경우 우츑이 μ‹œμž‘μ μ΄ λ©λ‹ˆλ‹€. 또 일본어와 같이 μ„Έλ‘œλ‘œμ“°λŠ” μ–Έμ–΄λŠ” 주츑이 μ„Έλ‘œλ‘œ μ‹œμž‘λ˜λ©° μ‹œμž‘μ μ΄ 상단이 λ©λ‹ˆλ‹€.

  • flex-direction : row-reverse; λŠ” 좕은 κ°™μ§€λ§Œ μƒμžμ˜ μˆœμ„œκ°€ C-B-A둜 λ†“μ—¬μ§€λŠ” 것을 λ§ν•©λ‹ˆλ‹€.


flex-direction : column;

  • flex-direction : column-reverse; λŠ” μƒμžμ˜ μˆœμ„œκ°€ C-B-A둜 λ†“μ—¬μ§€λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

Justify-content = item μ£ΌμΆ• μ •λ ¬

  • 주좕을 μ •ν–ˆλ‹€λ©΄ 주좕을 따라 flex-item을 μ •λ ¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. (μΆ•(=μ„ λ°˜)은 움직이지 μ•ŠμŠ΅λ‹ˆλ‹€.)

justify-content: flex-start

justify-content: center

justify-content: flex-end

justify-content: space-between

juctify-content: space-around

justify-content: space-evenly


align-items = item ꡐ차좕 μ •λ ¬

align-items: strech;(κΈ°λ³Έκ°’)

* item듀이 μ»¨ν…Œμ΄λ„ˆ λ‚΄ item의 μ΅œλŒ€ λ†’μ΄λ‘œ μ§€μ •λ©λ‹ˆλ‹€.

align-items: flex-start

align-itmes: flex-end

align-items: center



🀍 μžμ‹(Flex-item) 속성

  • μžμ‹ μš”μ†Œμ— μ μš©ν•˜λŠ” flex μ†μ„±μš”μ†ŒλŠ” μ°¨μ§€ν•˜λŠ” 곡간 κ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€.

flex 속성

  • 기본값은 flex : 0 1 auto; μž…λ‹ˆλ‹€. μ™Όμͺ½λΆ€ν„° 였λ₯Έμͺ½μœΌλ‘œ μ½˜ν…μΈ  크기만큼 λ°°μΉ˜λ©λ‹ˆλ‹€. μ„Έκ°€μ§€ 값을 각각 λ”°λ‘œ μ§€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
 a {flex-gorw: 0;
	flex-shrink : 1;
	flex-basis : auto;
    }

flex-grow

  • 기본값은 0μž…λ‹ˆλ‹€. 빈 곡간이 μžˆμ–΄λ„ λŠ˜μ–΄λ‚˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • 값을 1둜 λ³€κ²½ν•˜λ©΄ μ •λ ¬ μΆ• λ°©ν–₯에 빈 곡간이 μžˆμ„ λ•Œ 각 μžμ‹μš”μ†Œλ“€μ΄ μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚˜ 남은 곡간을 μ°¨μ§€ν•  것인지 λΉ„μœ¨μ„ μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • νŒ½μ°½μ§€μˆ˜λŠ” μ΄ν•©μ—μ„œμ˜ λΉ„μœ¨λ‘œ, μžμ‹μš”μ†Œμ˜ growκ°’ / μžμ‹ μš”μ†Œλ“€μ˜ growκ°’μ˜ ν•© λΉ„μœ¨λ‘œ 빈 곡간을 κ°€μ Έκ°‘λ‹ˆλ‹€.

flex-shrink

  • grow와 λ°˜λŒ€λ‘œ, μ„€μ • λΉ„μœ¨λ§ŒνΌ λ°•μŠ€κ°€ μž‘μ•„μ§‘λ‹ˆλ‹€.
  • grow 속성과 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것은 λΉ„μΆ”μž…λ‹ˆλ‹€. λΉ„μœ¨λ‘œ μ§€μ •ν•  경우 grow속성에 λ³€ν™”λ₯Ό μ£ΌλŠ” 방식을 ꢌμž₯ν•©λ‹ˆλ‹€. shrink속성은 widthλ‚˜ flex-basis 속성에 λ”°λ₯Έ λΉ„μœ¨λ‘œ μ‹€μ œν¬κΈ°λ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
  • grow μ†μ„±μœΌλ‘œ λΉ„μœ¨μ„ λ³€κ²½ν•˜λŠ” 경우 shrink속성은 기본값인 1둜 λ‘‘λ‹ˆλ‹€.

flex-basis

  • μžμ‹λ°•μŠ€κ°€ λŠ˜κ±°λ‚˜ 쀄기 전에 κ°€μ§€λŠ” κΈ°λ³Έ ν¬κΈ°μž…λ‹ˆλ‹€.
  • grow 속성 값이 0인 κ²½μš°μ—λ§Œ basis μ†μ„±μ˜ 값이 μœ μ§€λ©λ‹ˆλ‹€. basis둜 μ„€μ •λœ 크기가 항상 μœ μ§€λ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€!
  • width와 flex-basisλ₯Ό λ™μ‹œμ— μ μš©ν•˜λŠ” 경우, flex-basisκ°€ μš°μ„ λ©λ‹ˆλ‹€.
  • μ½˜ν…μΈ κ°€ λ§Žμ•„ μžμ‹λ°•μŠ€κ°€ λ„˜μΉ˜λŠ” 경우, widthκ°€ μ •ν™•ν•œ 크기λ₯Ό 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • basisλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μ½˜ν…μΈ κ°€ λ§Žμ•„ μžμ‹λ°•μŠ€κ°€ λ„˜μΉ˜λŠ” 경우λ₯Ό λŒ€λΉ„ν•΄ widthλŒ€μ‹  max-widthλ₯Ό μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.



profile
κ°œλ°œμžκ°€ 되고 μ‹Άμ–΄ λ‘₯λ‹Ήλ‘₯λ‹Ή

0개의 λŒ“κΈ€