grid-template-areas đặt tên cho vùng rồi vẽ layout bằng chuỗi ASCII; đổi responsive chỉ cần vẽ lại bản đồ, không đụng tới HTML hay order.
css
.dashboard {
display: grid;
grid-template-columns: 240px minmax(0, 1fr);
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
min-height: 100dvh;
gap: 16px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main"
"sidebar"
"footer";
}
}Quy tắc cần nhớ: mỗi chuỗi là một hàng, số token mỗi hàng phải bằng nhau, tên lặp lại thì vùng trải dài (span), dấu . là ô trống. Vùng phải là hình chữ nhật — nếu không, cả khai báo bị coi là không hợp lệ.
Cảnh báo a11y: thứ tự hiển thị đã khác thứ tự DOM (sidebar tụt xuống dưới main) trong khi thứ tự đọc và tab vẫn theo DOM. Chỉ nên sắp lại khi trình tự đọc vẫn hợp lý.