Skip to content

Bố cục trang chuẩn

Mọi màn hình nằm trong cùng một khung app và bắt đầu bằng cùng một phần đầu trang. Thiết kế chỉ quyết định phần nội dung — khung do layer dựng sẵn, dự án không vẽ lại.

Khung app

┌────────────┬──────────────────────────────────────────────────────┐
│ Logo  Tên  │ Menu module (topNav)          Sáng/tối  🔔  Tài khoản │  header
├────────────┼──────────────────────────────────────────────────────┤
│            │ ┌──────────────────────────────────────────────────┐ │
│  Sidebar   │ │ Đầu trang: breadcrumb · tiêu đề · hành động       │ │
│  (nav)     │ └──────────────────────────────────────────────────┘ │
│            │ ┌──────────────────────────────────────────────────┐ │
│  248px     │ │ Khối nội dung                                     │ │  nền page,
│  thu gọn:  │ └──────────────────────────────────────────────────┘ │  lề 8px
│  64px      │ ┌──────────────────────────────────────────────────┐ │
│            │ │ Khối nội dung                                     │ │
│            │ └──────────────────────────────────────────────────┘ │
├────────────┴──────────────────────────────────────────────────────┤
│                         Chân trang (footerText)                   │
└───────────────────────────────────────────────────────────────────┘
VùngQuy ướcCấu hình
Dải logoNền navy, rộng bằng sidebarTên app: tasco.appTitle
SidebarRộng 248px; bấm nút cạnh logo thu gọn còn 64px chỉ hiện icon; nền gradient navyMenu: tasco.nav
HeaderNền trắng; menu module bên trái, nút chế độ sáng/tối, thông báo, tài khoản bên phảiMenu: tasco.topNav
Nội dungNền page, lề 8px, cuộn dọc độc lập với khung
Chân trangNền trắng, chữ text-muted canh giữatasco.footerText

Cấu hình menu và tiêu đề: Khung giao diện. Trang không cần khung (đăng nhập, màn hình trình chiếu) đặt layout: false.

Cấu trúc một trang

  1. Đầu trangCPageHeader: breadcrumb, tiêu đề, một dòng mô tả, nhóm hành động của cả trang ở bên phải.
  2. Các khối nội dung — mỗi khối một việc, xếp dọc, cách nhau 8px. Khối có tiêu đề dùng CCard; danh sách dùng CTable (đã có sẵn khung card riêng).

Đầu trang

  • Tiêu đề là tên đối tượng hoặc tên màn hình: "Đơn hàng", "Đơn hàng DH-0001", "Tạo đơn hàng". Không đặt câu mệnh lệnh hay mô tả chức năng vào tiêu đề.
  • Breadcrumb đi theo cấu trúc nghiệp vụ, mục cuối là trang hiện tại và không bấm được. Trang cấp một không cần breadcrumb.
  • Hành động của cả trang đặt ở #extra: hành động chính ở ngoài cùng bên phải; hành động phá huỷ đứng đầu nhóm. Hành động của riêng một khối thì đặt trong khối đó.

Khối nội dung

  • Khối có tiêu đề ngắn là danh từ: "Thông tin chung", "Lịch sử xử lý".
  • Không lồng card trong card, không bọc CTable trong CCard — thành hai lớp viền.
  • Khối phụ, ít quan trọng thì cho thu gọn (CCard collapsible); khối chính luôn mở.

Bốn mẫu trang

MẫuCấu trúcHướng dẫn
Danh sáchĐầu trang → CTable có toolbar (tìm, lọc, thêm mới), phân trang ở chân bảngTrang danh sách
Form thêm/sửaĐầu trang → các CCard theo nhóm trường → hàng nút cuối form: Huỷ bên trái, Lưu (primary) bên phảiTrang form
Chi tiếtĐầu trang có hành động trên bản ghi → khối thông tin (CDescriptions) → bảng con hoặc tabTrang chi tiết
Tổng quanĐầu trang có bộ lọc thời gian → hàng CStatistic → các khối biểu đồ, bảng rút gọnTrang tổng quan

Lưới và màn hình hẹp

Chia cột bằng Row + Col của @tasco/ui (lưới 24 cột), khoảng cách cột :gutter="16". Luôn khai cách xếp ở màn hình nhỏ nhất trước.

Điểm ngắtTừCách xếp khuyến nghị
xs0Một cột (:xs="24")
sm576pxSố liệu: 2 cột
md768pxForm, thông tin chi tiết: 2 cột
lg992pxSố liệu: 3–4 cột
xl1200pxForm dài: 3 cột nếu các trường ngắn
xxl1600pxGiữ như xl; không kéo dòng chữ quá dài
  • Sidebar không tự thu gọn theo độ rộng màn hình — người dùng bấm nút cạnh logo; màn hình hẹp vẫn phải dùng được khi sidebar đang mở rộng.
  • Bảng nhiều cột cuộn ngang (:scroll="{ x: 1200 }") thay vì ép chữ xuống dòng hay ẩn cột.
  • Form một cột trên màn hình hẹp; nhãn đặt phía trên ô nhập.

Khoảng cách

GiữaKhoảng
Khung app và nội dung8px
Hai khối liên tiếp8px
Các nút trong một nhóm8px
Các ô form trên một hàng16px (gutter)
Các ô form theo chiều dọc16px (mặc định của form)

Giá trị theo đơn vị 8px — xem Chữ, khoảng cách & mật độ.

Không nên

  • Thêm tiêu đề trang thứ hai bên trong nội dung.
  • Đặt hành động chính ở giữa hoặc bên trái trang.
  • Kéo form hay đoạn văn dài hết chiều ngang màn hình rộng — giới hạn cột để dòng chữ dễ đọc.
  • Dựng khung riêng (sidebar, header) cho một màn hình.

Liên quan