Sai lầm lớn nhất của Developer là sử dụng các con số ngẫu nhiên (padding: 13px, margin-top: 21px). Một UI chuyên nghiệp phải dựa trên một Hệ thống toán học chặt chẽ.
1. Hệ thống 8pt Grid (The Gold Standard)
Trong thiết kế UI hiện đại, hầu hết các hệ thống (Apple, Google, Tailwind) đều dựa trên bội số của 8.
Tại sao lại là 8?
- Tương thích màn hình: 8 là số chẵn, khi chia đôi (4), chia tư (2) vẫn là số nguyên, giúp tránh bị hiện tượng "pixel mờ" trên các màn hình có độ phân giải khác nhau.
- Tính nhất quán: Nó giới hạn lựa chọn của bạn. Thay vì phân vân giữa 10, 11, 12, 13px, bạn chỉ có 8 hoặc 16px.
| Tailwind Class | Pixels | Ứng dụng |
|---|---|---|
| p-1 / m-1 | 4px | Khoảng cách cực nhỏ (giữa icon và text). |
| p-2 / m-2 | 8px | Khoảng cách nhỏ (padding trong button). |
| p-4 / m-4 | 16px | Khoảng cách tiêu chuẩn. Padding cho card, gap giữa các thẻ. |
| p-6 / m-6 | 24px | Khoảng cách trung bình. Padding cho các section lớn. |
| p-8 / m-8 | 32px | Khoảng cách lớn. Phân tách các khối nội dung chính. |
2. Quy chuẩn Spacing cho Component phổ biến
Việc chọn đúng padding không chỉ giúp component đẹp mà còn giúp nó trông "cân đối" về mặt thị giác.
A. Nút bấm (Buttons)
Đừng bao giờ dùng padding đều 4 phía. Một nút bấm chuẩn luôn cần "độ thở" theo chiều ngang.
- Padding dọc (py): 8px - 10px (
py-2hoặcpy-2.5). - Padding ngang (px): 16px - 20px (
px-4hoặcpx-5). - Tỷ lệ vàng:
pxnên gấp 2 lần đến 2.5 lầnpy. - Khoảng cách Icon: Nếu nút có icon và text, hãy dùng
gap-2(8px).
B. Ô nhập liệu (Inputs)
Input cần sự đồng bộ với Button để khi đặt cạnh nhau không bị lệch.
- Padding trái/phải: 12px - 16px (
px-3hoặcpx-4). - Padding trên/dưới: Tùy thuộc vào font-size để đạt được chiều cao mục tiêu (thường là 40px).
- Icon: Nếu có icon ở đầu, hãy dùng padding-left lớn hơn (vd: 40px -
pl-10) để không đè lên icon.
C. Thẻ (Cards) - Quy tắc "Trong nhỏ, Ngoài lớn"
Card là nơi chứa nhiều thông tin, vì vậy spacing bên trong card phải cực kỳ khoa học.
- Container Padding: 16px (
p-4) cho card nhỏ, 24px (p-6) cho card lớn. - Header & Body Gap: Dùng
gap-4(16px) để tách biệt tiêu đề và nội dung. - Quy tắc Đệm (Outer vs Inner): Padding của thẻ cha luôn phải lớn hơn khoảng cách giữa các phần tử con bên trong.
| Component | Padding (p) | Gap (g) | Ghi chú |
|---|---|---|---|
| Button | py-2 px-4 | gap-2 | Tỷ lệ 1:2. |
| Input | p-2.5 | gap-3 | Đồng bộ với Button. |
| Card (S) | p-4 | gap-4 | Tiêu chuẩn UI hiện đại. |
| Card (L) | p-6 | gap-6 | Dành cho Dashboard lớn. |
3. Khoảng cách giữa các Component (Margin / Gap)
Sử dụng khoảng cách để nhóm (Group) hoặc tách (Separate) thông tin.
8px (Small - gap-2)
Dùng cho các thành phần rất gần gũi:
- Giữa tiêu đề và mô tả ngắn ngay bên dưới.
- Giữa các tag (nhãn) trong cùng một nhóm.
16px (Medium - gap-4)
Dùng cho các thành phần cùng cấp:
- Khoảng cách giữa các Input trong một Form.
- Khoảng cách giữa các Card trong một hàng của thư viện.
32px - 48px (Large - gap-8 / gap-12)
Dùng để phân chia các Section khác nhau:
- Khoảng cách giữa Header và Content chính.
- Khoảng cách giữa các khối chức năng tách biệt trên một trang.
4. Quy chuẩn Border Radius (Bo góc)
Bo góc quyết định "cảm xúc" của website. Đừng bo mỗi chỗ một kiểu.
- 4px (rounded-sm): Cảm giác kỹ thuật, cứng cáp. Dùng cho checkbox, các icon nhỏ.
- 6px - 8px (rounded-md): Tiêu chuẩn cho SaaS. Dùng cho Button, Input, Card. Đây là tỷ lệ mang lại sự chuyên nghiệp nhất.
- 12px - 16px (rounded-xl): Thân thiện, hiện đại. Dùng cho các banner lớn, modal popup.
- 999px (rounded-full): Dùng cho nút tròn, tag (Badges) hoặc avatar.
5. Kích thước chiều cao chuẩn (Standard Heights)
Để các component (Button, Input, Select) đứng cạnh nhau nhìn đẹp, chúng phải có cùng chiều cao (Height).
| Size | Height | Ứng dụng |
|---|---|---|
| Small | 32px | Các nút phụ, bảng dữ liệu hẹp. |
| Default | 40px | Tiêu chuẩn quốc tế. Phù hợp cho hầu hết Form và Button. |
| Large | 48px | Nút bấm trên Landing Page, Mobile UI (dễ chạm). |
6. Layout Max-width
Đừng để nội dung của bạn tràn ra hết màn hình 4K.
- Max-width cho Content: 600px - 800px (tối ưu cho việc đọc văn bản).
- Max-width cho Page: 1200px - 1440px (chuẩn cho màn hình Laptop/Desktop hiện nay).
// ✅ Cách bọc giao diện chuẩn
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
{children}
</div>Kết luận
Hệ thống Spacing tốt giúp ứng dụng của bạn có "nhịp điệu" (Rhythm). Người dùng không cần hiểu toán học, nhưng họ sẽ cảm nhận được sự "vừa vặn" và "dễ chịu" khi mọi thứ đều tuân theo một quy luật thống nhất.
Hãy nhớ: Khi phân vân, hãy dùng 16px (4).