📖 HTML & CSS Nâng cao - CSS Grid Layout
70 phút

CSS Grid Layout

Giới thiệu CSS Grid

CSS Grid là hệ thống layout 2 chiều mạnh mẽ cho thiết kế web.

Grid Container

display: grid

.container {
  display: grid;
}

grid-template-columns & grid-template-rows

.container {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: 100px auto 100px;
}

gap

.container {
  display: grid;
  gap: 20px; /* row-gap và column-gap */
}

Grid Items

grid-column & grid-row

.item {
  grid-column: 1 / 3; /* Bắt đầu từ line 1, kết thúc ở line 3 */
  grid-row: 1 / 2;
}

.item-large {
  grid-column: span 2; /* Chiếm 2 cột */
}

grid-area

.container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar content content"
    "footer footer footer";
}

.header {
  grid-area: header;
}

.sidebar {
  grid-area: sidebar;
}

.content {
  grid-area: content;
}

Advanced Grid Features

minmax()

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}

auto-fit vs auto-fill

.container {
  /* auto-fit: co giãn các track để lấp đầy container */
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  
  /* auto-fill: tạo nhiều track nhất có thể */
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}

Ví dụ thực tế

Holy Grail Layout

<div class="grid-container">
  <header class="header">Header</header>
  <aside class="sidebar">Sidebar</aside>
  <main class="main">Main Content</main>
  <aside class="ads">Ads</aside>
  <footer class="footer">Footer</footer>
</div>
.grid-container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main ads"
    "footer footer footer";
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
  gap: 20px;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.ads { grid-area: ads; }
.footer { grid-area: footer; }

@media (max-width: 768px) {
  .grid-container {
    grid-template-areas:
      "header"
      "sidebar"
      "main"
      "ads"
      "footer";
    grid-template-columns: 1fr;
  }
}

📝 Bài tập (1)

  1. Tạo layout dashboard hiện đại với CSS Grid

Bài học "CSS Grid Layout" - Khóa học "HTML & CSS Nâng cao"