CSS λ μ΄μμμ λν λ΄μ©μΌλ‘
Box-model
,display
,flex
,position
λ±μ λν λ΄μ©μ ν¬ν¨νκ³ μμ΅λλ€. π
λ μ΄μμ(layout)μ μΆν, κ±΄μΆ λ±μ λΆμΌμμ μκ°μ ν¨κ³Όλ μ¬μ© λͺ©μ μ κ³ λ €νμ¬ κ΅¬μ±Β·λ°°μ΄νλ λ±μ μΌμ΄λΌλ μ¬μ μ μ μλ₯Ό κ°λλ°, μ΄μ μ μ¬νκ² CSSμ λ μ΄μμμ μλ§μ μμΉμ μμλ€μ λ°°μ΄νλ κ²μ΄λ€. λ μ΄μμμ΄ λ³λλ‘ μ§μ λμ§ μμ μνμμλ normal flow(μΌλ° λμ΄)λ‘ λ°°μΉλλ€.
normal flow(μΌλ° λμ΄)λ CSSλ₯Ό μ μ©νμ§ μμ κ²½μ°, μΉνμ΄μ§ μμκ° λ°°μΉλλ λ°©μμ μλ―Ένλ€. λ³΄λ€ λμ μΉνμ΄μ§λ normal flow μνμμ μ½λ κ²μ΄ κ°λ₯νκ³ , κ²¬κ³ νκ³ κ΅¬μ‘°ν λ λ¬Έμλ‘ μμνλ κ²μ΄λ€.
normal flow μνμμ μ½κΈ° κ°λ₯νλ€λ μ μ κΈ°λ₯μ΄ μ νλ λΈλΌμ°μ μμ μ¬μ©μ λ¬΄λ¦¬κ° μκ±°λ, νμ΄μ§ μ½ν μΈ λ₯Ό μ리 λ΄ μ½λ μ€ν¬λ¦° 리λμ κ°μ κΈ°λ₯μ μ¬μ©νλ μ μ λ€μκ² μ΄λ₯Ό κ°λ₯μΌ νλ(readable) μ½ν μΈ λ₯Ό λ§λ€ μ μλ€λ κ²μ΄λ€.
κ·Έλ κΈ°μ λ μ΄μμ λ³κ²½μ μμ΄μλ μ΅λν normal flowμ λ§μΆ° νλ ₯ ν¨μ΄ μ§ν₯λλ€.
μ΄λ¬ν λ μ΄μμμ μ΄ν΄νκΈ° μν΄ κΈ°λ³Έμ μΌλ‘ κ° μμμ λν μμμ΄ μ΄λ»κ² μ€μ λλ μ§μ λν΄ μμ보μ.
Box model(λ°μ€ λͺ¨λΈ)μ λ¬Έμ λ μ΄μμ κ³μ°μμ κ°κ°μ μμλ₯Ό μ¬κ°ν λ°μ€λ‘ νννλ κ²μ΄λ€.
λ°μ€ λͺ¨λΈμ κ°λ°μ λꡬλ₯Ό ν΅ν΄ μμ κ°μ΄ νμΈν μ μκ³ , μμͺ½μμ λΆν°, μ½ν
μΈ (contents), ν¨λ©(padding
), 보λ(border
), λ§μ§(margin
)μ λν μμμ μ μνκ³ μλ€. κ° μμμ κ°λ¨νκ² μ μνλ©΄ λ€μκ³Ό κ°λ€.
μ΄λ κ² λ°μ€ λͺ¨λΈμ ν΅ν΄ κ° μμκ° νΉμ μμΉμμ μΌλ§ λ§νΌμ ν¬κΈ°λ₯Ό μ°¨μ§ν μ μλ μ§λ₯Ό μ§μ ν μ μλ€.
μ΄μ λ°μ€ λͺ¨λΈμ λν μ§μμ λ°νμΌλ‘ HTML νκ·Έμ display
μ λν λ΄μ©μ block
κ³Ό inline
λ±μ κ°λ
κ³Ό ν¨κ» μμ보μ.
display
π₯οΈHTML μμ± μ΄ν, μ μ¬μ§ κ°μ΄ μμ μ΄λμ μν΄ display
κ°μ μ€μ ν νμκ° μλ€. CSSμ display
λ μμκ° μ΄λ»κ² νμλ μ§μ λν΄ μ ννλ μμ±μ΄λ€. μ΄λ₯Ό ν΅ν΄ μμμ μΈκΈν normal flow μμμ μμκ° μμΉνλ λ°©μμ λ³κ²½ν μ μλ€.
display
λ λΉμ°νλ μμ± κ°μ λ°λΌ κ·Έ μμμ νμ νμμ κ²°μ νκΈ°μ, μ΄μ΄μ ν΄λΉ μμ± κ° μ€ λνμ μΈ κ°μ λν΄ μμ보μ.
block
block
μ ν΄λΉ μμλ₯Ό λΈλ‘ μμλ‘ μ§μ νλ©°, λΈλ‘ μμμ λν λ΄μ©μ λ€μκ³Ό κ°λ€.
width
, height
, margin
, padding
)μ΄ κ°λ₯νλ€.<div>
, <p>
, <h1>
λ±μ νκ·Έκ° μ΄μ ν΄λΉνλ€.div {
background-color: red; /* μμ ꡬλΆμ μν¨ */
width: 300px;
height: 300px;
margin: 100px;
padding: 30px;
}
μμμ <div>
νκ·Έμ CSSλ₯Ό μ μ©ν μμμ΄λ€. μμμ κ°μ΄ width
κ° λΆν° μμν΄μ padding
κ° κΉμ§ μννκ² μ μ©λ λͺ¨μ΅μ΄λ€.
inline
inline
κ°μ ν΄λΉ μμλ₯Ό μΈλΌμΈ μμλ‘ μ§μ νλ©°, μΈλΌμΈ μμμ λν λ΄μ©μ λ€μκ³Ό κ°λ€.
width
μ height
λ λ―Έμ μ©. padding
μ μ λ°©ν₯ μ μ©λκ³ , margin
μ right
, left
λ§)body {
padding-top: 30px;
}
span {
background-color: red;
width: 300px;
height: 300px;
margin: 100px;
padding: 30px;
}
μμμ <span>
νκ·Έμ CSSλ₯Ό μ μ©ν μμλ€. λͺ¨λ μμλ μμμ μ€λͺ
ν λ°μ κ°μ΄ μ μ©λμ§λ§, padding
μ κ²½μ° top
, bottom
μ ν΄λΉ μμμ μ μνμ§λ§ μ°¨μ§νμ§λ μλλ€.
inline
μ margin
μ νΉμ§
inline
μmargin-top
κ³Όmargin-bottom
μ κ²½μ° ν΄λΉ μμμ μ μνμ§λ§ μ°¨μ§νμ§λ μλλ€λ ννμ μ¬μ©νλλ°, μ΄λ μ μ½λμμbody
νκ·Έμ λ€μ΄κ° CSS μμλ₯Ό μ κ±°νλ©΄ μ μ μλ€.
μ μμμ κ²½μ°μbody
μpadding-top
μ ν΅ν΄ μ΅μλ¨μ μ¬λ°±μ μ€ μνμΈλ°, ν΄λΉ μ¬λ°±μ΄ μ¬λΌμ§λ©΄span
μμμ μ μͺ½ ν¨λ© λΆλΆμ΄ μ¬λΌμ§ κ²μΌλ‘ 보μΈλ€.
μ΄λ ν΄λΉ μμμ μ μλ νμ§λ§, λ€λ₯Έ μμλ₯Ό λ°μ΄λ΄μ§ μλλ€λ μλ―Έλ‘ μ°¨μ§νμ§ μλλ€κ³ μ μνμλ€.
λ°μ€ λͺ¨λΈμ λν MDN λ΄μ©μ 보면, λ°μ€μ μΈλΆ λμ€νλ μ΄ μ νμ΄inline
μΌ κ²½μ°λ₯Ό μ€λͺ νλ λΆλΆμμ μ΄μ²λΌ μ μλμ΄ μλ€.
"ν¨λ©κ³Ό μ¬λ°±, ν λ리λ λ€λ₯Έ μΈλΌμΈ λ°μ€λ€μ΄ λ€λ₯Έ λ°μ€λ‘λΆν° λ©μ΄μ§μ§κ² νμ§ μμ΅λλ€."
μ μ© κ²°κ³Ό λͺ¨λ λ°©ν₯μ ν¨λ©μ΄ μλ,padding-right
μpadding-left
μ κ²½μ°μ ν΄λΉ μμμ μ°¨μ§νλ κ²μΌλ‘ νμΈλμλ€. μλ μμμ κ²½μ°μ,span
λ΄λΆμspan
νκ·Έλ₯Ό μ½μ νμ¬ λ³λμ ν΄λμ€λ₯Ό λΆμ¬ν λ€, ν΄λΉ ν΄λμ€ μμμλ§ μμ κ°μ CSS μμλ₯Ό μΆκ°νλ€.
... <body> <span><span class = 'span'>aaaaaaaa</span> aaaaaaaa</br>aaaaaaaa</span> </body> ...
inline-block
inline-block
μ inline
κ³Ό block
μ μ€κ° ννμ΄λ©° λ€μκ³Ό κ°μ νΉμ§μ κ°λλ€.
width
, height
, margin
, padding
)μ΄ κ°λ₯νλ€. .span {
display: inline-block;
background-color: red;
width: 300px;
height: 300px;
padding: 30px;
}
μ inline
μ margin
μ λν λ΄μ©μμ λμλ μμμμ display
κ°μ inline-block
μΌλ‘ λ³κ²½ν μμλ€. 보μ΄λ λ°μ κ°μ΄ ν΄λμ€κ° μ§μ λ μμμ λν΄μ width
μ height
μ λν λΆλΆμ΄ λͺ
νν μ μλμ΄ μκ³ , padding
μ λν΄μλ λͺ
νν μ μ©λ κ²μ μ μ μλ€.
μ΄μ²λΌ ν¬κΈ° λ³κ²½μ μμμμ block
κ³Ό κ°μ κΈ°λ₯μ κ°λλ€.
flex
flex
λ 1μ°¨μ μμ μμλ€μ λ°°μΉν λ νΈλ¦¬νκ² μ¬μ©ν μ μλ μμ± κ°μ΄λ€. μ΄λ₯Ό λ°°μ΄νκ³ μ νλ μμλ€μ λΆλͺ¨(container)μμμ μ μ©νλ©΄ λμμ λͺ¨λ μ§κ³ μμλ€μ΄ flex
νλͺ©μ΄ λλ€. μ΄ν μ¬λ¬ μμ± κ°μ ν΅ν΄, ν΄λΉ μμλ€μ μμ λ‘κ² λ°°μ΄ν μ μλ€λ μ μ΄ νΈλ¦¬νλ€λ κ²μ΄λ€.
μ΄μ΄μ display : flex
μ ν¨κ» μ¬μ©νλ μμ±κ³Ό κ°λ€μ λν΄ μμ보μ.
justify-content
κ°λ‘μ μμ μ λ ¬μ μ μ
align-items
μΈλ‘μ μμ μ λ ¬μ μ μ
flex-direction
컨ν μ΄λ λ΄λΆμμ μμλ€μ μ λ ¬ λ°©ν₯μ μ μ
order
컨ν μ΄λ κ° μμμ μμλ₯Ό λ°κΏ μ μμ
flex-wrap
& flex-flow
flex-wrap
μ μμμ μ λ ¬μμ μ€ κ΅¬λΆμ μ 무λ₯Ό μ μνκ³ , flex-flow
λ flex-wrap
κ³Ό flex-direction
μ ν©μ³ λ κ°μ λμμ λμ
(flex-flow : [direction] [wrap]
)νλ€.
align-content
μ¬λ¬ μ€ μ¬μ΄μ κ°κ²©μ μ§μ
grid
flex
κ° 1μ°¨μ λ μ΄μμμ μν κ²μ΄λΌλ©΄, grid
λ 2μ°¨μ λ μ΄μμμ μν κ²μ΄λ€. νκ³Ό μ΄μ κΈ°μ€μΌλ‘ μμλ€μ λ°°μ΄νλ κ²μ΄λ€.
grid
λ λ€μκ³Ό κ°μ μμ±λ€μ μ¬μ©νμ¬ μμλ€μ λ°°μ΄ν μ μλ€.
grid-template-columns
: μ΄μ κ°―μμ ν¬κΈ°λ₯Ό μ μgrid-template-rows
: νμ κ°―μμ ν¬κΈ°λ₯Ό μ μgrid-gap
: μμ κ° κ°κ²©μ μ μ<div class="wrapper">
<div class="box1">νλ</div>
<div class="box2">λ</div>
<div class="box3">μ
</div>
<div class="box4">λ·</div>
<div class="box5">λ€μ―</div>
<div class="box6">μ¬μ―</div>
</div>
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
grid-gap: 10px;
}
λν, μμ μμλ€μ λν΄ CSS κ°μ λΆμ¬νμ¬ κ° μμμ λ©΄μ μ λν΄ μ μν μλ μλ€.
<div class="wrapper">
<div class="box1">νλ</div>
<div class="box2">λ</div>
<div class="box3">μ
</div>
</div>
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
grid-gap: 10px;
}
.box1 {
grid-column: 2 / 4;
grid-row: 1;
}
.box2 {
grid-column: 1;
grid-row: 1 / 3;
}
.box3 {
grid-row: 2;
grid-column: 3;
}
μμ κ°μ΄ grid-row
μ grid-column
μ ν΅ν΄, κ° μμκ° μ°¨μ§νλ μμμ μ μνμ¬ grid
λ΄ λΉμ¨μ μ‘°μ ν μ μλ€.
position
πΆposition
μ λ¬Έμ μμ μμλ₯Ό λ°°μΉνλ λ°©λ²μ μλ―Ένλ€. position
μμ± κ°μ κΈ°μ€μ΄ λλ μ€μν μμ μ€ νλλ λ¬Έμμ νλ¦μ λ°λ₯΄λ μ§μ λν μ¬λΆμΌ κ²μ΄λ€. ν΄λΉ λΆλΆμ μ§μ€νλ©° position
μμ± κ°μ λν΄ μμ보μ.
static
static
μ position
μ κΈ°λ³Έ κ°μΌλ‘, μμλ₯Ό μΌλ°μ μΈ λ¬Έμ νλ¦μ λ°λΌ λ°°μΉνλ κ²μ μλ―Ένλ€. static
μ κ²½μ°μλ top
, right
, bottom
, left
, z-index
μμ±λ€μ μν₯μ λ°μ§ μλλ€.
μ κ²½μ° top
μμ±μ κ°μ λμ
νμ§λ§, κ²°κ³Όλ‘ λ°μλμ§ μμ λͺ¨μ΅μ΄λ€.
relative
relative
λ μμ κ°μ΄ λ¬Έμμ νλ¦μ λ°λ₯΄μ§λ§, μμ μ μμΉλ₯Ό κΈ°μ€μΌλ‘ top
, right
, bottom
, left
, z-index
μμ±λ€μ λ°λΌ μμμ μμΉκ° λ³κ²½λ μ μλ€.
static
κ³Ό κ°μ top
κ°μ ν λΉνμ§λ§, relative
μ κ²½μ° μμμ μμΉκ° λ³κ²½λμλ€. μ¬ν κ°μ΄ μ£Όμ΄μ§μ§ μμΌλ©΄ relative
λν static
κ³Ό κ°μ κΈ°λ₯μ νλ€.
κ·Έλ¦¬κ³ relative
μ κ²½μ°μ μμ μ μμΉλ₯Ό κΈ°μ€μΌλ‘ νκΈ° λλ¬Έμ λ€λ₯Έ μμμ μμΉμ μν₯μ μ£Όμ§ μλλ€λ μ μ΄ μ€μνλ€.
μμ κ°μ΄ body
μ μμλ₯Ό μΆκ°ν΄λ λ¬Έμμ νλ¦μ λ°λΌ μ ν΄μ§ μμ μ μμΉμμλ§ μμ§μ΄κΈ° λλ¬Έμ λ€λ₯Έ μμμ μμΉμ μν₯μ μ£Όμ§ μλλ€. λν, κ·Έλ κΈ°μ μμκ° κ²ΉμΉ μ μλ€λ μ μ μ μν΄μΌ νλ€. μ κ²½μ°μ top
κ°μΌλ‘ λ§μ΄λμ€ κ°μ λμ
νλ€λ©΄ μμκ° κ²ΉμΉ μ μλ€.
absolute
absolute
λ μΌλ°μ μΈ λ¬Έμ νλ¦μ λ°λ₯΄μ§ μκ³ μ μΈλλ€. κ·Έλ¦¬κ³ κ°μ₯ κ°κΉμ΄ μ‘°μ μμμ λν΄ μλμ μΌλ‘ λ°°μΉνλ€.
μ κ²½μ° κ°μ₯ κ°κΉμ΄ μ‘°μ μμμΈ first div
λ₯Ό κΈ°μ€μΌλ‘ absolute div
κ° top : 100px
μ μμΉ ν¨μ μ μ μλ€.
μ μμμμ second-div
κ° μ¬λΌμ Έλ absolute
μ μμΉμλ λ³ν¨μ΄ μμ§λ§, first div
κ° μ¬λΌμ§ κ²½μ° κ·Έ λ€μ κ°κΉμ΄ μ‘°μ μμμΈ second-div
λ₯Ό κΈ°μ€μΌλ‘ μμΉνκ² λλ€.
λ§μ½ μ‘°μ μμκ° μ‘΄μ¬νμ§ μλλ€λ©΄, body
λ₯Ό κΈ°μ€μΌλ‘ μμΉλ₯Ό μμ§μΈλ€.
fixed
fixed
λ absolute
μ λ§μ°¬κ°μ§λ‘ λ¬Έμμ νλ¦μμ μ μΈλμ§λ§, fixed
μ κ²½μ° μ€ν¬λ¦° λ·°ν¬νΈλ₯Ό κΈ°μ€μΌλ‘ ν μμΉμμ λ°°μΉλλ©°, μ€ν¬λ‘€ λμ΄λ μμ§μ΄μ§ μλλ€.
λμ€νλ μ΄ μμ νμ μμμ μλ―Ένλ©°, κ°λ¨νκ² μΉνμ΄μ§κ° λΈλΌμ°μ νλ©΄μμ μ€μ λ‘ νμλλ μμμ μλ―Ένλ€.
λ·°ν¬νΈμ λν μ¬νμhead
νκ·Έμμmeta
νκ·Έλ₯Ό ν΅ν΄ μ€μ ν μ μλ€.
μ μμλ₯Ό 보면 μλ¨ λ©λ΄μ ν΄λΉνλ ν
μ€νΈ μμλ€μ΄ μ€ν¬λ‘€μ΄ μ§ν λ¨μλ κ³ μ λμ΄ μλ κ²μ μ μ μλ€. fixed
κ°μ μ¬μ©νλ©΄ ν΄λΉ μμμ κ°μ΄ μμλ₯Ό λ°°μΉν μ μλ€.
CSS layout : MDN Web Docs : CSS λ μ΄μμ μ λ¬Έμ
CSS box model : MDN Web Docs : μμ λͺ¨λΈ
CSS position : MDN Web Docs : position
CSS Position : Suyeon Bakλ medium : (CSS) CSS Position μ€λͺ