[CSS] CSS Layout
CSS Layout
ref: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout
CSS layout overview
λ³΄ν΅ νλ¦(normal flow)
- νμ΄μ§ λ μ΄μμμ λΈλΌμ°μ κ° κΈ°λ³Έκ°μΌλ‘ λ°°μΉνλ λ°©λ²
- μμ€ μ½λμ λνλλ μμ κ·Έλλ‘ HTML μμκ° νμλλ€. μμ μ§ν©μ΄ μλ μμ λ°λ‘ μλ λνλλ κ²μ block μμλΌκ³ κΈ°μ νκ³ , inline μμμ μλ°λλ€.
- CSSμμ μμκ° λ°°μΉλλ λ°©μμ λ³κ²½μν€λ λ©μλλ λ€μκ³Ό κ°λ€.
- diplay μμ± β
block
,inline
,inline-block
- ref - The box model: https://developer.mozilla.org/ko/docs/Learn/CSS/Building_blocks/The_box_model
- Floats β block μμ€ μμκ° μ΄λ€ μμμ ν μͺ½ μΈ‘λ©΄μΌλ‘ λ°λ €λλλ‘ ν μ μλ€.
- position μμ± β λ€λ₯Έ μμ λ΄λΆμ λ€μ΄κ° μμμ μ νν μμΉλ₯Ό μ μ΄ν μ μκ² ν΄μ€λ€.
- table layout β HTML table μ€νμΌ μ§μ μ μν κΈ°λ₯μ΄κΈ°λ νλ
display:table
κ³Ό κ΄λ ¨λ μμ±μ μ¬μ©νμ¬ λΉν μ΄λΈ μμμλ μ¬μ©λ μ μλ€. - Multi-column layout
- μ λ¬Έμμ λ³Ό μ μλ column ννλ‘ λ°°μΉλλλ‘ λ§λ€ μ μλ€.
- diplay μμ± β
display μμ±
- λ³΄ν΅ νλ¦(normal flow)μμ λͺ¨λ μμλ ν κ°μ§
display
μμ±κ°μ κ°κ³ μμΌλ©°, ν΄λΉ μμμ κΈ°λ³Έ λμ λ°©μμ μ§μ νλ λ° μ¬μ©λλ€. - μ°λ¦¬λ μ΄λ° κΈ°λ³Έκ° λμμ λ³κ²½ν μ μλ€.
- λ μ΄μμμ λͺ©μ μ΄ λ¬΄μμΈμ§ λ
Όν λ κ°μ₯ μ€μν λ κ°μ§ μμ±κ°μ
display: flex
μdisplay: grid
μ΄λ€.
flexbox: Flexible Box Layout
- flexboxλ₯Ό μ¬μ©νλ €λ©΄ λΉμ μ΄ μ§μ΄νκΈΈ μνλ λͺ¨λ μμμ λΆλͺ¨ μμμ
display: flex
λ₯Ό μ μ©νκ³ λλ©΄ λͺ¨λ μ§κ³ μμμ΄ νλ μ€ νλͺ©μ΄ λκ³ , columnμΌλ‘ λ°°μ΄λλ€. - μμλ€μ΄ flex νλͺ©μ΄ λμκ³ , flexboxκ° κ·Έλ€ μμμ λΆμ¬ν μΌλΆ μ΄κΈ°κ°μ μ¬μ©νκΈ° λλ¬Έμ΄λ€. κ·Έλ€μ΄ νμΌλ‘ νμλ μ΄μ λ
flex-direction
μ μ΄κΈ°κ°μ΄row
μ΄κΈ° λλ¬Έμ΄λ€. align-items
μμ±μ μ΄κΈ°κ°stretch
μ λ°λΌ heightλ κ°μ₯ ν€κ° ν° μμ΄ν μ λμ΄λ‘ μ°μ₯λλ€.- μλλ flexbox μμ
.wrapper {
display: flex;
}
<div class="wrapper">
<div class="box1">νλ</div>
<div class="box2">λ</div>
<div class="box3">μ
</div>
</div>
- μμ νλͺ©μ μ¬μ 곡κ°μ λ§μΆ° μ°μ₯νκ±°λ μμΆν μ μλ€.
flex: 1
.wrapper {
display: flex;
}
.wrapper > div {
flex: 1;
}
Grid Layout
- flex boxλ μΌμ°¨μ λ μ΄μμ, grid layoutμ μ΄μ°¨μ λ μ΄μμ. μ¦, νκ³Ό μ΄μ ν¬ν¨λ μμ΄ν μ λ°°μ΄νλ€.
- μ¬κΈ° κ°κΈ° 1frκ°μ΄ μ§μ λ 3μ΄κ³Ό 100pxμ΄ μ§μ λ 2νμ μ μνλ€.
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
grid-gap: 10px;
}
<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>
grid-column
,grid-row
λ₯Ό μ¬μ©ν΄μ λͺ μμ μΌλ‘ μμΉλ₯Ό μ§μ ν μ μλ€.
.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;
}
<div class="wrapper">
<div class="box1">νλ</div>
<div class="box2">λ</div>
<div class="box3">μ
</div>
</div>
Floats
Ref: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Introduction#floats
μμλ₯Ό float μν€λ©΄ μμλ μΌμͺ½ λλ μ€λ₯Έμͺ½μΌλ‘ μ΄λνκ³ , λ³΄ν΅ νλ¦(normal flow)μμ λ²μ΄λκ² λλ€.
float μμ±μ λ€ κ°μ§ κ°μ κ°μ§ μ μλ€.
- left
- right
- none: default
- inherit
μλ μμ μμλ <div> λ₯Ό μΌμͺ½μΌλ‘ λμ°κ³ μ€λ₯Έμͺ½μ marginμ μ£Όμ΄ ν μ€νΈλ₯Ό <div> μμ μ리μμ λ°μ΄ λΈλ€. μ΄κ²μ ν μ€νΈκ° κ·Έ μμλ₯Ό κ°μΈλ ν¨κ³Όλ₯Ό λΆμ¬νλ©°, μ΄λ νλ μΉ λμμΈμμ μ¬μ©λλ Floatsμ λν΄ μμμΌν λ΄μ©μ λλΆλΆμ΄λ€.
<h1>κ°λ¨ν λΆλ μμ </h1>
<div class="box">λΆλ</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam
dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus
ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus
laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum,
tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus
neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat
volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros
pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec
lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.
</p>
.box {
float: left;
width: 150px;
height: 150px;
margin-right: 30px;
}
ν¬μ§μ λ κΈ°μ
ν¬μ§μ λμ ν΅ν΄ λ³΄ν΅ νλ¦(normal flow)μμ μλ μμλ₯Ό μμλλ κΈ°μ‘΄μ λ°°μΉ μμΉμμ λ²μ΄λ λ€λ₯Έ μμΉλ‘ μ΄λμν¬ μ μλ€. ν¬μ§μ λμ λ©μΈ νμ΄μ§ λ μ΄μμμ μμ±νλ λ©μλκ° μλλΌ νμ΄μ§μ νΉμ νλͺ©μ μμΉλ₯Ό κ΄λ¦¬νκ³ λ―ΈμΈ μ‘°μ νλ κ²μ κ΄ν κ²μ΄λ€.
κ·Έλ¬λ position μμ±μ μμ‘΄νλ νΉμ λ μ΄μμ ν¨ν΄μ μλν κ²½μ° μ μ©ν κΈ°μ λ μλ€. ν¬μ§μ λμ μ΄ν΄νλ κ²μ λν λ³΄ν΅ νλ¦μ μ΄ν΄νκ³ , νλͺ©μ λ³΄ν΅ νλ¦μμ λ²μ΄λκ² νλ€λ κ²μ΄ 무μμΈμ§λ₯Ό μ΄ν΄νλ λ° λμμ΄ λλ€.
λ€μ― κ°μ§ ν¬μ§μ λ μ νμ΄ μλ€.
- μ μ
static
ν¬μ§μ λμ λͺ¨λ μμμ κΈ°λ³Έκ°μΌλ‘ λΆμ¬λ μμ±μ΄λ€. - μλ
relative
ν¬μ§μ λμ νμ΄μ§μμ μμ μμΉλ₯Ό μμ νμ¬ κ·Έκ²μ λ³΄ν΅ νλ¦μμ κΈ°μ‘΄ μμΉμ λΉλ‘ν΄ μ΄λν λ‘ νλ κ²μΌλ‘ νμ΄μ§μ λ€λ₯Έ μμμ κ²ΉμΉλ κ²λ ν΄λΉνλ€. - μ λ
absolute
ν¬μ§μ λμ μμλ₯Ό νμ΄μ§μ μΌλ° λ μ΄μμ λμ΄μμ μμ ν λ²μ΄λ κ³³μΌλ‘ μ΄λμμΌ μ체μ μΈ κ°λ³ λ μ΄μ΄ μμ λλ κ²κ³Ό κ°λ€. κ·Έκ³³μΌλ‘λΆν° νμ΄μ§μ<html>
μμ(λλ κ°μ₯ κ·Όμ μμΉμ μλ μ‘°μ μμ)μ κ°μ₯μ리 κΈ°μ€μμ λΉλ‘νλ μμΉμ κ³ μ ν μ μλ€. - κ³ μ
fixed
ν¬μ§μ λμ λ€λ₯Έ μμκ° μλ λΈλΌμ°μ λ·°ν¬νΈ κΈ°μ€κ³Ό λΉλ‘ν΄ μμλ₯Ό κ³ μ νλ κ²μ μ μΈνκ³ λ μ λ ν¬μ§μ λκ³Ό λ§€μ° μ μ¬νλ€. - μ€ν°ν€
sticky
ν¬μ§μ λμ νλμ μμλ₯Όposition: static
μ κ°μ΄ μλνλ€κ° λ·°ν¬νΈ κΈ°μ€μμ μ¬μ μ μ μλ κ°κ²©λμ°κΈ° μ§μ μ λλ¬ν μκ° μ΄νλΆν°λposition: fixed
μ κ°μ΄ μλνλ μλ‘μ΄ ν¬μ§μ λ λ©μλμ΄λ€.