.png)
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 λ λΉμ°νλ μμ± κ°μ λ°λΌ κ·Έ μμμ νμ νμμ κ²°μ νκΈ°μ, μ΄μ΄μ ν΄λΉ μμ± κ° μ€ λνμ μΈ κ°μ λν΄ μμ보μ.
blockblock μ ν΄λΉ μμλ₯Ό λΈλ‘ μμλ‘ μ§μ νλ©°, λΈλ‘ μμμ λν λ΄μ©μ λ€μκ³Ό κ°λ€.
width, height, margin, padding)μ΄ κ°λ₯νλ€.<div> , <p> , <h1> λ±μ νκ·Έκ° μ΄μ ν΄λΉνλ€.
div {
background-color: red; /* μμ ꡬλΆμ μν¨ */
width: 300px;
height: 300px;
margin: 100px;
padding: 30px;
}
μμμ <div> νκ·Έμ CSSλ₯Ό μ μ©ν μμμ΄λ€. μμμ κ°μ΄ width κ° λΆν° μμν΄μ padding κ° κΉμ§ μννκ² μ μ©λ λͺ¨μ΅μ΄λ€.
inlineinline κ°μ ν΄λΉ μμλ₯Ό μΈλΌμΈ μμλ‘ μ§μ νλ©°, μΈλΌμΈ μμμ λν λ΄μ©μ λ€μκ³Ό κ°λ€.
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-blockinline-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 κ³Ό κ°μ κΈ°λ₯μ κ°λλ€.
flexflex λ 1μ°¨μ μμ μμλ€μ λ°°μΉν λ νΈλ¦¬νκ² μ¬μ©ν μ μλ μμ± κ°μ΄λ€. μ΄λ₯Ό λ°°μ΄νκ³ μ νλ μμλ€μ λΆλͺ¨(container)μμμ μ μ©νλ©΄ λμμ λͺ¨λ μ§κ³ μμλ€μ΄ flex νλͺ©μ΄ λλ€. μ΄ν μ¬λ¬ μμ± κ°μ ν΅ν΄, ν΄λΉ μμλ€μ μμ λ‘κ² λ°°μ΄ν μ μλ€λ μ μ΄ νΈλ¦¬νλ€λ κ²μ΄λ€.
μ΄μ΄μ display : flex μ ν¨κ» μ¬μ©νλ μμ±κ³Ό κ°λ€μ λν΄ μμ보μ.
justify-contentκ°λ‘μ μμ μ λ ¬μ μ μ
align-itemsμΈλ‘μ μμ μ λ ¬μ μ μ
flex-direction컨ν μ΄λ λ΄λΆμμ μμλ€μ μ λ ¬ λ°©ν₯μ μ μ
order컨ν μ΄λ κ° μμμ μμλ₯Ό λ°κΏ μ μμ
flex-wrap & flex-flowflex-wrap μ μμμ μ λ ¬μμ μ€ κ΅¬λΆμ μ 무λ₯Ό μ μνκ³ , flex-flow λ flex-wrap κ³Ό flex-direction μ ν©μ³ λ κ°μ λμμ λμ
(flex-flow : [direction] [wrap])νλ€.
align-contentμ¬λ¬ μ€ μ¬μ΄μ κ°κ²©μ μ§μ
gridflex κ° 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 μμ± κ°μ λν΄ μμ보μ.
staticstatic μ position μ κΈ°λ³Έ κ°μΌλ‘, μμλ₯Ό μΌλ°μ μΈ λ¬Έμ νλ¦μ λ°λΌ λ°°μΉνλ κ²μ μλ―Ένλ€. static μ κ²½μ°μλ top, right, bottom, left, z-index μμ±λ€μ μν₯μ λ°μ§ μλλ€.

μ κ²½μ° top μμ±μ κ°μ λμ
νμ§λ§, κ²°κ³Όλ‘ λ°μλμ§ μμ λͺ¨μ΅μ΄λ€.
relativerelative λ μμ κ°μ΄ λ¬Έμμ νλ¦μ λ°λ₯΄μ§λ§, μμ μ μμΉλ₯Ό κΈ°μ€μΌλ‘ top, right, bottom, left, z-index μμ±λ€μ λ°λΌ μμμ μμΉκ° λ³κ²½λ μ μλ€.

static κ³Ό κ°μ top κ°μ ν λΉνμ§λ§, relative μ κ²½μ° μμμ μμΉκ° λ³κ²½λμλ€. μ¬ν κ°μ΄ μ£Όμ΄μ§μ§ μμΌλ©΄ relative λν static κ³Ό κ°μ κΈ°λ₯μ νλ€.
κ·Έλ¦¬κ³ relative μ κ²½μ°μ μμ μ μμΉλ₯Ό κΈ°μ€μΌλ‘ νκΈ° λλ¬Έμ λ€λ₯Έ μμμ μμΉμ μν₯μ μ£Όμ§ μλλ€λ μ μ΄ μ€μνλ€.

μμ κ°μ΄ body μ μμλ₯Ό μΆκ°ν΄λ λ¬Έμμ νλ¦μ λ°λΌ μ ν΄μ§ μμ μ μμΉμμλ§ μμ§μ΄κΈ° λλ¬Έμ λ€λ₯Έ μμμ μμΉμ μν₯μ μ£Όμ§ μλλ€. λν, κ·Έλ κΈ°μ μμκ° κ²ΉμΉ μ μλ€λ μ μ μ μν΄μΌ νλ€. μ κ²½μ°μ top κ°μΌλ‘ λ§μ΄λμ€ κ°μ λμ
νλ€λ©΄ μμκ° κ²ΉμΉ μ μλ€.
absoluteabsolute λ μΌλ°μ μΈ λ¬Έμ νλ¦μ λ°λ₯΄μ§ μκ³ μ μΈλλ€. κ·Έλ¦¬κ³ κ°μ₯ κ°κΉμ΄ μ‘°μ μμμ λν΄ μλμ μΌλ‘ λ°°μΉνλ€.

μ κ²½μ° κ°μ₯ κ°κΉμ΄ μ‘°μ μμμΈ first div λ₯Ό κΈ°μ€μΌλ‘ absolute div κ° top : 100px μ μμΉ ν¨μ μ μ μλ€.
μ μμμμ second-div κ° μ¬λΌμ Έλ absolute μ μμΉμλ λ³ν¨μ΄ μμ§λ§, first div κ° μ¬λΌμ§ κ²½μ° κ·Έ λ€μ κ°κΉμ΄ μ‘°μ μμμΈ second-div λ₯Ό κΈ°μ€μΌλ‘ μμΉνκ² λλ€.
λ§μ½ μ‘°μ μμκ° μ‘΄μ¬νμ§ μλλ€λ©΄, body λ₯Ό κΈ°μ€μΌλ‘ μμΉλ₯Ό μμ§μΈλ€.

fixedfixed λ 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 μ€λͺ