μλ§¨ν± λ€μ΄λ° 컨벀μ μ ν΅ν΄ CSS 그리λ μμμ λ§μ€ν°νμ¬, λ€μν κ΅μ UIμ μ μ κ°λ₯ν κ²¬κ³ νκ³ μ μ§λ³΄μνκΈ° μ¬μ°λ©° μ κ·Όμ± λμ μΉ λ μ΄μμμ λ§λμΈμ.
CSS 그리λ μμ: κΈλ‘λ² μΉ κ°λ°μ μν μλ§¨ν± λ μ΄μμ λ€μ΄λ° 컨벀μ ꡬμΆνκΈ°
CSS 그리λλ μΉ λ μ΄μμμ νλͺ μ κ°μ ΈμμΌλ©°, κ°λ°μμκ² μ λ‘ μλ μ μ΄λ ₯κ³Ό μ μ°μ±μ μ 곡ν©λλ€. CSS 그리λ ν΄ν· λ΄μμ 그리λ μμ(Grid Areas)μ νΉν κ°λ ₯ν κΈ°λ₯μΌλ‘ λ보μ΄λ©°, 그리λ λ΄μ μ΄λ¦μ΄ μ§μ λ μμμ μ μνκ³ μ½ν μΈ λ₯Ό ν λΉν μ μκ² ν΄μ€λλ€. κ·Έλ¬λ 그리λ μμμ μ§μ ν μ μ¬λ ₯μ μ μ μλ μλ§¨ν± λ€μ΄λ° 컨벀μ κ³Ό κ²°ν©λ λ λ°νλ©λλ€. μ΄ κ°μ΄λμμλ κΈλ‘λ² μ¬μ©μμκ² μ ν©ν κ²¬κ³ νκ³ μ μ§λ³΄μ κ°λ₯νλ©° μ κ·Όμ± λμ μΉ λ μ΄μμμ λ§λ€κΈ° μν΄ μ΄λ¬ν 컨벀μ μ μ€μ νλ λ°©λ²μ μ΄ν΄λ΄ λλ€.
CSS 그리λ μμ μ΄ν΄νκΈ°
λ€μ΄λ° 컨벀μ μ μ΄ν΄λ³΄κΈ° μ μ CSS 그리λ μμμ΄ λ¬΄μμΈμ§ κ°λ¨ν 볡μ΅ν΄ λ³΄κ² μ΅λλ€.
CSS 그리λλ₯Ό μ¬μ©νλ©΄ grid-template-columns λ° grid-template-rowsμ κ°μ μμ±μ μ¬μ©νμ¬ κ·Έλ¦¬λ ꡬ쑰λ₯Ό μ μν©λλ€. κ·Έλ° λ€μ 그리λ μμμ μ¬μ©νλ©΄ μ΄ κ·Έλ¦¬λμ νΉμ μμμ μ΄λ¦μ ν λΉν μ μμ΅λλ€. μλ₯Ό λ€μ΄:
.container {
display: grid;
grid-template-columns: 1fr 3fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
}
.header {
grid-area: header;
}
.nav {
grid-area: nav;
}
.main {
grid-area: main;
}
.aside {
grid-area: aside;
}
.footer {
grid-area: footer;
}
μ΄ μμμλ ν€λ, λ΄λΉκ²μ΄μ
, λ©μΈ μ½ν
μΈ μμ, μ¬μ΄λλ°, νΈν°κ° μλ κΈ°λ³Έ λ μ΄μμμ λ§λ€μμ΅λλ€. grid-template-areas μμ±μ 그리λ ꡬ쑰λ₯Ό μκ°μ μΌλ‘ λνλ΄μ΄ λ μ΄μμμ νλμ μ½κ² μ΄ν΄ν μ μκ² ν©λλ€. κ·Έλ° λ€μ grid-area μμ±μ κ° μμλ₯Ό ν΄λΉ μμμ ν λΉν©λλ€.
μλ§¨ν± λ€μ΄λ° 컨벀μ μ΄ μ€μν μ΄μ
μμ μμλ μλνμ§λ§, λͺ κ°μ§ μ΄μ λ‘ μλ§¨ν± λ€μ΄λ° 컨벀μ μ μ±ννλ κ²μ΄ μ€μν©λλ€:
- μ μ§λ³΄μμ±: μ λͺ λͺ λ μμμ νΉν λκ·λͺ¨ νλ‘μ νΈμμ CSSλ₯Ό λ μ½κ² μ΄ν΄νκ³ μμ ν μ μκ² λ§λλλ€. λͺ νν μ΄λ¦μ κ° μμμ λͺ©μ μ μ λ¬νμ¬ μΈμ§ λΆνλ₯Ό μ€μ΄κ³ λλ²κΉ μ λ ν¨μ¨μ μΌλ‘ λ§λλλ€.
- νμ₯μ±: μλ§¨ν± μ΄λ¦μ μ½λ μ¬μ¬μ©μ μ΄μ§νκ³ λͺ¨λμ λ μ΄μμ μμ±μ μ©μ΄νκ² ν©λλ€. νλ‘μ νΈκ° μ±μ₯ν¨μ λ°λΌ λΆμΌμΉλ₯Ό μ λ°νμ§ μκ³ κ·Έλ¦¬λ ꡬ쑰λ₯Ό μ½κ² μ‘°μ νκ³ νμ₯ν μ μμ΅λλ€.
- μ κ·Όμ±: μ€ν¬λ¦° 리λ λ° κΈ°ν 보쑰 κΈ°μ μ μΉ νμ΄μ§μ ꡬ쑰λ₯Ό μ΄ν΄νκΈ° μν΄ μλ§¨ν± HTMLμ μμ‘΄ν©λλ€. CSS 그리λ λ μ΄μμμμ μλ§¨ν± μ΄λ¦μ μ¬μ©νλ©΄ κΈ°λ³Έ HTML ꡬ쑰λ₯Ό κ°ννκ³ μ κ·Όμ±μ ν₯μμν΅λλ€.
- κ΅μ ν(i18n) λ° νμ§ν(l10n): νΉμ μκ°μ μμ±μ λ¬ΆμΈ μ΄λ¦ λμ μΆμμ μΈ μλ§¨ν± μ΄λ¦μ μ¬μ©νλ©΄ λ€λ₯Έ μΈμ΄ λ° λ¬Ένμ λ§₯λ½μ λ μ μ°νκ² μ μν μ μμ΅λλ€. "μ¬μ΄λλ°"λ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ μΈμ΄ λ μ΄μμμμλ "λ΄λΉκ²μ΄μ " μμκ° λ μ μμΌλ©°, "site-navigation"κ³Ό κ°μ μ€λ¦½μ μΈ μ΄λ¦μ μ¬μ©νλ©΄ μ΄λ¬ν λ³κ²½μ΄ μ©μ΄ν΄μ§λλ€.
- ν νμ : μΌκ΄λ λ€μ΄λ° 컨벀μ μ κ°λ°ν λ΄μ μμ¬μν΅κ³Ό νμ μ κ°μ ν©λλ€. λͺ¨λ μ¬λμ΄ κ° κ·Έλ¦¬λ μμμ λͺ©μ μ μ΄ν΄νμ¬ μ€λ₯ λ° λΆμΌμΉμ μνμ μ€μ λλ€.
μλ§¨ν± λ€μ΄λ°μ ν΅μ¬ μμΉ
λ€μμ μλ§¨ν± λ€μ΄λ° 컨벀μ μ μλ΄νλ λͺ κ°μ§ ν΅μ¬ μμΉμ λλ€:
1. μμΉκ° μλ μ½ν μΈ λ₯Ό μ€λͺ νμΈμ
"top-left" λλ "bottom-right"μ κ°μ΄ 그리λ λ΄μ νΉμ μμΉμ λ¬ΆμΈ μ΄λ¦μ νΌνμΈμ. λμ ν΄λΉ μμμ μ°¨μ§ν μ½ν μΈ λ₯Ό μ€λͺ νλ λ° μ§μ€νμΈμ. μλ₯Ό λ€μ΄, "top-row" λμ "site-header"λ₯Ό μ¬μ©νκ³ "center-area" λμ "main-content"λ₯Ό μ¬μ©νμΈμ. μ΄λ κ² νλ©΄ μ½λκ° λ μ΄μμ ꡬ쑰 λ³κ²½μ λ νλ ₯μ μΌλ‘ λμν μ μμ΅λλ€.
μμ:
λμ μ:
.container {
grid-template-areas:
"top-left top-right"
"bottom-left bottom-right";
}
.logo {
grid-area: top-left;
}
μ’μ μ:
.container {
grid-template-areas:
"site-logo site-navigation"
"main-content advertisement";
}
.logo {
grid-area: site-logo;
}
"μ’μ μ"λ μ€μ λ μ΄μμμ λ³΄μ§ μκ³ λ λ μ€λͺ μ μ΄κ³ μ΄ν΄νκΈ° μ½μ΅λλ€.
2. μΌκ΄λ μ©μ΄λ₯Ό μ¬μ©νμΈμ
μΌλ°μ μΈ λ μ΄μμ μμμ λν μΌκ΄λ μ΄νλ₯Ό μ€μ νκ³ νλ‘μ νΈ μ λ°μ κ±Έμ³ μ΄λ₯Ό κ³ μνμΈμ. μ΄λ λͺ νμ±μ μ μ§νκ³ νΌλμ μ€μ΄λ λ° λμμ΄ λ©λλ€. μλ₯Ό λ€μ΄, "main-nav," "global-navigation," "top-nav" μ¬μ΄λ₯Ό μ€κ°λ λμ μΌκ΄λκ² "site-navigation"μ μ¬μ©νμΈμ.
3. μΆ©λΆν ꡬ체μ μΌλ‘ μμ±νμΈμ
μμΉμ λ¬ΆμΈ μ§λμΉκ² ꡬ체μ μΈ μ΄λ¦μ νΌνλ κ²μ΄ μ€μνμ§λ§, μ΄λ¦μ΄ λ€λ₯Έ μμμ ꡬλ³ν μ μμ λ§νΌ μΆ©λΆν μ€λͺ μ μΈμ§ νμΈν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, μ¬λ¬ λ΄λΉκ²μ΄μ μμμ΄ μλ κ²½μ° "site-navigation," "secondary-navigation," "footer-navigation"κ³Ό κ°μ μ΄λ¦μ μ¬μ©νμ¬ κ΅¬λ³νμΈμ.
4. κ³μΈ΅ ꡬ쑰λ₯Ό κ³ λ €νμΈμ
λ μ΄μμμ μ€μ²©λ 그리λ μμμ΄ ν¬ν¨λ κ²½μ° λ€μ΄λ° 컨벀μ μ κ³μΈ΅ ꡬ쑰λ₯Ό λ°μνλ κ²μ κ³ λ €νμΈμ. μλ₯Ό λ€μ΄, μ λμ¬λ μ λ―Έμ¬λ₯Ό μ¬μ©νμ¬ λΆλͺ¨ μμμ λνλΌ μ μμ΅λλ€. μλ₯Ό λ€μ΄, ν€λ λ΄μ λ΄λΉκ²μ΄μ μμμ΄ μλ κ²½μ° "header-navigation"μΌλ‘ λͺ λͺ ν μ μμ΅λλ€.
5. κ΅μ ν(i18n) λ° νμ§ν(l10n)λ₯Ό κ³ λ €νμΈμ
κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ λμμΈν λ λ€μ΄λ° 컨벀μ μ΄ κ΅μ ν λ° νμ§νμ μ΄λ€ μν₯μ λ―ΈμΉ μ μλμ§ κ³ λ €νμΈμ. νΉμ μΈμ΄ λ λ¬Ένμ κ΅νλ μ΄λ¦μ μ¬μ©νμ§ λ§μΈμ. λμ , λ€λ₯Έ λ§₯λ½μ μ½κ² λ²μλκ±°λ μ μ©λ μ μλ λ μΆμμ μ΄κ³ μ€λ¦½μ μΈ μ©μ΄λ₯Ό μ ννμΈμ.
μμ:
νΉμ μκ°μ λ°°μΉλ₯Ό μμνλ "sidebar"λ₯Ό μ¬μ©νλ λμ , λ μ€λ¦½μ μ΄κ³ λ€μν λ μ΄μμ λ°©ν₯ λ° λ¬Ένμ κ΄μ΅μ μ μ©ν μ μλ "site-navigation" λλ "page-aside" μ¬μ©μ κ³ λ €νμΈμ.
6. ꡬλΆμ μν΄ λμ λλ λ°μ€μ μ¬μ©νμΈμ
그리λ μμ μ΄λ¦μ λ¨μ΄λ₯Ό ꡬλΆνκΈ° μν΄ λμ(-) λλ λ°μ€(_)μ μ¬μ©νμΈμ. μ¬κΈ°μ μΌκ΄μ±μ΄ ν΅μ¬μ
λλ€. νλλ₯Ό μ ννκ³ κ·Έκ²μ κ³ μνμΈμ. λμλ CSS μμ± λͺ
λͺ
κ·μΉ(μ: grid-template-areas)κ³Ό μΌμΉνλ―λ‘ μΌλ°μ μΌλ‘ CSSμμ μ νΈλ©λλ€.
7. μ΄λ¦μ κ°κ²°νκ² μ μ§νμΈμ
μ€λͺ μ μΈ μ΄λ¦μ΄ μ€μνμ§λ§, μ§λμΉκ² κΈΈκ±°λ μ₯ν©νκ² λ§λ€μ§ λ§μΈμ. λͺ νμ±κ³Ό κ°κ²°μ± μ¬μ΄μ κ· νμ λͺ©νλ‘ νμΈμ. μ§§μ μ΄λ¦μ μ½κ³ κΈ°μ΅νκΈ°κ° λ μ½μ΅λλ€.
μλ§¨ν± λ€μ΄λ° 컨벀μ μ μ€μ μμ
λ€μν μλ리μ€μμ μ΄λ¬ν μμΉμ μ μ©νλ λ°©λ²μ λν λͺ κ°μ§ μ€μ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ 1: κΈ°λ³Έ μΉμ¬μ΄νΈ λ μ΄μμ
.container {
display: grid;
grid-template-columns: 1fr 3fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"site-header site-header site-header"
"site-navigation main-content page-aside"
"site-footer site-footer site-footer";
}
.header {
grid-area: site-header;
}
.nav {
grid-area: site-navigation;
}
.main {
grid-area: main-content;
}
.aside {
grid-area: page-aside;
}
.footer {
grid-area: site-footer;
}
μ΄ μμμλ "site-header," "site-navigation," "main-content," "page-aside," "site-footer"μ κ°μ μλ§¨ν± μ΄λ¦μ μ¬μ©νμ¬ κ° κ·Έλ¦¬λ μμμ λͺ©μ μ λͺ ννκ² μ μνμ΅λλ€.
μμ 2: μ μμκ±°λ μ ν νμ΄μ§
.product-page {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"product-title product-title"
"product-image product-details"
"product-description product-description";
}
.product-title {
grid-area: product-title;
}
.product-image {
grid-area: product-image;
}
.product-details {
grid-area: product-details;
}
.product-description {
grid-area: product-description;
}
μ¬κΈ°μλ "product-title," "product-image," "product-details," "product-description"κ³Ό κ°μ μ΄λ¦μ μ¬μ©νμ¬ μ μμκ±°λ μ ν νμ΄μ§μ νΉμ μ½ν μΈ λ₯Ό λ°μνμ΅λλ€.
μμ 3: μ€μ²©λ 그리λκ° μλ λΈλ‘κ·Έ ν¬μ€νΈ λ μ΄μμ
.blog-post {
display: grid;
grid-template-columns: 3fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"post-header post-header"
"post-content sidebar"
"post-footer post-footer";
}
.post-header {
grid-area: post-header;
}
.post-content {
grid-area: post-content;
}
.sidebar {
grid-area: sidebar;
display: grid; /* μ€μ²© 그리λ */
grid-template-rows: auto auto;
grid-template-areas:
"sidebar-advertisement"
"sidebar-categories";
}
.sidebar-advertisement {
grid-area: sidebar-advertisement;
}
.sidebar-categories {
grid-area: sidebar-categories;
}
.post-footer {
grid-area: post-footer;
}
μ΄ μμμλ μ¬μ΄λλ° μμ λ΄μ μ€μ²©λ 그리λλ₯Ό μ¬μ©νμ΅λλ€. μ€μ²©λ 그리λλ "sidebar-advertisement" λ° "sidebar-categories"μ κ°μ μ΄λ¦μ μ¬μ©νμ¬ μ΄λ¬ν μμμ΄ μ¬μ΄λλ°μ μμμμ λνλ λλ€.
그리λ μμ μ΄λ¦ κ΄λ¦¬λ₯Ό μν λꡬ λ° κΈ°μ
νλ‘μ νΈκ° 볡μ‘ν΄μ§μ λ°λΌ 그리λ μμ μ΄λ¦μ κ΄λ¦¬νλ λ° λμμ΄ λλ λꡬμ κΈ°μ μ μ¬μ©νλ κ²μ κ³ λ €ν μ μμ΅λλ€.
- CSS μ μ²λ¦¬κΈ° (Sass, Less): CSS μ μ²λ¦¬κΈ°λ₯Ό μ¬μ©νλ©΄ 그리λ μμ μ΄λ¦μ λν λ³μμ λ―Ήμ€μΈμ μ μνμ¬ μ¬μ¬μ© λ° μ μ§λ³΄μλ₯Ό λ μ½κ² ν μ μμ΅λλ€.
- CSS λͺ¨λ: CSS λͺ¨λμ CSS κ·μΉμ κ°λ³ μ»΄ν¬λνΈλ‘ λ²μ μ§μ νμ¬ μ΄λ¦ μΆ©λμ λ°©μ§νκ³ λͺ¨λμ±μ ν₯μμν€λ λ° λμμ΄ λ©λλ€.
- λ€μ΄λ° 컨벀μ λ¬Έμν: νλ‘μ νΈμ 그리λ μμ λ€μ΄λ° 컨벀μ μ μμ½ν λ¬Έμλ₯Ό λ§λ€κ³ νκ³Ό 곡μ νμΈμ. μ΄λ μΌκ΄μ±κ³Ό λͺ νμ±μ 보μ₯νλ λ° λμμ΄ λ©λλ€.
μ κ·Όμ± κ³ λ € μ¬ν
μλ§¨ν± λ€μ΄λ° 컨벀μ μ΄ CSS 그리λ λ μ΄μμμ μ λ°μ μΈ κ΅¬μ‘°μ μ μ§λ³΄μμ±μ ν₯μμν€μ§λ§, μ κ·Όμ±λ κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
- μλ§¨ν± HTML μ¬μ©: HTML μμκ° μλ―Έμ μΌλ‘ μ μλ―Ένκ³ ν¬ν¨λ μ½ν
μΈ λ₯Ό μ ννκ² λ°μνλμ§ νμΈνμΈμ. μλ₯Ό λ€μ΄,
<header>,<nav>,<main>,<aside>,<footer>μμλ₯Ό μ¬μ©νμ¬ νμ΄μ§λ₯Ό ꡬ쑰ννμΈμ. - μ΄λ―Έμ§μ λν λ체 ν μ€νΈ μ 곡: μ€ν¬λ¦° 리λκ° μ κ·Όν μ μλλ‘ νμ μ΄λ―Έμ§μ μ€λͺ μ μΈ λ체 ν μ€νΈλ₯Ό μ 곡νμΈμ.
- ARIA μμ± μ¬μ©: κ²½μ°μ λ°λΌ 보쑰 κΈ°μ μ μΆκ°μ μΈ μλ§¨ν± μ 보λ₯Ό μ 곡νκΈ° μν΄ ARIA μμ±μ μ¬μ©ν΄μΌ ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄,
roleμμ±μ μ¬μ©νμ¬ κ·Έλ¦¬λ μμμ λͺ©μ μ μ μν μ μμ΅λλ€. - μ€ν¬λ¦° 리λλ‘ ν μ€νΈ: μ₯μ κ° μλ μ¬μ©μκ° μΉμ¬μ΄νΈμ μ κ·Όν μ μλμ§ νμΈνκΈ° μν΄ μ κΈ°μ μΌλ‘ μ€ν¬λ¦° 리λλ‘ ν μ€νΈνμΈμ.
κ²°λ‘
CSS 그리λ μμμ μΉ λ μ΄μμμ μ μνκ³ κ΅¬μ‘°ννλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. μλ§¨ν± λ€μ΄λ° 컨벀μ μ μ±νν¨μΌλ‘μ¨ μκ°μ μΌλ‘ λ§€λ ₯μ μΌ λΏλ§ μλλΌ μ μ§λ³΄μ κ°λ₯νκ³ , νμ₯ κ°λ₯νλ©°, μ κ·Όμ± μκ³ , κΈλ‘λ² μ¬μ©μμκ² μ μν μ μλ λ μ΄μμμ λ§λ€ μ μμ΅λλ€. μ½ν μΈ μ€λͺ , μΌκ΄λ μ©μ΄ μ¬μ©, μΆ©λΆν ꡬ체μ±, κ³μΈ΅ ꡬ쑰 κ³ λ €, κ΅μ ν κ³ λ €, λμ λλ λ°μ€ μ¬μ©, μ΄λ¦ κ°κ²°νκ² μ μ§μ μ€μ μ λλ κ²μ κΈ°μ΅νμΈμ. μ΄λ¬ν μμΉμ λ°λ₯΄λ©΄ CSS 그리λ μμμ λͺ¨λ μ μ¬λ ₯μ λ°ννκ³ μ§μ μΌλ‘ μΈκ³μ μΈ μμ€μ μΉ κ²½νμ λ§λ€ μ μμ΅λλ€.
μΉ κ°λ°μ΄ κ³μ λ°μ ν¨μ λ°λΌ, μ΄μ κ°μ μλ§¨ν± κ΄νμ μμ©νλ κ²μ λͺ¨λ μ¬λμ μν κ²¬κ³ νκ³ ν¬μ©μ μΈ λμ§νΈ κ²½νμ λ§λλ λ° μ μ λ μ€μν΄μ§κ³ μμ΅λλ€.