CSS Subgrid và Container Queries: Thay thế hoàn toàn Media Queries phức tạp
Thoát khỏi sự phụ thuộc vào kích thước màn hình toàn cục Viewport Trong hơn một thập kỷ, các lập trình viên Frontend đều dựa vào Media Queries @media min-width: 768px để làm giao diện Responsive. Tuy…
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Thoát khỏi sự phụ thuộc vào kích thước màn hình toàn cục (Viewport)#
Trong hơn một thập kỷ, các lập trình viên Frontend đều dựa vào Media Queries (@media (min-width: 768px)) để làm giao diện Responsive.
Tuy nhiên, Media Queries có một hạn chế cố hữu: Nó chỉ quan tâm đến độ rộng của toàn bộ màn hình thiết bị, chứ không quan tâm đến độ rộng của khung chứa (Container) mà component đó đang nằm bên trong.
Hai tính năng CSS hiện đại đã được hỗ trợ 100% trên mọi trình duyệt lớn là Container Queries và Subgrid.
1. Container Queries: Component tự thích ứng theo không gian thực tế#
/* Đánh dấu phần tử cha là một container theo chiều ngang */
.card-wrapper {
container-type: inline-size;
}
/* Khi khung chứa của component rộng hơn 400px: Tự động đổi layout! */
@container (min-width: 400px) {
.user-card {
display: flex;
flex-direction: row;
gap: 1.5rem;
}
}
Bây giờ, dù bạn đặt component .user-card ở sidebar hẹp (màn hình to nhưng sidebar nhỏ) hay ở giữa trang chính, component đều tự động hiển thị layout hoàn hảo mà không cần viết media query riêng cho từng trang!
2. CSS Subgrid: Căn hàng thẳng tắp giữa các Card độc lập#
Trước đây trong CSS Grid, các phần tử con bên trong mỗi Card không thể căn thẳng hàng với nhau nếu độ dài của tiêu đề hoặc mô tả không đều nhau.
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
grid-template-rows: auto auto auto; /* 3 hàng: Header, Body, Footer */
}
.card-item {
display: grid;
grid-template-rows: subgrid; /* Kế thừa trực tiếp lưới của cha! */
grid-row: span 3;
}
Tất cả các nút "Xem chi tiết" ở chân card sẽ luôn luôn nằm trên cùng một đường thẳng tắp, đẹp mắt tuyệt đối!
Góc thảo luận#
Anh em đã đưa Container Queries và Subgrid vào dự án production thực tế chưa? Còn rào cản nào về browser compatibility không?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #Frontend & Web UI
-
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Tối ưu SEO cho Website Client-Side Rendering: Dynamic Rendering vs Static Export
Lan Anh (Senior Frontend) · 💬 1 -
Debug Memory Leak trong Single Page Application bằng Chrome DevTools Memory Profiler
Lan Anh (Senior Frontend) · 💬 1 -
Viết Component Accessible (a11y) chuẩn WAI-ARIA: Giúp website thân thiện với mọi đối tượng
Lan Anh (Senior Frontend) · 💬 1 -
Deep-dive React 19 Actions và useActionState: Đơn giản hóa quản lý Form không cần thư viện ngoài
Lan Anh (Senior Frontend) · 💬 1