CSS μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°μ νμ©ν΄ μ μ§λ³΄μκ° μ©μ΄νκ³ μ μ°ν λ μ΄μμμ λ§λλ λ°©λ²μ μμ보μΈμ. 볡μ‘ν λ°μν λμμΈμ μν΄ μμλ 그리λ λΌμΈ μ΄λ¦μ νμ©νλ λ²μ λ°°μλλ€.
CSS μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°: μ μ°ν λ μ΄μμμ μν μμ 그리λ λΌμΈ μλ³
CSS 그리λλ μΉ λ μ΄μμμ νλͺ μ μΌμΌμΌ λΉκ΅ν μ μλ μ μ΄λ ₯κ³Ό μ μ°μ±μ μ 곡ν©λλ€. μλΈκ·Έλ¦¬λλ μ΄λ₯Ό ν λ¨κ³ λ λ°μ μμΌ μ€μ²©λ 그리λκ° λΆλͺ¨λ‘λΆν° νΈλ ν¬κΈ°λ₯Ό μμλ°μ μ μκ² ν©λλ€. μλΈκ·Έλ¦¬λμ κ°λ ₯νμ§λ§ λλ‘λ κ°κ³Όλλ κΈ°λ₯μ νΈλ λ€μ΄λ°μ λλ€. μλΈκ·Έλ¦¬λμ κ³ μ ν μμκ³Ό κ²°ν©λ λ, μ΄λ 볡μ‘ν λ μ΄μμκ³Ό μ μ§λ³΄μ κ°λ₯ν μ½λλ₯Ό μν μ°μν ν΄κ²°μ± μ μ 곡ν©λλ€.
CSS 그리λμ μλΈκ·Έλ¦¬λ μ΄ν΄νκΈ°
νΈλ λ€μ΄λ°μ λν΄ μμ보기 μ μ, CSS 그리λμ μλΈκ·Έλ¦¬λμ κΈ°λ³Έμ κ°λ¨ν 볡μ΅ν΄ λ³΄κ² μ΅λλ€.
CSS 그리λ
CSS 그리λ λ μ΄μμμ μΉμ μν 2μ°¨μ λ μ΄μμ μμ€ν μ λλ€. μ΄λ₯Ό ν΅ν΄ 컨ν μ΄λλ₯Ό νκ³Ό μ΄λ‘ λλκ³ , κ·Έ 그리λ μ μμ μ½ν μΈ λ₯Ό λ°°μΉν μ μμ΅λλ€. ν΅μ¬ κ°λ μ λ€μκ³Ό κ°μ΅λλ€:
- 그리λ 컨ν μ΄λ: `display: grid` λλ `display: inline-grid`κ° μ μ©λ μμμ λλ€.
- 그리λ μμ΄ν : 그리λ 컨ν μ΄λμ μ§κ³ μμ μμμ λλ€.
- 그리λ νΈλ: 그리λμ νκ³Ό μ΄μ λλ€.
- 그리λ λΌμΈ: 그리λ νΈλμ ꡬλΆνλ λ²νΈκ° λ§€κ²¨μ§ μ μ λλ€.
- 그리λ μ : 그리λ λ΄μ κ°λ³ μμμ λλ€.
μλ₯Ό λ€μ΄, λ€μ HTMLμ κ³ λ €ν΄ λ³΄μΈμ:
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>
κ·Έλ¦¬κ³ CSSλ λ€μκ³Ό κ°μ΅λλ€:
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
}
μ΄κ²μ λμΌν λλΉμ μΈ κ°μ μ΄κ³Ό κ°κ° 100px λμ΄μ λ κ°μ νμ κ°μ§ 그리λ 컨ν μ΄λλ₯Ό μμ±ν©λλ€.
CSS μλΈκ·Έλ¦¬λ
μλΈκ·Έλ¦¬λλ 그리λ μμ΄ν μ΄ μ€μ€λ‘ 그리λ 컨ν μ΄λκ° λμ΄ λΆλͺ¨ 그리λμ νΈλ ν¬κΈ°λ₯Ό μμλ°μ μ μκ² ν©λλ€. μ΄λ μ€μ²©λ μμκ° μ£Ό 그리λμ μ λ ¬λμ΄μΌ νλ μΌκ΄λ λ μ΄μμμ λ§λλ λ° νΉν μ μ©ν©λλ€. μλΈκ·Έλ¦¬λλ₯Ό νμ±ννλ €λ©΄, μλΈκ·Έλ¦¬λ 컨ν μ΄λμ `grid-template-columns` λ°/λλ `grid-template-rows` μμ±μ `subgrid`λ‘ μ€μ ν©λλ€.
μ΄μ μμ λ₯Ό νμ₯ν΄ λ³΄κ² μ΅λλ€:
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item subgrid-item">
<div class="subgrid-content">Subgrid Content 1</div>
<div class="subgrid-content">Subgrid Content 2</div>
</div>
<div class="grid-item">Item 3</div>
</div>
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
}
.subgrid-item {
display: grid;
grid-column: 2;
grid-row: 2;
grid-template-columns: subgrid;
grid-template-rows: subgrid;
}
.subgrid-content {
/* Styles for content within the subgrid */
}
μ΄μ `.subgrid-item`μ λΆλͺ¨ 그리λλ‘λΆν° μ΄κ³Ό ν ν¬κΈ°λ₯Ό μμλ°μ μ½ν μΈ λ₯Ό λ§€λλ½κ² μ λ ¬ν κ²μ λλ€.
CSS 그리λμμμ νΈλ λ€μ΄λ°
νΈλ λ€μ΄λ°μ 그리λ λΌμΈμ μλ―Έ μλ μ΄λ¦μ ν λΉνλ λ°©λ²μ μ 곡νμ¬ CSSλ₯Ό λ μ½κΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ’κ² λ§λλλ€. μ«μ μΈλ±μ€λ‘ 그리λ λΌμΈμ μ°Έμ‘°νλ λμ , μ€λͺ μ μΈ μ΄λ¦μ μ¬μ©ν μ μμ΅λλ€. μ΄λ νΉν 볡μ‘ν 그리λμμ μ½λμ λͺ νμ±μ ν¬κ² ν₯μμν΅λλ€.
`grid-template-columns`μ `grid-template-rows` μμ± λ΄μμ λκ΄νΈλ₯Ό μ¬μ©νμ¬ νΈλ μ΄λ¦μ μ μν μ μμ΅λλ€:
.grid-container {
display: grid;
grid-template-columns: [start] 1fr [content-start] 2fr [content-end] 1fr [end];
grid-template-rows: [header-start] 50px [header-end content-start] auto [content-end footer-start] 30px [footer-end];
}
μ΄ μμ μμλ `start`, `content-start`, `content-end`, `end`, `header-start`, `header-end`, `footer-start`, `footer-end`μ κ°μ΄ μ¬λ¬ 그리λ λΌμΈμ μ΄λ¦μ λΆμμ΅λλ€. 그리λ λΌμΈμ 곡백μΌλ‘ ꡬλΆνμ¬ μ¬λ¬ μ΄λ¦μ κ°μ§ μ μμ΅λλ€(μ: `[header-end content-start]`).
κ·Έλ° λ€μ `grid-column-start`, `grid-column-end`, `grid-row-start`, `grid-row-end`λ₯Ό μ¬μ©νμ¬ κ·Έλ¦¬λ μμ΄ν μ λ°°μΉνλ λ° μ΄ μ΄λ¦λ€μ μ¬μ©ν μ μμ΅λλ€:
.grid-item {
grid-column-start: content-start;
grid-column-end: content-end;
grid-row-start: content-start;
grid-row-end: content-end;
}
μλΈκ·Έλ¦¬λλ₯Ό μ΄μ©ν μμλ 그리λ λΌμΈ μλ³
μ§μ ν νμ νΈλ λ€μ΄λ°μ μλΈκ·Έλ¦¬λμ κ²°ν©ν λ λνλ©λλ€. μλΈκ·Έλ¦¬λλ λΆλͺ¨λ‘λΆν° νΈλ *ν¬κΈ°*λ₯Ό μμλ°μ λΏλ§ μλλΌ κ·Έλ¦¬λ λΌμΈμ *μ΄λ¦*λ μμλ°μ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ λ¨κ³μ μ€μ²©μμλ μΌκ΄μ±κ³Ό κ°λ μ±μ μ μ§νλ κΉμ΄ μ€μ²©λ λ μ΄μμμ λ§λ€ μ μμ΅λλ€.
ν€λ, μ½ν μΈ , νΈν° λ± μ 체 λ μ΄μμμ μ μνλ λ©μΈ 그리λκ° μλ μΉμ¬μ΄νΈ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. μ½ν μΈ μμ λ΄μλ κΈ°μ¬λ₯Ό νμνκΈ° μν μλΈκ·Έλ¦¬λκ° μμ΅λλ€. νΈλ λ€μ΄λ°μ μ¬μ©νμ¬ κΈ°μ¬ μλΈκ·Έλ¦¬λκ° λ©μΈ 그리λμ μ΄ κ΅¬μ‘°μ μλ²½νκ² μ λ ¬λλλ‘ ν μ μμ΅λλ€.
μμ : κΈ°μ¬ μλΈκ·Έλ¦¬λλ₯Ό μ¬μ©ν μΉμ¬μ΄νΈ λ μ΄μμ
λ¨Όμ , λ©μΈ 그리λλ₯Ό μ μν©λλ€:
<div class="main-grid">
<header class="header">Header</header>
<main class="content">
<article class="article">
<h2 class="article-title">Article Title</h2>
<p class="article-body">Article content goes here...</p>
</article>
</main>
<footer class="footer">Footer</footer>
</div>
.main-grid {
display: grid;
grid-template-columns: [full-start] minmax(20px, 1fr) [content-start] minmax(300px, 8fr) [content-end] minmax(20px, 1fr) [full-end];
grid-template-rows: [header-start] auto [header-end content-start] 1fr [content-end footer-start] auto [footer-end];
grid-template-areas:
"header header header header"
"content content content content"
"footer footer footer footer";
gap: 10px;
}
.header {
grid-area: header;
background-color: #eee;
padding: 10px;
}
.content {
grid-area: content;
background-color: #fff;
padding: 10px;
}
.footer {
grid-area: footer;
grid-column: full-start / full-end; /* Ensure the footer spans the full width */
background-color: #eee;
padding: 10px;
}
μ΄μ `.article` μμλ₯Ό μλΈκ·Έλ¦¬λλ‘ λ§λ€μ΄, μ΄ κ΅¬μ‘°μ μ΄λ¦μ΄ μ§μ λ 그리λ λΌμΈμ μμλ°λλ‘ ν΄λ΄ μλ€:
.article {
display: grid;
grid-template-columns: subgrid;
grid-column: content-start / content-end; /* Position article within content area */
background-color: #f9f9f9;
padding: 10px;
}
.article-title {
grid-column: full-start / full-end; /* Spans the entire width of the subgrid */
}
.article-body {
grid-column: content-start / content-end; /* Aligns with the content area of the main grid */
}
μ΄ μμ μμ `.article` μμλ μλΈκ·Έλ¦¬λκ° λμ΄ `.main-grid`λ‘λΆν° `full-start`, `content-start`, `content-end`, `full-end`λΌλ μ΄λ¦μ 그리λ λΌμΈμ μμλ°μ΅λλ€. `.article-title`μ μλΈκ·Έλ¦¬λμ μ 체 λλΉμ κ±Έμ³ μ€νμΌμ΄ μ§μ λκ³ , `.article-body`λ μμλ 그리λ λΌμΈ μ΄λ¦ λλΆμ λ©μΈ 그리λμ μ½ν μΈ μμκ³Ό μ λ ¬λ©λλ€.
μλΈκ·Έλ¦¬λμ ν¨κ» νΈλ λ€μ΄λ°μ μ¬μ©ν λμ μ΄μ
- κ°λ μ± ν₯μ: μ«μ μΈλ±μ€ λμ μ€λͺ μ μΈ μ΄λ¦μ μ¬μ©νλ©΄ CSSλ₯Ό λ μ½κ² μ΄ν΄νκ³ μ μ§λ³΄μν μ μμ΅λλ€.
- μ μ§λ³΄μμ± μ¦κ°: 그리λ ꡬ쑰λ₯Ό μμ ν΄μΌ ν λ, νΈλ μ΄λ¦μ μΌκ΄μ±μ μ μ§νλ―λ‘ λ μ΄μμμ΄ κΉ¨μ§ μνμ΄ μ€μ΄λλλ€.
- μ μ°μ± ν₯μ: μ«μ μΈλ±μ€λ₯Ό λ€μ κ³μ°ν νμ μμ΄ λ¨μν 그리λ λΌμΈ μ΄λ¦μ λ³κ²½νμ¬ κ·Έλ¦¬λ μμ΄ν μ μ½κ² μ¬λ°°μΉν μ μμ΅λλ€.
- μΌκ΄λ λ μ΄μμ: νΈλ λ€μ΄λ°μ΄ μ μ©λ μλΈκ·Έλ¦¬λλ μ€μ²©λ μμκ° λΆλͺ¨ 그리λμ μλ²½νκ² μ λ ¬λλλ‘ νμ¬ μκ°μ μΌλ‘ λ§€λ ₯μ μ΄κ³ μΌκ΄λ μ¬μ©μ κ²½νμ λ§λλλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
λ€μμ CSS μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°μ΄ νΉν μ μ©ν μ μλ λͺ κ°μ§ μ€μ©μ μΈ μμ μ μ¬μ© μ¬λ‘μ λλ€:
- 볡μ‘ν μμ: λ©μΈ 그리λμ κ° μμ μΉμ μ λν μλΈκ·Έλ¦¬λλ₯Ό μ¬μ©νμ¬ μ¬λ¬ μΉμ μ κ±Έμ³ μμ λ μ΄λΈκ³Ό μ λ ₯ νλλ₯Ό μ λ ¬ν©λλ€.
- μ ν λͺ©λ‘: κ° μΉ΄λ λ΄μ μλΈκ·Έλ¦¬λλ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§, μ λͺ©, μ€λͺ μ΄ μ λ ¬λ μΌκ΄λ μ ν μΉ΄λ λ μ΄μμμ λ§λλλ€.
- λμ보λ λ μ΄μμ: λ©μΈ 그리λμ μ΄ κ΅¬μ‘°λ₯Ό μμλ°λ μ¬λ¬ ν¨λμ΄ μλ μ μ°ν λμ보λ λ μ΄μμμ ꡬμΆν©λλ€.
- μ‘μ§ μ€νμΌ λ μ΄μμ: μλΈκ·Έλ¦¬λμ νΈλ λ€μ΄λ°μ μ¬μ©νμ¬ μ£Όμ κΈ°μ¬μ μ¬μ΄λλ°κ° λ§€λλ½κ² μ λ ¬λλ 볡μ‘ν μ‘μ§ λ μ΄μμμ λμμΈν©λλ€. λ΄μ λ μ§μ€κ·Έλν½κ³Ό κ°μ μΆνλ¬Όμ΄ λ μ΄μμμ μ΄λ»κ² ꡬμ±νλμ§ μκ°ν΄ 보μΈμ.
- μ μμκ±°λ μ ν νμ΄μ§: μκ°μ μΌκ΄μ±μ΄ μ¬μ©μ κ²½νμ ν΅μ¬μΈ μλ§μ‘΄κ³Ό κ°μ μ μμκ±°λ μ¬μ΄νΈμμ μ ν μ΄λ―Έμ§, μ λͺ©, μ€λͺ λ° κ°κ²© μ 보μ λν μ λ°ν μ μ΄λ₯Ό λ¬μ±ν©λλ€.
κ³ κΈ κΈ°μ λ° κ³ λ € μ¬ν
`minmax()`μ νΈλ λ€μ΄λ° ν¨κ» μ¬μ©νκΈ°
νΈλ λ€μ΄λ°μ `minmax()` ν¨μμ κ²°ν©νμ¬ λ€μν νλ©΄ ν¬κΈ°μ μ μνλ λ°μν 그리λλ₯Ό λ§λμΈμ. μλ₯Ό λ€μ΄:
.grid-container {
display: grid;
grid-template-columns: [start] minmax(20px, 1fr) [content-start] minmax(300px, 8fr) [content-end] minmax(20px, 1fr) [end];
}
μ΄λ κ² νλ©΄ μ½ν μΈ μμμ΄ νμ μ΅μ 300pxμ λλΉλ₯Ό κ°μ§λ©΄μλ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°λλ‘ νμ₯λ μ μμ΅λλ€.
μμμ 그리λμ λͺ μμ 그리λ μμ
μμμ 그리λμ λͺ μμ 그리λμ μ°¨μ΄μ μ μ μνμΈμ. λͺ μμ 그리λλ `grid-template-columns`μ `grid-template-rows`λ₯Ό μ¬μ©νμ¬ μ μλλ λ°λ©΄, μμμ 그리λλ μ½ν μΈ κ° λͺ μμ 그리λ μΈλΆμ λ°°μΉλ λ μλμΌλ‘ μμ±λ©λλ€. νΈλ λ€μ΄λ°μ μ£Όλ‘ λͺ μμ 그리λμ μ μ©λ©λλ€.
λΈλΌμ°μ νΈνμ±
μλΈκ·Έλ¦¬λλ μ΅μ λΈλΌμ°μ μμ λΉκ΅μ μ μ§μλμ§λ§, Can I use...μ κ°μ 리μμ€λ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ νΈνμ±μ νμΈνλ κ²μ΄ νμ μ’μ΅λλ€. μλΈκ·Έλ¦¬λλ₯Ό μ§μνμ§ μλ ꡬν λΈλΌμ°μ λ₯Ό μν λ체 μ루μ μ μ 곡νμΈμ.
μ κ·Όμ± κ³ λ € μ¬ν
그리λ λ μ΄μμμ΄ μ₯μ κ° μλ μ¬μ©μμκ² μ κ·Ό κ°λ₯νμ§ νμΈνμΈμ. μλ§¨ν± HTMLμ μ¬μ©νκ³ λ§μ°μ€λ λ€λ₯Έ ν¬μΈν μ₯μΉλ₯Ό μ¬μ©ν μ μλ μ¬μ©μλ₯Ό μν΄ μ½ν μΈ μ μ κ·Όν μ μλ λ체 λ°©λ²μ μ 곡νμΈμ. μ μ νκ² κ΅¬μ‘°νλ μ λͺ©, λ μ΄λΈ, ARIA μμ±μ μ κ·Όμ±μ λ§€μ° μ€μν©λλ€.
CSS μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°μ μν λͺ¨λ² μ¬λ‘
- μ€λͺ μ μΈ μ΄λ¦ μ¬μ©: 그리λ λΌμΈμ λͺ©μ μ λͺ ννκ² λνλ΄λ νΈλ μ΄λ¦μ μ ννμΈμ.
- μΌκ΄μ± μ μ§: νλ‘μ νΈ μ λ°μ κ±Έμ³ μΌκ΄λ λ€μ΄λ° 컨벀μ μ μ¬μ©νμΈμ.
- μ§λμΉκ² 볡μ‘ν μ΄λ¦ νΌνκΈ°: νΈλ μ΄λ¦μ κ°κ²°νκ³ κΈ°μ΅νκΈ° μ½κ² μ μ§νμΈμ.
- 그리λ ꡬ쑰 λ¬Έμν: CSSμ μ£Όμμ μΆκ°νμ¬ κ·Έλ¦¬λ ꡬ쑰μ νΈλ λ€μ΄λ° 컨벀μ μ μ€λͺ νμΈμ.
- μ² μ ν ν μ€νΈ: λ€μν κΈ°κΈ°μ λΈλΌμ°μ μμ 그리λ λ μ΄μμμ ν μ€νΈνμ¬ μμλλ‘ μλνλμ§ νμΈνμΈμ.
νΌν΄μΌ ν μΌλ°μ μΈ μ€μ
- νΌλμ€λ½κ±°λ λͺ¨νΈν μ΄λ¦ μ¬μ©: λͺ ννμ§ μκ±°λ μ€ν΄μ μμ§κ° μλ μ΄λ¦ μ¬μ©μ νΌνμΈμ.
- μΌκ΄μ± μλ λ€μ΄λ° 컨벀μ : νλ‘μ νΈ μ λ°μ κ±Έμ³ μΌκ΄λ λ€μ΄λ° 컨벀μ μ κ³ μνμΈμ.
- νΈλ μ΄λ¦ μ μ μμ΄λ²λ¦¬κΈ°: λͺ¨λ κ΄λ ¨ 그리λ λΌμΈμ λν΄ νΈλ μ΄λ¦μ μ μνλμ§ νμΈνμΈμ.
- λ€λ₯Έ λΈλΌμ°μ μμ ν μ€νΈνμ§ μκΈ°: νμ λ€λ₯Έ λΈλΌμ°μ μμ 그리λ λ μ΄μμμ ν μ€νΈνμ¬ νΈνμ±μ νμΈνμΈμ.
- μλΈκ·Έλ¦¬λ λ¨μ©: μλΈκ·Έλ¦¬λλ κ°λ ₯νμ§λ§ νμ μ΅μμ ν΄κ²°μ± μ μλλλ€. λ κ°λ¨ν λ μ΄μμ μ κ·Ό λ°©μμ΄ λ μ μ ν μ μλμ§ κ³ λ €ν΄ λ³΄μΈμ.
κ²°λ‘
CSS μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°μ λ μ μ§λ³΄μνκΈ° μ½κ³ , μ μ°νλ©°, μΌκ΄λ λ μ΄μμμ λ§λλ κ°λ ₯ν κΈ°μ μ λλ€. μμλ 그리λ λΌμΈ μ΄λ¦μ νμ©νμ¬ μ΄ν΄νκ³ μμ νκΈ° μ¬μ΄ 볡μ‘ν μ€μ²© 그리λλ₯Ό ꡬμΆν μ μμ΅λλ€. CSS 그리λ μν¬νλ‘μ°μ νΈλ λ€μ΄λ°μ λμ νμ¬ μλ‘μ΄ κ°λ₯μ±μ μ΄κ³ λ©μ§ μΉ λμμΈμ λ§λ€μ΄ 보μΈμ. λ€μν λ μ΄μμ, νΈλ μ΄λ¦, λ°μν κΈ°μ μ μ€ννμ¬ μ΄ κ·μ€ν κΈ°μ μ λ§μ€ν°νμΈμ. κ°λ¨ν λΈλ‘κ·Έλ₯Ό λ§λ€λ 볡μ‘ν μΉ μ ν리μΌμ΄μ μ λ§λ€λ , μλΈκ·Έλ¦¬λ νΈλ λ€μ΄λ°μ μκ°μ μΌλ‘ λ§€λ ₯μ μ΄κ³ κΈ°λ₯μ μΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλ λ° λμμ΄ λ μ μμ΅λλ€.
κΈλ‘λ² κ΄μ μ μ±ννκ³ μ κ·Όμ±μ κ³ λ €ν¨μΌλ‘μ¨ CSS 그리λ λ μ΄μμμ΄ λͺ¨λ λ°°κ²½μ μ¬μ©μμκ² ν¬μ©μ μ΄κ³ μ κ·Ό κ°λ₯νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.