CSS λ μ΄μμμ΄λ λ€μν CSS μμλ€μ λ°°μΉνκ³ , λ°°μ΄νλ κ²μ λ§νλ€. CSS λ μ΄μμμλ ν¬κ² ν¬μ§μ (Position), νλ μ€λ°μ€(Flexbox), 그리λ(Grid)λΌλ μΈ κ°μ§ κ°λ μ΄ μλ€.
display
μμ±κΈ°λ³Έμ μΌλ‘ HTML, CSS μμλ€μ κΈμ νλ¦λλ‘ λ°°μΉλλ©° μ΄λ° μΌλ°μ μΈ κΈμ νλ¦μ λ Έλ§ νλ‘μ°(Normal Flow)λΌκ³ νλ€.
ν¬μ§μ μ λ Έλ§ νλ‘μ°μμ λ²μ΄λ μμΉλ₯Ό μ§μ μ νλ λ°©μμ΄κ³ , νλ μ€ λ°μ€λ λ°μ€λ₯Ό λ§λ€κ³ λ°©ν₯μ μ ν΄ μμλ₯Ό λ°°μΉνλ λ°©μμ΄λ€. 그리λλ λ°λνμ²λΌ μΉΈμ λλ λ€μ μμλ₯Ό λ°°μΉνλ λ°©μμ΄λ€.
display
μμ±λμ€νλ μ΄(
display
)λ κΈμ νλ¦μμ μμλ₯Ό μ΄λ»κ² λ°°μΉν μ§ μ νλ CSS μμ±μ΄λ©°, λͺ¨λ μμλ λμ€νλ μ΄ μμ±μ κΈ°λ³ΈμΌλ‘ κ°μ§κ³ μλ€. λμ€νλ μ΄ μμ±μλ λΈλ‘, μΈλΌμΈ, μΈλΌμΈλΈλ‘μ΄ μλ€.
λΈλ‘(display: block; ) | μΈλΌμΈ(display: inline; ) | μΈλΌμΈλΈλ‘(display: inline-block ) | |
---|---|---|---|
κΈ°λ³Έ ν¬κΈ° | μ’μ°λ‘ κ½μ°Έ | content μ λ± λ§κ² | content μ λ± λ§κ² |
λ°°μΉ | μμμ μλλ‘ | κΈ μ°λ λ°©ν₯ | κΈ μ°λ λ°©ν₯ |
width μ height | O | X | O |
margin κ³Ό padding | O | μΈλΌμΈ μ§νλ°©ν₯(κ°λ‘)λ§ κ°λ₯ | O |
position
μμ±κΈμ νλ¦μμ λ²μ΄λ μμλ₯Ό μμ λ‘κ² λ°°μΉν λ μ°λ μμ±μ΄λ€. position
μ μμ±κ°μ λ°λΌ μμΉλ₯Ό μ νλ κΈ°μ€μ΄ λ¬λΌμ§λ€. position: static;
μ΄ κΈ°λ³Έκ°μ΄κ³ , μ΄ κ²½μ° μμλ μλ μμ΄μΌ ν μμΉμ λ°°μΉλλ€. λν μ΄ position
μ κ°μ static
μ΄ μλ λ€λ₯Έ μμ±μΌλ‘ μ§μ νμ κ²½μ°(relative
, absolute
... λ±), ν¬μ§μ
λ λμλ€κ³ λ§νλ€.
μμΉλ₯Ό μ νλ κΈ°μ€μ λν΄
top
,right
,bottom
,left
μμ±μΌλ‘ μμΉλ₯Ό μ ν μ μλ€. λν λ€ κ°μ§ κ°μ΄ λͺ¨λ λκ°μ κ²½μ°inset
μμ±μ μΈ μ μλ€.
position: relative;
μμμ μλ μμΉλ₯Ό κΈ°μ€μΌλ‘ λ°°μΉνλ€. μ΄λ μμμ μλ μ리λ κ·Έλλ‘ μ°¨μ§νκ³ μλ€.
.green { position: relative; top: 15px; left: 10px; }
position: absolute;
ν¬μ§μ λμ΄ λ κ°μ₯ κ°κΉμ΄ μ‘°μ μμλ₯Ό κΈ°μ€μΌλ‘ λ°°μΉλλ€.
μλ μμμμλ κ°μ₯ κ°κΉμ΄ μ‘°μ μμμΈ.red
κ°relative
ν¬μ§μ μ΄λ―λ‘, μμμΈ.blue
λ.red
λ₯Ό κΈ°μ€μΌλ‘ λ°°μΉλλ€. μ΄λ.blue
λ μλ μμ΄μΌ ν μμΉμμ μμ ν λΉ μ§κ² λμ΄ μμμ μλ μ리λ μ°¨μ§νμ§ μλλ€.
.red { position: relative; top: 0; left: 10px; } .blue { position: absolute; right: 10px; bottom: 15px; }
position: fixed;
λΈλΌμ°μ νλ©΄μ κΈ°μ€μΌλ‘ κ³ μ λλ€. λν μλ μμ΄μΌ ν μμΉμμ μμ ν λΉ μ§κ² λλ―λ‘, μμμ μλ μ리λ μ°¨μ§νμ§ μλλ€. μ£Όλ‘ λ΄λΉκ²μ΄μ λ°λ₯Ό λ§λ€ λ μμ£Ό μ¬μ©νλ€.
position: sticky;
static
μ²λΌ μλ μμΉμ λ°°μΉλμ΄ μλ€κ°, μ ν΄μ§ μμΉμ λΈλΌμ°μ κ° μ€ν¬λ‘€λλ©΄fixed
μ²λΌ κ³ μ λμ΄ λ°°μΉλλ€. κΈ°λ³Έμ μΌλ‘static
μ²λΌ λ°°μΉλκΈ° λλ¬Έμ μμμ μλ μ리λ₯Ό μ°¨μ§νλ€.
λ€μ μ½λλ λΈλΌμ°μ νλ©΄ κΈ°μ€μΌλ‘top: 0
λ§νΌ λ¨μ΄μ‘μ λ νλ©΄μ λ¬λΌλΆμμ μλ―Ένλ€.position: sticky; top: 0;
λν
sticky
μμ±μ μ§μ ν μμλ λΆλͺ¨μμμ μμλλ νΉμ±μ κ°μ§λ―λ‘, λΆλͺ¨μμκ° νλ©΄ λ°μΌλ‘ μ¬λΌμ§λ©΄ λ°λΌμ μ¬λΌμ§λ€.
z-index
μμμ μλ€ μ λ ¬μ μ ν λ μ°λ μμ±μ΄λ€. μ λ ¬ μμμ΄κΈ° λλ¬Έμ λ¨μ μμ΄ μ«μκ°λ§ μ°λ©°, κ°μ΄ λμμλ‘ νλ©΄μ μμͺ½μ 보μΈλ€. λ§μ½ κ°μ΄ κ°μΌλ©΄ μ½λμ μμμ λ°λΌ μλ μ€μ μλ μμκ° μμͺ½μ 보μΈλ€. κΈ°λ³Έκ°μ
z-index: auto;
μ΄λ€.
display: flex;
)νλ μ€ λ°μ€λ 1μ°¨μμΌλ‘ μμλ₯Ό λ°°μΉνλ€. μ¦ κ°λ‘ λλ μΈλ‘ λ°©ν₯μΌλ‘ λ°°μΉνλ λ°©μμ λ§νλ€. νλ μ€ λ°μ€λ₯Ό μ¬μ©νκΈ° μν΄μλ μ°μ λ°°μΉν λ°©ν₯(flex-direction
)μ μ ν ν λ€μκ³Ό κ°μ μμ±λ€μ νμ©ν μ μλ€.
flex-direction
: νλ μ€ λ°μ€ λ°°μΉ λ°©ν₯ (row λλ column)
justify-content
,align-items
: κΈ°λ³ΈμΆ, κ°λ‘μΆ μ λ ¬
flex-wrap
: μμκ° λμΉ λ
gap
: κ°κ²©
flex-grow
,flex-shrink
: ν¬κΈ°λ₯Ό λμ΄κ±°λ μ€μΌ λ
flex-basis
νλ μ€ λ°μ€λ₯Ό μ¬μ©νκΈ° μν΄ κΈ°λ³Έ λ°°μΉ λ°©ν₯(
flex-direction
)μ μ ν΄μΌ νλ€..box { display: flex; flex-direction: row; /* rowλ κ°λ‘, columnμ μΈλ‘λ‘ λ°°μΉ. κΈ°λ³Έκ°μ row */ }
μ΄λ κ²
flex-direction
μ κΈ°μ€μΌλ‘ μλ κ·Έλ¦Όκ³Ό κ°μ΄ κΈ°λ³Έ μΆ(Main Axis)κ³Ό κ΅μ°¨ μΆ(Cross Axis)μ΄ μ ν΄μ§λ€.
λν κΈ°λ³Έ μΆ μ λ ¬λ‘justify-content
μμ±κ³Ό κ΅μ°¨ μΆ μ λ ¬λ‘align-items
μμ±μ μ¬μ©ν μ μλ€..box { display: flex; flex-direction: row; justify-content: flex-start; /* κΈ°λ³Έκ° flext-start */ align-items: stretch; /* κΈ°λ³Έκ° stretch */ }
flex-wrap
νλ μ€ λ°μ€ μμμ μμκ° λμΉ λ,
flex-wrap: wrap
μΌλ‘ μ€μ νλ©΄ κ΅μ°¨ μΆ λ°©ν₯μΌλ‘ λμ΄κ°μ λ°°μΉλλ€..box { flex-wrap: wrap; }
gap
κΈ°λ³Έ μΆ, κ΅μ°¨ μΆκ³Όλ κ΄κ³ μμ΄
μΈλ‘ κ°λ‘
μμΌλ‘ κ°μ μ λ ₯νλ€..box { gap: 20px 10px; } .box2 { gap: 20px; /* μ«μλ₯Ό νλλ§ μ°λ©΄, λͺ¨λ λ°©ν₯μ κ°κ²©μ μ§μ ν μ μμ */ }
flex-grow
& flex-shrink
μμλ₯Ό λλ €μ μ±μ°κΈ°
flex-grow
κΈ°λ³Έκ°μ 0μ΄λ€.
flex-grow
κ°μ΄ ν΄μλ‘ μλμ μΌλ‘ λ§μ΄ λμ΄λλ€.
μμλ₯Ό μ€μ¬μ μ±μ°κΈ°
flex-shrink
κΈ°λ³Έκ°μ 1μ΄λ€. μμλ€μ ν¬κΈ°κ° 컀μ λμΉλ κ²½μ°, μμμ ν¬κΈ°λ₯Ό μ€μ¬ νλ μ€ λ°μ€ μμ μ±μ΄λ€. κΈ°λ³Έκ°μ΄ 1μ΄κΈ° λλ¬Έμ κΈ°λ³Έμ μΌλ‘ μμλ₯Ό μ€μ¬μ λ°°μΉνκ³ , 0μΌλ‘ μ§μ νλ©΄ ν¬κΈ°κ° μ€μ΄λ€μ§ μλλ€. λν
flex-shrink
κ°μ΄ ν΄μλ‘ μλμ μΌλ‘ λ§μ΄ μ€μ΄λ λ€.
relative
, sticky
λ μμμ μλ μ리λ₯Ό μ°¨μ§νκΈ° λλ¬Έμ νλ μ€λ°μ€μ μν₯μ λ°μ§λ§, absolute
μ fixed
λ μμμ μλ μ리μμ μμ ν μ μΈλκΈ° λλ¬Έμ νλ μ€λ°μ€λ μκ΄μμ΄ λ°°μΉλλ€.
그리λ (display: grid;)
그리λλ 2μ°¨μμΌλ‘ μμλ₯Ό λ°°μΉ
그리λ λΌμΈ(κ°λ°μ λꡬμμ 보μ΄λ κ²μ 그리λ λΌμΈμ. μ
μλ!!!!), 그리λ μ
grid-template-columns
grid-template-rows
grid-template
.box {
grid-template:
100px 200px 100px / /* rows */
100px 200px 100px; /* columns */
}
κΈ°λ³Έμ μΌλ‘ 그리λ ν¬κΈ°λ κ³ μ
fr
: 그리λ κ³΅κ° μμμ λΉμ¨μ λ§κ² μ€μ κ°λ₯(fraction)
minmax(x, y)
: μ΅μ(x), μ΅λ(y) ν¬κΈ° μ€μ
repeat(x, y)
: xλ₯Ό yλ²
gap: μΈλ‘ κ°λ‘;
λλ gap: λͺ¨λ κ°κ²©;
- νλ μ€λ°μ€μ κ°κ³Ό κ°μ μμ±μ΄λ€. 그리λ μ
κ°μ κ°κ²©μ μ€λ€.
grid-auto-rows
grid-auto-columns
grid template
μμ rows
λλ columns
μμ±μ λͺ
μνμ§ μμμ λ
auto-rows
λλ auto-clumns
κ°μ μ μ©νλ€.
grid-row
grid-column
그리λ 컨ν
μ΄λ μμμ grid-template-areas
μμ± μ€μ
그리λ μ
μμλ€μ grid-area
μμ±μΌλ‘ μ΄λ¦ μ€μ