η‘μ
Grid Layout κ³Ό μμ λ³Έλ¬Έ
π’β Grid Layout (그리λ λ μ΄μμ)
ν(row)κ³Ό μ΄(column)μ λμμ λ€λ£° μ μλ 2μ°¨μ λ μ΄μμ λ°©μ.
πΉ display: grid (μ λ ¬μ μμ)
μμλ₯Ό grid Container(νλ μ€ μ»¨ν μ΄λ)λ‘ λ§λλ κ°μ₯ κΈ°λ³Έμ μΈ μ μΈ.
.container {
display: grid;
}
π fr (fraction) λΉμ¨ λ¨μ π₯ν΅μ¬π₯
μ¬μ© κ°λ₯ν 곡κ°μ λΉμ¨λ‘ λλλ μ μ°ν λ¨μ.
.container {
/* 100pxμ μ μΈν λλ¨Έμ§ κ³΅κ°μ 1:2λ‘ λλ */
grid-template-columns: 100px 1fr 2fr;
grid-template-rows: 1fr 2fr;
/* 1:2 λΉμ¨ (μ 체λ₯Ό 3λ±λΆ) */
}
- fr μ κ³ μ κ°μ΄ μλ λΉμ¨ κΈ°λ° λ¨μ.
1οΈβ£ Grid Container μμ± (λΆλͺ¨ μμ)
그리λ μ 체μ ꡬ쑰(νκ³Ό μ΄)λ₯Ό μ μνκ³ , λ μ΄μμμ κΈ°λ³Έ νμ μ€μ .
πΉ grid-template-columns
μ΄(column) ν¬κΈ°μ κ°μλ₯Ό μ μνλ μμ±.
.container {
grid-template-columns: 200px 200px 200px;
}
- px, %, fr λ± λ€μν λ¨μ μ¬μ© κ°λ₯.
πΉ grid-template-rows
ν(row) ν¬κΈ°μ κ°μλ₯Ό μ μνλ μμ±.
.container {
grid-template-rows: 200px 200px 200px;
}
- auto μ¬μ© μ μ½ν μΈ ν¬κΈ°μ λ°λΌ λμ΄ μλ κ²°μ .
- px, %, fr λ± λ€μν λ¨μ μ¬μ© κ°λ₯.
πΉ gap
Gridμμ ν(row)κ³Ό μ΄(column) μ¬μ΄μ κ°κ²©μ μ€μ .
.container {
gap: 20px;
}
βοΈ λλ κ°κ°μ κ°κ²©λ μ€μ κ°λ₯.
.container {
row-gap: 10px;
column-gap: 20px;
}
πΉ repeat() ν¨μ
νκ³Ό μ΄μ λ°λ³΅λλ κ°μ κ°λ¨νκ² μμ±.
.container {
/* μ΄ 3κ°μ μ΄μ λμΌν λΉμ¨ 1fr λ‘ μμ± */
grid-template-columns: repeat(3, 1fr);
}
πΉ minmax()
μ΅μκ°(min)κ³Ό μ΅λκ°(max)μ μ€μ .
.container {
/* μ΄ 3κ°μ μ΄μ΄ μμ±λκ³ , κ° μ΄μ μ΅μ λλΉλ 100pxμ΄κ³ 곡κ°μ΄ μΆ©λΆνλ©΄ μ΅λ 1frκΉμ§ νμ₯ */
grid-template-columns: repeat(3, minmax(100px, 1fr));
}
πΉ auto-fill / auto-fit
λ°μν λ μ΄μμ μμ 컨ν μ΄λ ν¬κΈ°μ λ°λΌ μ΄(column)μ κ°μλ₯Ό μλμΌλ‘ μ‘°μ .
.container {
/* κ° μ΄μ μ΅μ λλΉλ 200px, 곡κ°μ΄ λ¨μΌλ©΄ 1fr κΉμ§ νμ₯,
νλ©΄ ν¬κΈ°μ λ°λΌ μ΄ κ°μκ° μλμΌλ‘ λμ΄λκ±°λ μ€μ΄λ¦ */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
- auto-fill: 곡κ°μ΄ λ¨μλ λΉ μΉΈμ μ μ§.
- auto-fit: λΉ μΉΈμ μ κ±°νκ³ μμλ₯Ό κ½ μ±μ. (λ°μνμμ μμ£Ό μ¬μ©)
- ν΅μ¬ ν¨ν΄: minmax() μ ν¨κ» μ¬μ©.
πΉ grid-template-areas
κ° μμμ μ§κ΄μ μΈ μ΄λ¦μ λΆμ¬ λ°°μΉ κ°λ₯ν μμ±.
<style>
.container {
display: grid;
grid-template-columns: 200px 1fr 1fr;
grid-template-rows: 100px 300px 100px;
grid-template-areas:
"header header header"
"sidebar main ."
"footer footer footer";
gap: 10px;
}
.header { grid-area: header; background: lightblue; }
.sidebar { grid-area: sidebar; background: lightgreen; }
.main { grid-area: main; background: lightcoral; }
.footer { grid-area: footer; background: lightgray; }
</style>
<div class="container">
<div class="header">ν€λ</div>
<div class="sidebar">μ¬μ΄λλ°</div>
<div class="main">λ³Έλ¬Έ</div>
<div class="footer">νΈν°</div>
</div>
- λΆλͺ¨ μμ μ€μ : grid-template-areasλ₯Ό μ¬μ©ν΄ λ§μΉ λ°λνμ κ·Έλ¦¬λ― ν°λ°μ΄ν μμ μμ μ΄λ¦μ λ°°μΉ.
- μμ μμ λ§€ν: grid-area: μμμ΄λ¦; μ μ μΈνλ©΄ λΆλͺ¨κ° μ μν μμμ λ€μ΄κ°.
- μμ μ΄λ¦κ³Ό grid-area κ°μ΄ μ νν μΌμΉν΄μΌ νλ€.
- μμ μ΄λ¦μ μ€λ³΅ κ°λ₯.
- λΉμΉΈ μ²λ¦¬: .(λ§μΉ¨ν)λ₯Ό μ¬μ©νλ©΄ κ·Έ μΉΈμ λΉ κ³΅κ°μΌλ‘ λ¨κ²¨λλ€.
2οΈβ£ Grid Item μμ± (μμ μμ)
κ° μμκ° κ·Έλ¦¬λ μμμ μ΄λ μΉΈμ μ°¨μ§ν μ§ κ²°μ .
π Grid Lines (그리λ λΌμΈ)
그리λ λΌμΈμ 그리λ μ΄κ³Ό νμ ꡬλΆνλ λμ 보μ΄μ§ μλ μ .
- λ²νΈ 체κ³: λΌμΈ λ²νΈλ νμ 1λΆν° μμ. 3μ΄μ§λ¦¬ 그리λλΌλ©΄ μΈλ‘ λΌμΈμ 1λ²λΆν° 4λ²κΉμ§ μ‘΄μ¬.
- μμ λ²νΈ: λμμλΆν° κ±°κΎΈλ‘ μ μλ μμΌλ©°, λ§μ§λ§ μ μ νμ -1.
- νμ©: grid-columnκ³Ό grid-row μμ±μ μ¬μ©νμ¬ νΉμ μμ΄ν μ΄ λͺ λ² μ λΆν° λͺ λ² μ κΉμ§ μ°¨μ§ν μ§ κ²°μ .
πΉ grid-column
μ΄(column)μμ μμκ³Ό λ μμΉ μ§μ .
.item {
/* 1λ² λΌμΈλΆν° 3λ² λΌμΈκΉμ§ */
grid-column: 1 / 3;
}
πΉ grid-row
ν(row)μμ μμκ³Ό λ μμΉ μ§μ .
.item {
grid-row: 1 / 3;
}
π μΆμ½ν π
.item {
grid-column: span 2; /* 2μΉΈ μ°¨μ§ */
}
- span: λͺ μΉΈμ μ°¨μ§ν μ§ μ§μ .
πΉ grid-area μΆμ½ν
ν λ²μ ν/μ΄ λͺ¨λ μ§μ .
.item {
grid-area: 1 / 1 / 3 / 3;
}
- λ¬Έλ²: grid-area: row-start / col-start / row-end / col-end;
πβ POINT πβ
βοΈ fr μ κ°μ© 곡κ°μ λΉμ¨λ‘ λλλ λ¨μ, μ μ°ν λ μ΄μμμ νμ. βοΈ
βοΈ repeat(auto-fit, minmax(200px, 1fr)) λ₯Ό μ¬μ©νλ©΄ λ―Έλμ΄ μΏΌλ¦¬ μμ΄λ μλ²½ν λ°μν 그리λ κ°λ₯. βοΈ
βοΈ κ·Έλ¦¬λ λΌμΈ λ²νΈλ 1λΆν° μμνλ©°, -1μ μ°λ©΄ λ§μ§λ§ λΌμΈμ μλ―Έν©λλ€. βοΈ
βοΈ κ·Έλ¦¬λ λΌμΈμ λ―ΈμΈνκ³ μ κ΅ν λ°°μΉκ° νμν λ, ν νλ¦Ώ μμμ μ 체μ μΈ λ μ΄μμμ ꡬ쑰λ₯Ό νλμ νμ νκ³ μΆμ λ μ μ©νλ€. βοΈ
π 그리λ μ£Όμ μμ± μμ½ν π
| μΉ΄ν κ³ λ¦¬ | μμ± | μ€λͺ | ν |
| 컨ν μ΄λ | grid-template-columns | μ΄μ κ°μμ λλΉ μ μ | repeat(3, 1fr)μ²λΌ λ°λ³΅ ν¨ν΄ νμ© κ°λ₯ |
| 컨ν μ΄λ | grid-template-rows | νμ κ°μμ λμ΄ μ μ | λμ΄λ₯Ό μλ(auto)λ‘ λλ©΄ μ½ν μΈ μ λ§μΆ° μ‘°μ κ°λ₯ |
| 컨ν μ΄λ | grid-template-areas | μμ μ΄λ¦μ λ°λνμμΌλ‘ λ°°μΉ | μ΄λ¦λ§ λ°κΏμ λ°μν λ μ΄μμ μ½κ² μ¬λ°°μΉ κ°λ₯ |
| 컨ν μ΄λ | gap | 그리λ μ μ¬μ΄μ κ°κ²© | row-gap, column-gap λ°λ‘ μ§μ κ°λ₯ |
| μμ΄ν | grid-column | μ΄ μμ/λ μμΉ μ§μ | 1 / -1μ μ 체 μ΄ μ°¨μ§, span 2λ‘ μ°μ μΉΈ μ°¨μ§ |
| μμ΄ν | grid-row | ν μμ/λ μμΉ μ§μ | span 3μΌλ‘ νμ¬ μμΉμμ 3μΉΈ μ°¨μ§ |
| μμ΄ν | grid-area | μμ΄ν μ μμ μ΄λ¦ λλ λ²μ | grid-template-areasμ μ΄λ¦κ³Ό μΌμΉμμΌμΌ ν¨ |
βοΈ μ€μ μμ μ½λ: μ λ¬Έ μ€νμΌ λ μ΄μμ βοΈ
<style>
.grid-wrapper {
display: grid;
/* 3μ΄λ‘ λλκ³ , κ°μ΄λ° μ΄μ λλΉμ 2λ°° */
grid-template-columns: 1fr 2fr 1fr;
/* νμ ν¬κΈ°λ₯Ό μλμΌλ‘ μ‘°μ */
grid-template-rows: auto 200px auto;
gap: 15px;
padding: 10px;
}
.item {
background-color: #3498db;
color: white;
padding: 20px;
text-align: center;
border-radius: 8px;
}
/* ν€λλ 첫 λ²μ§Έ μ€ μ 체(3μ΄)λ₯Ό μ°¨μ§ */
.header {
grid-column: 1 / 4;
background-color: #2c3e50;
}
/* λ©μΈ μ½ν
μΈ λ 2μ΄μ μ°¨μ§ */
.main {
grid-column: span 2;
}
/* νΈν°λ μ 체λ₯Ό μ°¨μ§ */
.footer {
grid-column: 1 / 4;
background-color: #7f8c8d;
}
</style>
<div class="grid-wrapper">
<div class="item header">Header</div>
<div class="item main">Main Content</div>
<div class="item sidebar">Sidebar</div>
<div class="item footer">Footer</div>
</div>
'<style>' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| Flexbox Layout μ Flex Container μμ (0) | 2026.03.24 |
|---|---|
| Flexbox Layout (νλ μ€λ°μ€ λ μ΄μμ) (0) | 2026.03.24 |
| Media query (λ―Έλμ΄ μΏΌλ¦¬) (0) | 2026.03.23 |
| RWD Image λ°μν μ΄λ―Έμ§ (0) | 2026.03.23 |
| emκ³Ό rem (0) | 2026.03.23 |