CSS Flexboxμ λ΄μ¬μ ν¬κΈ° μ‘°μ μκ³ λ¦¬μ¦μ μ΄ν΄νμ¬ κ·Έ κ°λ ₯ν¨μ λ§μ€ν°νμΈμ. μ΄ κ°μ΄λλ μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ , flex-basis, grow, shrink λ° μΌλ°μ μΈ λ μ΄μμ λ¬Έμ λ₯Ό μ μΈκ³ κ°λ°μλ₯Ό μν΄ μ€λͺ ν©λλ€.
Flexbox ν¬κΈ° μ‘°μ μκ³ λ¦¬μ¦ νν€μΉκΈ°: μ½ν μΈ κΈ°λ° λ μ΄μμ μ¬μΈ΅ λΆμ
μλ²½νκ² λμΌν λλΉμ μ΄μ κΈ°λνλ©° μ¬λ¬ μμ΄ν
μ flex: 1
μ μ¬μ©νμ§λ§, κ²°κ΅ ν¬κΈ°κ° λ€λ₯΄κ² μ§μ λ κ²½νμ΄ μμΌμ κ°μ? λλ flex μμ΄ν
μ΄ μκ³ νκ² μ€μ΄λ€μ§ μμ λμμΈμ λ§κ°λ¨λ¦¬λ 보기 νν μ€λ²νλ‘μ°μ μ¨λ¦ν΄ λ³Έ μ μ μμΌμ κ°μ? μ΄λ¬ν νν μ’μ κ°μ μ’
μ’
κ°λ°μλ€μ μΆμΈ‘κ³Ό 무μμ μμ± λ³κ²½μ μνμ λΉ λ¨λ¦½λλ€. νμ§λ§ ν΄κ²°μ±
μ λ§λ²μ΄ μλ λ
Όλ¦¬μ μμ΅λλ€.
μ΄λ¬ν νΌμ¦μ ν΄λ΅μ CSS λͺ μΈμ κΉμν κ³³μ μλ Flexbox λ΄μ¬μ ν¬κΈ° μ‘°μ μκ³ λ¦¬μ¦(Flexbox Intrinsic Sizing Algorithm)μ΄λΌλ κ³Όμ μ μμ΅λλ€. μ΄λ Flexboxλ₯Ό ꡬλνλ κ°λ ₯νκ³ μ½ν μΈ λ₯Ό μΈμνλ μμ§μ΄μ§λ§, κ·Έ λ΄λΆ λ Όλ¦¬λ μ’ μ’ λΆν¬λͺ ν λΈλλ°μ€μ²λΌ λκ»΄μ§ μ μμ΅λλ€. μ΄ μκ³ λ¦¬μ¦μ μ΄ν΄νλ κ²μ΄ Flexboxλ₯Ό λ§μ€ν°νκ³ μ§μ μΌλ‘ μμΈ‘ κ°λ₯νλ©° ν볡λ ₯ μλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνλ μ΄μ μ λλ€.
μ΄ κ°μ΄λλ Flexboxλ₯Ό μ¬μ©ν λ 'μνμ°©μ€'μμ 'μλμ μΈ μ€κ³'λ‘ λμκ°κ³ μΆμ μ μΈκ³ κ°λ°μλ€μ μν κ²μ λλ€. μ°λ¦¬λ μ΄ κ°λ ₯ν μκ³ λ¦¬μ¦μ λ¨κ³λ³λ‘ λΆμνμ¬ νΌλμ λͺ νν¨μΌλ‘ λ°κΎΈκ³ , μ΄λ€ μΈμ΄μ μ΄λ€ μ½ν μΈ μλ μλνλ λ κ²¬κ³ νκ³ μ μΈκ³λ₯Ό κ³ λ €ν λ μ΄μμμ ꡬμΆν μ μλλ‘ νμ μ€μ΄μ€ κ²μ λλ€.
κ³ μ λ ν½μ μ λμ΄: λ΄μ¬μ (Intrinsic) vs. μΈμ¬μ (Extrinsic) ν¬κΈ° μ‘°μ μ΄ν΄νκΈ°
μκ³ λ¦¬μ¦ μ체μ λν΄ μμ보기 μ μ, CSS λ μ΄μμμ κΈ°λ³Έ κ°λ μΈ λ΄μ¬μ ν¬κΈ° μ‘°μ κ³Ό μΈμ¬μ ν¬κΈ° μ‘°μ μ μ°¨μ΄μ μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
- μΈμ¬μ ν¬κΈ° μ‘°μ (Extrinsic Sizing): κ°λ°μμΈ μ¬λ¬λΆμ΄ μμμ ν¬κΈ°λ₯Ό λͺ
μμ μΌλ‘ μ μνλ κ²½μ°μ
λλ€.
width: 500px
,height: 50%
, λλwidth: 30rem
κ³Ό κ°μ μμ±λ€μ΄ μΈμ¬μ ν¬κΈ° μ‘°μ μ μμ λλ€. ν¬κΈ°λ μμμ μ½ν μΈ μΈλΆ μμΈμ μν΄ κ²°μ λ©λλ€. - λ΄μ¬μ ν¬κΈ° μ‘°μ (Intrinsic Sizing): λΈλΌμ°μ κ° μμκ° ν¬ν¨νλ μ½ν μΈ λ₯Ό κΈ°λ°μΌλ‘ ν¬κΈ°λ₯Ό κ³μ°νλ κ²½μ°μ λλ€. λ κΈ΄ ν μ€νΈ λ μ΄λΈμ μμ©νκΈ° μν΄ μμ°μ€λ½κ² λ λμ΄μ§λ λ²νΌμ λ΄μ¬μ ν¬κΈ° μ‘°μ μ μ¬μ©νκ³ μλ κ²μ λλ€. ν¬κΈ°λ μμ λ΄λΆμ μμΈμ μν΄ κ²°μ λ©λλ€.
Flexboxλ λ΄μ¬μ μΈ, μ¦ μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ λκ°μ λλ€. μ¬λ¬λΆμ΄ κ·μΉ(flex μμ±λ€)μ μ 곡νλ©΄, λΈλΌμ°μ λ flex μμ΄ν λ€μ μ½ν μΈ μ 컨ν μ΄λ λ΄ μ¬μ© κ°λ₯ν 곡κ°μ κΈ°λ°μΌλ‘ μ΅μ’ ν¬κΈ° κ²°μ μ λ΄λ¦½λλ€. μ΄κ²μ΄ λ°λ‘ Flexboxκ° μ λμ μ΄κ³ λ°μνμΈ λμμΈμ λ§λλ λ° κ°λ ₯ν μ΄μ μ λλ€.
μ μ°μ±μ μΈ κ°μ§ κΈ°λ₯: `flex-basis`, `flex-grow`, `flex-shrink` 볡μ΅νκΈ°
Flexbox μκ³ λ¦¬μ¦μ κ²°μ μ μ£Όλ‘ flex
λ¨μΆ μμ±μ μ¬μ©νμ¬ ν¨κ» μ€μ λλ μΈ κ°μ§ μμ±μ μν΄ μ’μ°λ©λλ€. λ€μ λ¨κ³λ₯Ό μ΄ν΄νκΈ° μν΄μλ μ΄λ€μ λν νμ€ν μ΄ν΄κ° νμμ μ
λλ€.
1. `flex-basis`: μμμ
flex-basis
λ flex μμ΄ν
μ΄ λμ΄λκ±°λ μ€μ΄λ€κΈ° μ μ μ΄μμ μΈ λλ "κ°μμ μΈ" μμ ν¬κΈ°λΌκ³ μκ°ν μ μμ΅λλ€. μ΄λ λ€λ₯Έ λͺ¨λ κ³μ°μ κΈ°μ€μ μ΄ λ©λλ€.
- κΈΈμ΄(μ:
100px
,10rem
) λλ λ°±λΆμ¨(25%
)μ΄ λ μ μμ΅λλ€. - κΈ°λ³Έκ°μ
auto
μ λλ€.auto
λ‘ μ€μ λλ©΄ λΈλΌμ°μ λ λ¨Όμ μμ΄ν μ μ£ΌμΆ ν¬κΈ° μμ±(κ°λ‘ flex 컨ν μ΄λμ κ²½μ°width
, μΈλ‘μ κ²½μ°height
)μ μ΄ν΄λ΄ λλ€. - μ¬κΈ°μ ν΅μ¬μ μΈ μ°κ²°κ³ λ¦¬κ° μμ΅λλ€: λ§μ½ μ£ΌμΆ ν¬κΈ° μμ±λ μμ
auto
λΌλ©΄,flex-basis
λ μμ΄ν μ λ΄μ¬μ μΈ, μ¦ μ½ν μΈ κΈ°λ° ν¬κΈ°λ‘ κ²°μ λ©λλ€. μ΄κ²μ΄ λ°λ‘ μ½ν μΈ μμ²΄κ° μ²μλΆν° ν¬κΈ° μ‘°μ κ³Όμ μ μ°Έμ¬νκ² λλ λ°©μμ λλ€. content
κ°λ μ¬μ©ν μ μμΌλ©°, μ΄λ λΈλΌμ°μ μκ² λ΄μ¬μ ν¬κΈ°λ₯Ό μ¬μ©νλλ‘ λͺ μμ μΌλ‘ μ§μν©λλ€.
2. `flex-grow`: μμ κ³΅κ° μ°¨μ§νκΈ°
flex-grow
μμ±μ flex 컨ν
μ΄λ λ΄μ μμ μ¬μ 곡κ°μ νμ μμλ€κ³Ό λΉκ΅νμ¬ μΌλ§λ ν‘μν΄μΌ νλμ§λ₯Ό λνλ΄λ λ¨μ μλ μ«μμ
λλ€. μμ μ¬μ 곡κ°μ flex 컨ν
μ΄λκ° λͺ¨λ μμ΄ν
μ `flex-basis` κ°μ ν©λ³΄λ€ ν΄ λ μ‘΄μ¬ν©λλ€.
- κΈ°λ³Έκ°μ
0
μΌλ‘, μμ΄ν μ΄ κΈ°λ³Έμ μΌλ‘ λμ΄λμ§ μμμ μλ―Έν©λλ€. - λͺ¨λ μμ΄ν
μ΄
flex-grow: 1
μ κ°μ§λ©΄, λ¨μ 곡κ°μ΄ κ·Έλ€ μ¬μ΄μ κ· λ±νκ² λΆλ°°λ©λλ€. - ν μμ΄ν
μ΄
flex-grow: 2
μ΄κ³ λ€λ₯Έ μμ΄ν λ€μ΄flex-grow: 1
μ΄λΌλ©΄, 첫 λ²μ§Έ μμ΄ν μ λ€λ₯Έ μμ΄ν λ€λ³΄λ€ λ λ°° λ§μ μ¬μ 곡κ°μ μ°¨μ§νκ² λ©λλ€.
3. `flex-shrink`: μμ κ³΅κ° μ보νκΈ°
flex-shrink
μμ±μ flex-grow
μ λ°λ κ°λ
μ
λλ€. 컨ν
μ΄λκ° λͺ¨λ μμ΄ν
μ `flex-basis`λ₯Ό μμ©νκΈ°μ λ무 μμ λ μμ΄ν
μ΄ κ³΅κ°μ μΌλ§λ ν¬κΈ°ν΄μΌ νλμ§λ₯Ό μ μ΄νλ λ¨μ μλ μ«μμ
λλ€. μ΄λ μ’
μ’
μΈ κ°μ§ μμ± μ€ κ°μ₯ μ€ν΄λ°λ μμ±μ
λλ€.
- κΈ°λ³Έκ°μ
1
λ‘, νμνλ€λ©΄ μμ΄ν μ΄ κΈ°λ³Έμ μΌλ‘ μ€μ΄λ€ μ μμμ μλ―Έν©λλ€. - νν μ€ν΄λ
flex-shrink: 2
κ° μμ΄ν μ λ¨μν "λ λ°° 빨리" μ€μ΄λ€κ² λ§λ λ€κ³ μκ°νλ κ²μ λλ€. μ€μ λ‘λ λ λ―Έλ¬ν©λλ€: μμ΄ν μ΄ μ€μ΄λλ μμ `flex-shrink` κ³μμ `flex-basis`λ₯Ό κ³±ν κ°μ λΉλ‘ν©λλ€. μ΄ μ€μν μΈλΆ μ¬νμ λμ€μ μ€μ μμ λ₯Ό ν΅ν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
Flexbox ν¬κΈ° μ‘°μ μκ³ λ¦¬μ¦: λ¨κ³λ³ λΆμ
μ΄μ , κ·Έ λ§μ κ±·μ΄λ΄κ³ λΈλΌμ°μ μ μ¬κ³ κ³Όμ μ λ°λΌκ° λ³΄κ² μ΅λλ€. 곡μ W3C λͺ μΈμλ λ§€μ° κΈ°μ μ μ΄κ³ μ λ°νμ§λ§, ν΅μ¬ λ‘μ§μ λ¨μΌ flex λΌμΈμ λν΄ λ μννκΈ° μ¬μ΄ μμ°¨μ λͺ¨λΈλ‘ λ¨μνν μ μμ΅λλ€.
1λ¨κ³: Flex κΈ°λ³Έ ν¬κΈ° λ° κ°μ μ£ΌμΆ ν¬κΈ° κ²°μ
λ¨Όμ , λΈλΌμ°μ λ κ° μμ΄ν
μ μμμ μ΄ νμν©λλ€. 컨ν
μ΄λ λ΄ λͺ¨λ μμ΄ν
μ λν flex κΈ°λ³Έ ν¬κΈ°(flex base size)λ₯Ό κ³μ°ν©λλ€. μ΄λ μ£Όλ‘ flex-basis
μμ±μ μ΅μ’
κ²°μ κ°μ μν΄ κ²°μ λ©λλ€. μ΄ flex κΈ°λ³Έ ν¬κΈ°λ λ€μ λ¨κ³λ₯Ό μν μμ΄ν
μ "κ°μ μ£ΌμΆ ν¬κΈ°(hypothetical main size)"κ° λ©λλ€. μ΄κ²μ μμ΄ν
μ΄ νμ λ€κ³Ό νμνκΈ° μ μ *μνλ* ν¬κΈ°μ
λλ€.
2λ¨κ³: Flex 컨ν μ΄λμ μ£ΌμΆ ν¬κΈ° κ²°μ
λ€μμΌλ‘, λΈλΌμ°μ λ flex 컨ν μ΄λ μ체μ μ£ΌμΆ λ°©ν₯ ν¬κΈ°λ₯Ό νμ ν©λλ€. μ΄κ²μ CSSμ μ§μ λ κ³ μ λλΉμΌ μλ μκ³ , λΆλͺ¨μ λ°±λΆμ¨μΌ μλ μμΌλ©°, λλ μ체 μ½ν μΈ μ μν΄ λ΄μ¬μ μΌλ‘ ν¬κΈ°κ° κ²°μ λ μλ μμ΅λλ€. μ΄ μ΅μ’ μ μ΄κ³ νμ λ ν¬κΈ°κ° flex μμ΄ν λ€μ΄ μ¬μ©ν μ μλ 곡κ°μ "μμ°"μ΄ λ©λλ€.
3λ¨κ³: Flex μμ΄ν μ Flex λΌμΈμΌλ‘ μμ§
κ·Έλ° λ€μ λΈλΌμ°μ λ μμ΄ν
λ€μ μ΄λ»κ² κ·Έλ£Ήνν μ§ κ²°μ ν©λλ€. flex-wrap: nowrap
(κΈ°λ³Έκ°)μ΄ μ€μ λ κ²½μ°, λͺ¨λ μμ΄ν
μ λ¨μΌ λΌμΈμ μΌλΆλ‘ κ°μ£Όλ©λλ€. flex-wrap: wrap
λλ wrap-reverse
κ° νμ±νλ κ²½μ°, λΈλΌμ°μ λ μμ΄ν
λ€μ νλ μ΄μμ λΌμΈμ κ±Έμ³ λΆλ°°ν©λλ€. μ΄ν μκ³ λ¦¬μ¦μ λλ¨Έμ§ λΆλΆμ κ° μμ΄ν
λΌμΈμ λ
립μ μΌλ‘ μ μ©λ©λλ€.
4λ¨κ³: μ μ°ν κΈΈμ΄ κ²°μ (ν΅μ¬ λ‘μ§)
μ΄κ²μ΄ μ€μ ν¬κΈ° μ‘°μ κ³Ό λΆλ°°κ° μΌμ΄λλ μκ³ λ¦¬μ¦μ μ¬μ₯λΆμ λλ€. μ΄λ λ λΆλΆμΌλ‘ ꡬμ±λ κ³Όμ μ λλ€.
4aλΆ: μ¬μ κ³΅κ° κ³μ°
λΈλΌμ°μ λ flex λΌμΈ λ΄μμ μ¬μ© κ°λ₯ν μ΄ μ¬μ 곡κ°μ κ³μ°ν©λλ€. μ΄λ 컨ν μ΄λμ μ£ΌμΆ ν¬κΈ°(2λ¨κ³μμ)μμ λͺ¨λ μμ΄ν μ flex κΈ°λ³Έ ν¬κΈ° ν©κ³(1λ¨κ³μμ)λ₯Ό λΉΌμ κ³μ°ν©λλ€.
μ¬μ κ³΅κ° = 컨ν
μ΄λμ μ£ΌμΆ ν¬κΈ° - λͺ¨λ μμ΄ν
μ Flex κΈ°λ³Έ ν¬κΈ° ν©κ³
μ΄ κ²°κ³Όλ λ€μκ³Ό κ°μ μ μμ΅λλ€:
- μμ: 컨ν
μ΄λκ° μμ΄ν
λ€μ΄ νμλ‘ νλ κ²λ³΄λ€ λ λ§μ 곡κ°μ κ°μ§λλ€. μ΄ μ¬λΆμ 곡κ°μ
flex-grow
λ₯Ό μ¬μ©νμ¬ λΆλ°°λ©λλ€. - μμ: μμ΄ν
λ€μ μ΄ ν¬κΈ°κ° 컨ν
μ΄λλ³΄λ€ ν½λλ€. μ΄ κ³΅κ° λΆμ‘±(μ€λ²νλ‘μ°)μ μμ΄ν
λ€μ΄
flex-shrink
κ°μ λ°λΌ μ€μ΄λ€μ΄μΌ ν¨μ μλ―Έν©λλ€. - 0: μμ΄ν λ€μ΄ μλ²½νκ² λ§μ΅λλ€. λμ΄λκ±°λ μ€μ΄λ€ νμκ° μμ΅λλ€.
4bλΆ: μ¬μ κ³΅κ° λΆλ°°
μ΄μ λΈλΌμ°μ λ κ³μ°λ μ¬μ 곡κ°μ λΆλ°°ν©λλ€. μ΄λ λ°λ³΅μ μΈ κ³Όμ μ΄μ§λ§, λ‘μ§μ λ€μκ³Ό κ°μ΄ μμ½ν μ μμ΅λλ€:
- μ¬μ 곡κ°μ΄ μμμΈ κ²½μ° (λμ΄λ¨):
- λΈλΌμ°μ λ ν΄λΉ λΌμΈμ μλ λͺ¨λ μμ΄ν
μ
flex-grow
κ³μλ₯Ό ν©μ°ν©λλ€. - κ·Έλ° λ€μ μμ μ¬μ 곡κ°μ κ° μμ΄ν
μ λΉλ‘νμ¬ λΆλ°°ν©λλ€. μμ΄ν
μ΄ λ°λ 곡κ°μ μμ λ€μκ³Ό κ°μ΅λλ€:
(μμ΄ν μ flex-grow / λͺ¨λ flex-grow κ³μμ ν©) * μμ μ¬μ 곡κ°
. - μμ΄ν
μ μ΅μ’
ν¬κΈ°λ
flex-basis
μ λΆλ°°λ 곡κ°μ λν κ°μ λλ€. μ΄ μ¦κ°λ μμ΄ν μmax-width
λλmax-height
μμ±μ μν΄ μ νλ©λλ€.
- λΈλΌμ°μ λ ν΄λΉ λΌμΈμ μλ λͺ¨λ μμ΄ν
μ
- μ¬μ 곡κ°μ΄ μμμΈ κ²½μ° (μ€μ΄λ¦):
- μ΄ λΆλΆμ΄ λ 볡μ‘ν©λλ€. κ° μμ΄ν
μ λν΄ λΈλΌμ°μ λ flex κΈ°λ³Έ ν¬κΈ°μ
flex-shrink
κ°μ κ³±νμ¬ κ°μ€μΉκ° μ μ©λ μΆμ κ³μλ₯Ό κ³μ°ν©λλ€:κ°μ€μΉκ° μ μ©λ μΆμ κ³μ = Flex κΈ°λ³Έ ν¬κΈ° * flex-shrink
. - κ·Έλ° λ€μ μ΄ λͺ¨λ κ°μ€μΉκ° μ μ©λ μΆμ κ³μλ€μ ν©μ°ν©λλ€.
- μμ 곡κ°(μ€λ²νλ‘μ° μ)μ μ΄ κ°μ€μΉκ° μ μ©λ κ³μλ₯Ό κΈ°λ°μΌλ‘ κ° μμ΄ν
μ λΉλ‘νμ¬ λΆλ°°λ©λλ€. μμ΄ν
μ΄ μ€μ΄λλ μμ λ€μκ³Ό κ°μ΅λλ€:
(μμ΄ν μ κ°μ€μΉκ° μ μ©λ μΆμ κ³μ / λͺ¨λ κ°μ€μΉκ° μ μ©λ μΆμ κ³μμ ν©) * μμ μ¬μ 곡κ°
. - μμ΄ν
μ μ΅μ’
ν¬κΈ°λ
flex-basis
μμ λΆλ°°λ μμ 곡κ°μ λΊ κ°μ λλ€. μ΄ μΆμλ μμ΄ν μmin-width
λλmin-height
μμ±μ μν΄ μ νλλ©°, μ΄ μμ±λ€μ κ²°μ μ μΌλ‘ κΈ°λ³Έκ°μ΄auto
μ λλ€.
- μ΄ λΆλΆμ΄ λ 볡μ‘ν©λλ€. κ° μμ΄ν
μ λν΄ λΈλΌμ°μ λ flex κΈ°λ³Έ ν¬κΈ°μ
5λ¨κ³: μ£ΌμΆ μ λ ¬
λͺ¨λ μμ΄ν
μ μ΅μ’
ν¬κΈ°κ° κ²°μ λλ©΄, λΈλΌμ°μ λ justify-content
μμ±μ μ¬μ©νμ¬ μ»¨ν
μ΄λ λ΄μμ μμ΄ν
λ€μ μ£ΌμΆμ λ°λΌ μ λ ¬ν©λλ€. μ΄λ λͺ¨λ ν¬κΈ° κ³μ°μ΄ μλ£λ *νμ* λ°μν©λλ€.
μ€μ μλ리μ€: μ΄λ‘ μμ νμ€λ‘
μ΄λ‘ μ μ΄ν΄νλ κ²κ³Ό κ·Έκ²μ΄ μ€μ λ‘ μλνλ κ²μ 보λ κ²μ μ§μμ κ³΅κ³ ν νλ λ° μ°¨μ΄κ° μμ΅λλ€. μ΄μ μκ³ λ¦¬μ¦μ λν μ΄ν΄λ₯Ό λ°νμΌλ‘ μ½κ² μ€λͺ ν μ μλ λͺ κ°μ§ μΌλ°μ μΈ μλ리μ€λ₯Ό λ€λ£¨μ΄ λ³΄κ² μ΅λλ€.
μλλ¦¬μ€ 1: μ§μ ν λμΌ λλΉ μ΄κ³Ό `flex: 1` λ¨μΆ μμ±
λ¬Έμ μ : λͺ¨λ μμ΄ν
μ flex-grow: 1
μ μ μ©νμ§λ§ λλΉκ° λμΌνκ² λμ§ μμ΅λλ€.
μ€λͺ
: μ΄λ flex: auto
(flex: 1 1 auto
λ‘ νμ₯λ¨)μ κ°μ λ¨μΆ μμ±μ μ¬μ©νκ±°λ, flex-basis
λ₯Ό κΈ°λ³Έκ°μΈ auto
λ‘ λ μ± flex-grow: 1
λ§ μ€μ νμ λ λ°μν©λλ€. μκ³ λ¦¬μ¦μ λ°λ₯΄λ©΄, flex-basis: auto
λ μμ΄ν
μ μ½ν
μΈ ν¬κΈ°λ‘ κ²°μ λ©λλ€. λ°λΌμ μ½ν
μΈ κ° λ λ§μ μμ΄ν
μ λ ν° flex κΈ°λ³Έ ν¬κΈ°λ‘ μμν©λλ€. λ¨μ μ¬μ 곡κ°μ΄ κ· λ±νκ² λΆλ°°λλλΌλ, μμμ μ΄ λ¬λκΈ° λλ¬Έμ μμ΄ν
λ€μ μ΅μ’
ν¬κΈ°λ λ¬λΌμ§λλ€.
ν΄κ²°μ±
: λ¨μΆ μμ± flex: 1
μ μ¬μ©νμΈμ. μ΄λ flex: 1 1 0%
λ‘ νμ₯λ©λλ€. ν΅μ¬μ flex-basis: 0%
μ
λλ€. μ΄λ λͺ¨λ μμ΄ν
μ΄ κ°μ κΈ°λ³Έ ν¬κΈ° 0μμ μμνλλ‘ κ°μ ν©λλ€. 컨ν
μ΄λμ μ 체 λλΉκ° "μμ μ¬μ 곡κ°"μ΄ λ©λλ€. λͺ¨λ μμ΄ν
μ΄ flex-grow: 1
μ κ°μ§κ³ μμΌλ―λ‘, μ΄ μ 체 곡κ°μ΄ κ·Έλ€ μ¬μ΄μ κ· λ±νκ² λΆλ°°λμ΄ μ½ν
μΈ μ μκ΄μμ΄ μ§μ μΌλ‘ λμΌν λλΉμ μ΄μ΄ λ§λ€μ΄μ§λλ€.
μλλ¦¬μ€ 2: `flex-shrink` λΉλ‘μ± νΌμ¦
λ¬Έμ μ : λ μμ΄ν
λͺ¨λ flex-shrink: 1
μ κ°μ§κ³ μμ§λ§, 컨ν
μ΄λκ° μ€μ΄λ€ λ ν μμ΄ν
μ΄ λ€λ₯Έ μμ΄ν
λ³΄λ€ ν¨μ¬ λ λ§μ λλΉλ₯Ό μμ΅λλ€.
μ€λͺ
: μ΄κ²μ μμ 곡κ°μ λν 4b λ¨κ³λ₯Ό μλ²½νκ² λ³΄μ¬μ£Όλ μμ
λλ€. μΆμλ λ¨μ§ flex-shrink
κ³μμλ§ κΈ°λ°νλ κ²μ΄ μλλΌ, μμ΄ν
μ flex-basis
μ μν΄ κ°μ€μΉκ° μ μ©λ©λλ€. λ ν° μμ΄ν
μ "ν¬κΈ°ν " κ²μ΄ λ λ§μ΅λλ€.
500px 컨ν μ΄λμ λ κ°μ μμ΄ν μ΄ μλ€κ³ κ°μ ν΄ λ΄ μλ€:
- μμ΄ν
A:
flex: 0 1 400px;
(400px κΈ°λ³Έ ν¬κΈ°) - μμ΄ν
B:
flex: 0 1 200px;
(200px κΈ°λ³Έ ν¬κΈ°)
μ΄ κΈ°λ³Έ ν¬κΈ°λ 600pxλ‘, 컨ν μ΄λμ λΉν΄ 100pxμ΄ λ무 ν½λλ€ (100pxμ μμ 곡κ°).
- μμ΄ν
Aμ κ°μ€μΉκ° μ μ©λ μΆμ κ³μ:
400px * 1 = 400
- μμ΄ν
Bμ κ°μ€μΉκ° μ μ©λ μΆμ κ³μ:
200px * 1 = 200
- μ΄ κ°μ€ κ³μ:
400 + 200 = 600
μ΄μ 100pxμ μμ 곡κ°μ λΆλ°°ν©λλ€:
- μμ΄ν
Aλ
(400 / 600) * 100px = ~66.67px
λ§νΌ μ€μ΄λλλ€. - μμ΄ν
Bλ
(200 / 600) * 100px = ~33.33px
λ§νΌ μ€μ΄λλλ€.
λ λ€ flex-shrink: 1
μ κ°μ‘μμλ λΆκ΅¬νκ³ , λ ν° μμ΄ν
μ΄ λ λ°° λ λ§μ λλΉλ₯Ό μμλλ°, μ΄λ κΈ°λ³Έ ν¬κΈ°κ° λ λ°° λ μ»ΈκΈ° λλ¬Έμ
λλ€. μκ³ λ¦¬μ¦μ μ€κ³λ λλ‘ μ ννκ² μλνμ΅λλ€.
μλλ¦¬μ€ 3: μ€μ΄λ€μ§ μλ μμ΄ν κ³Ό `min-width: 0` ν΄κ²°μ±
λ¬Έμ μ : κΈ΄ ν μ€νΈ λ¬Έμμ΄(URL λ±)μ΄λ ν° μ΄λ―Έμ§κ° μλ μμ΄ν μ΄ νΉμ ν¬κΈ° μ΄νλ‘ μ€μ΄λ€κΈ°λ₯Ό κ±°λΆνμ¬ μ»¨ν μ΄λλ₯Ό μ€λ²νλ‘μ°μν΅λλ€.
μ€λͺ
: μΆμ κ³Όμ μ μμ΄ν
μ μ΅μ ν¬κΈ°μ μν΄ μ νλλ€λ κ²μ κΈ°μ΅νμΈμ. κΈ°λ³Έμ μΌλ‘ flex μμ΄ν
μ min-width: auto
λ₯Ό κ°μ§λλ€. ν
μ€νΈλ μ΄λ―Έμ§λ₯Ό ν¬ν¨νλ μμμ κ²½μ°, μ΄ auto
κ°μ λ΄μ¬μ μ΅μ ν¬κΈ°λ‘ κ²°μ λ©λλ€. ν
μ€νΈμ κ²½μ°, μ΄λ μ’
μ’
κ°μ₯ κΈ΄ μ€ λ°κΏ μλ λ¨μ΄λ λ¬Έμμ΄μ λλΉμ
λλ€. flex μκ³ λ¦¬μ¦μ μμ΄ν
μ μ€μ΄μ§λ§, μ΄ κ³μ°λ μ΅μ λλΉμ λλ¬νλ©΄ λ©μΆκ² λμ΄ κ³΅κ°μ΄ μ¬μ ν λΆμ‘±ν κ²½μ° μ€λ²νλ‘μ°λ₯Ό μ λ°ν©λλ€.
ν΄κ²°μ±
: μμ΄ν
μ΄ λ΄μ¬μ μ½ν
μΈ ν¬κΈ°λ³΄λ€ μκ² μ€μ΄λ€λλ‘ νλ €λ©΄ μ΄ κΈ°λ³Έ λμμ μ¬μ μν΄μΌ ν©λλ€. κ°μ₯ μΌλ°μ μΈ ν΄κ²°μ±
μ flex μμ΄ν
μ min-width: 0
μ μ μ©νλ κ²μ
λλ€. μ΄κ²μ λΈλΌμ°μ μκ² "νμνλ€λ©΄ μ΄ μμ΄ν
μ 0 λλΉκΉμ§ μ€μΌ μ μλ κΆνμ λΆμ¬ν©λλ€"λΌκ³ λ§νλ κ²κ³Ό κ°μμ μ€λ²νλ‘μ°λ₯Ό λ°©μ§ν©λλ€.
λ΄μ¬μ ν¬κΈ° μ‘°μ μ ν΅μ¬: `min-content`μ `max-content`
μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ μμ ν μ΄ν΄νλ €λ©΄, κ΄λ ¨ ν€μλ λ κ°μ§λ₯Ό κ°λ¨ν μ μν΄μΌ ν©λλ€:
max-content
: μμμ λ΄μ¬μ μ νΈ λλΉμ λλ€. ν μ€νΈμ κ²½μ°, 무νν 곡κ°μ΄ μ£Όμ΄μ Έ μ€ λ°κΏμ΄ μ ν νμ μμ λ μ°¨μ§νλ λλΉμ λλ€.min-content
: μμμ λ΄μ¬μ μ΅μ λλΉμ λλ€. ν μ€νΈμ κ²½μ°, κ°μ₯ κΈ΄ μ€ λ°κΏ μλ λ¬Έμμ΄(μ: κΈ΄ λ¨μ΄ νλ)μ λλΉμ λλ€. μ΄λ μ체 μ½ν μΈ κ° μ€λ²νλ‘μ°λμ§ μμΌλ©΄μ κ°μ§ μ μλ κ°μ₯ μμ ν¬κΈ°μ λλ€.
flex-basis
κ° auto
μ΄κ³ μμ΄ν
μ width
λ auto
μΌ λ, λΈλΌμ°μ λ λ³Έμ§μ μΌλ‘ max-content
ν¬κΈ°λ₯Ό μμ΄ν
μ μμ flex κΈ°λ³Έ ν¬κΈ°λ‘ μ¬μ©ν©λλ€. μ΄κ²μ΄ λ°λ‘ flex μκ³ λ¦¬μ¦μ΄ μ¬μ 곡κ°μ λΆλ°°νκΈ° μμνκΈ°λ μ μ μ½ν
μΈ κ° λ§μ μμ΄ν
μ΄ λ ν¬κ² μμνλ μ΄μ μ
λλ€.
μ μΈκ³μ μν₯κ³Ό μ±λ₯
μ΄λ¬ν μ½ν μΈ μ€μ¬ μ κ·Ό λ°©μμ μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ νκ±°λ μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ μ μ€μν κ³ λ € μ¬νμ κ°μ§λλ€.
κ΅μ ν(i18n)μ μ€μμ±
μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ κ΅μ μ μΈ μΉμ¬μ΄νΈμκ² μλ μ κ²κ³Ό κ°μ΅λλ€. ννΈμΌλ‘λ λ²νΌ λ μ΄λΈμ΄λ μ λͺ©μ κΈΈμ΄κ° μΈμ΄λ§λ€ ν¬κ² λ€λ₯Ό μ μλ λ μ΄μμμ μ μνλ λ° νμμ μ λλ€. λ€λ₯Έ ννΈμΌλ‘λ μκΈ°μΉ μμ λ μ΄μμ κΉ¨μ§μ μ λ°ν μ μμ΅λλ€.
κΈ΄ 볡ν©μ΄λ‘ μ λͺ
ν λ
μΌμ΄λ₯Ό μκ°ν΄ λ΄
μλ€. "DonaudampfschifffahrtsgesellschaftskapitΓ€n"κ³Ό κ°μ λ¨μ΄λ μμμ min-content
ν¬κΈ°λ₯Ό μλΉν μ¦κ°μν΅λλ€. λ§μ½ κ·Έ μμκ° flex μμ΄ν
μ΄λΌλ©΄, μ§§μ μμ΄ ν
μ€νΈλ‘ λ μ΄μμμ λμμΈνμ λ μμμΉ λͺ»ν λ°©μμΌλ‘ μΆμμ μ νν μ μμ΅λλ€. λ§μ°¬κ°μ§λ‘, μΌλ³Έμ΄λ μ€κ΅μ΄μ κ°μ μΌλΆ μΈμ΄λ λ¨μ΄ μ¬μ΄μ κ³΅λ°±μ΄ μμ΄ μ€ λ°κΏ λ° ν¬κΈ° κ³μ° λ°©μμ μν₯μ μ€ μ μμ΅λλ€. μ΄κ²μ μ μΈκ³ λͺ¨λ μ¬λμκ² μλνλ κ²¬κ³ ν λ μ΄μμμ ꡬμΆνκΈ° μν΄ λ΄μ¬μ μκ³ λ¦¬μ¦μ μ΄ν΄νλ κ²μ΄ μ μ€μνμ§λ₯Ό 보μ¬μ£Όλ μλ²½ν μμ
λλ€.
μ±λ₯ κ΄λ ¨ μ°Έκ³ μ¬ν
λΈλΌμ°μ λ flex μμ΄ν
μ λ΄μ¬μ ν¬κΈ°λ₯Ό κ³μ°νκΈ° μν΄ μ½ν
μΈ λ₯Ό μΈ‘μ ν΄μΌ νλ―λ‘ κ³μ° λΉμ©μ΄ λ°μν©λλ€. λλΆλΆμ μΉμ¬μ΄νΈμ μ ν리μΌμ΄μ
μμλ μ΄ λΉμ©μ΄ λ―Έλ―Ένμ¬ κ±±μ ν νμκ° μμ΅λλ€. κ·Έλ¬λ μμ² κ°μ μμκ° μλ λ§€μ° λ³΅μ‘νκ³ κΉκ² μ€μ²©λ UIμμλ μ΄λ¬ν λ μ΄μμ κ³μ°μ΄ μ±λ₯ λ³λͺ© νμμ΄ λ μ μμ΅λλ€. μ΄λ¬ν κ³ κΈ μ¬λ‘μμλ κ°λ°μλ€μ΄ λ λλ§ μ±λ₯μ μ΅μ ννκΈ° μν΄ contain: layout
μ΄λ content-visibility
μ κ°μ CSS μμ±μ νμν μ μμ§λ§, μ΄λ λ€μ κΈ°νμ λ€λ£° μ£Όμ μ
λλ€.
μ€μ©μ μΈ ν΅μ°°: λΉμ μ Flexbox ν¬κΈ° μ‘°μ μΉνΈ μνΈ
μμ½νμλ©΄, μ¦μ μ μ©ν μ μλ ν΅μ¬ μ¬νλ€μ λ€μκ³Ό κ°μ΅λλ€:
- μ§μ μΌλ‘ λμΌν λλΉμ μ΄μ μνλ€λ©΄: νμ
flex: 1
(flex: 1 1 0%
μ μΆμ½ν)μ μ¬μ©νμΈμ.flex-basis
λ₯Ό 0μΌλ‘ λ§λλ κ²μ΄ ν΅μ¬μ λλ€. - μμ΄ν
μ΄ μ€μ΄λ€μ§ μλλ€λ©΄: κ°μ₯ μ λ ₯ν μμΈμ μμμ μΈ
min-width: auto
μ λλ€. flex μμ΄ν μmin-width: 0
μ μ μ©νμ¬ μ½ν μΈ ν¬κΈ° μ΄νλ‘ μ€μ΄λ€ μ μλλ‘ νμΈμ. - `flex-shrink`λ κ°μ€μΉκ° μ μ©λλ€λ μ μ κΈ°μ΅νμΈμ:
flex-basis
κ° ν° μμ΄ν μ λμΌνflex-shrink
κ³μλ₯Ό κ°μ§ μμ μμ΄ν λ³΄λ€ μ λμ μΈ κ°μΌλ‘ λ λ§μ΄ μ€μ΄λλλ€. - `flex-basis`κ° μμ
λλ€: λͺ¨λ ν¬κΈ° κ³μ°μ μμμ μ μ€μ ν©λλ€. μ΅μ’
λ μ΄μμμ κ°μ₯ ν° μν₯μ λ―ΈμΉλ €λ©΄
flex-basis
λ₯Ό μ μ΄νμΈμ.auto
λ₯Ό μ¬μ©νλ©΄ μ½ν μΈ μ ν¬κΈ°μ λ°λ₯΄κ² λκ³ , νΉμ κ°μ μ¬μ©νλ©΄ λͺ μμ μΈ μ μ΄κ° κ°λ₯ν©λλ€. - λΈλΌμ°μ μ²λΌ μκ°νμΈμ: λ¨κ³λ₯Ό μκ°ννμΈμ. λ¨Όμ , κΈ°λ³Έ ν¬κΈ°λ₯Ό μ»μ΅λλ€. κ·Έλ° λ€μ, μ¬μ 곡κ°(μμ λλ μμ)μ κ³μ°ν©λλ€. λ§μ§λ§μΌλ‘, grow/shrink κ·μΉμ λ°λΌ κ·Έ 곡κ°μ λΆλ°°ν©λλ€.
κ²°λ‘
CSS Flexbox ν¬κΈ° μ‘°μ μκ³ λ¦¬μ¦μ μμμ μΈ λ§λ²μ΄ μλλλ€. μ μ μλκ³ , λ Όλ¦¬μ μ΄λ©°, λ―Ώμ μ μμ λ§νΌ κ°λ ₯ν μ½ν μΈ μΈμ μμ€ν μ λλ€. λ¨μν μμ±-κ° μμ λμ΄ κΈ°λ³Έ νλ‘μΈμ€λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨, μ¬λ¬λΆμ μμ κ°κ³Ό μ λ°ν¨μ κ°μ§κ³ λ μ΄μμμ μμΈ‘, λλ²κΉ λ° μ€κ³ν μ μλ λ₯λ ₯μ μ»κ² λ©λλ€.
λ€μμ flex μμ΄ν μ΄ μλͺ» λμν λ, μΆμΈ‘ν νμκ° μμ΅λλ€. λ¨Έλ¦ΏμμΌλ‘ μκ³ λ¦¬μ¦μ λ°λΌκ° λ³Ό μ μμ΅λλ€: `flex-basis`λ₯Ό νμΈνκ³ , μ½ν μΈ μ λ΄μ¬μ ν¬κΈ°λ₯Ό κ³ λ €νκ³ , μ¬μ 곡κ°μ λΆμνκ³ , `flex-grow` λλ `flex-shrink`μ κ·μΉμ μ μ©νμΈμ. μ΄μ μ¬λ¬λΆμ μ°μν λΏλ§ μλλΌ ν볡λ ₯ μλ, μ μΈκ³ μ΄λμμ μ€λ μ½ν μΈ μ λμ μΈ νΉμ±μ μλ¦λ΅κ² μ μνλ UIλ₯Ό λ§λ€ μ μλ μ§μμ κ°μΆκ² λμμ΅λλ€.