- HTML ngữ nghĩa và form gốc
- Dùng landmark (header, nav, main, aside), heading theo thứ tự, button cho hành động và a cho điều hướng. Form gốc với label, fieldset, các type input và constraint validation (required, pattern, :user-invalid) cho bạn rất nhiều hành vi miễn phí. Element dialog với showModal() và popover attribute xử lý focus, top layer và Esc mà không cần tự viết.
- Layout: Flexbox, Grid, subgrid
- Flexbox cho bố cục một chiều, Grid cho hai chiều, subgrid để các card con thẳng hàng theo lưới của cha. Học kỹ min(), max(), clamp(), các đơn vị dvh/svh và logical properties (margin-inline, padding-block) để layout đúng cả với ngôn ngữ RTL.
- Container queries và :has()
- Container queries (@container, đơn vị cqi) cho phép component tự responsive theo kích thước vùng chứa thay vì viewport, rất hợp với design system. :has() là parent selector: style một card khi nó chứa ảnh, hoặc một form khi có input lỗi, giảm hẳn số class điều kiện viết bằng JavaScript.
- Cascade layers, nesting và specificity
- @layer cho phép khai báo thứ tự ưu tiên (reset, base, components, utilities) độc lập với specificity, nên CSS thư viện không còn đè lên CSS của bạn một cách khó hiểu. Kết hợp với CSS nesting gốc, :where() để giữ specificity bằng 0, và custom properties làm design token.
- View transitions và animation theo scroll
- View Transition API tạo hiệu ứng chuyển trạng thái hoặc chuyển trang bằng document.startViewTransition() và view-transition-name, với SPA đã có hỗ trợ trên các trình duyệt chính. Scroll-driven animations và anchor positioning giúp thay nhiều thư viện JavaScript; luôn kiểm tra trạng thái Baseline và tôn trọng prefers-reduced-motion.