Skip to content

Màu & tương phản

Bảng màu chia theo vai trò — thiết kế chọn vai trò (nền trang, chữ phụ, trạng thái thành công…), không chọn mã màu. Mọi bảng trên trang này sinh trực tiếp từ @tasco/theme lúc build, nên luôn là giá trị đang chạy trong app.

Vai trò của màu

NhómTokenDùng cho
Thương hiệuprimary, primary-hover, primary-active, primary-softHành động chính, header bảng, mục đang chọn, liên kết đậm
Nhấnaccent, accent-soft, accent-textMục menu đang chọn, huy hiệu, điểm nhấn phụ
Trạng tháisuccess, warning, error, info kèm -soft (và -text cho success/warning)Nhãn trạng thái, thông báo, xu hướng tăng giảm
Liên kếtlink, link-softLiên kết trong văn bản
Chữtext, text-secondary, text-muted, text-subtleBốn cấp chữ, từ đậm đến nhạt
Bề mặtpage, surface, surface-elevated, surface-mutedNền trang, nền card, nền nổi (modal, dropdown), nền dịu
Viềnborder, border-strongViền mặc định, viền cần nổi bật
Sidebarsidebar-top, sidebar-bottomGradient dọc của sidebar

Tên đầy đủ của biến CSS có tiền tố --tasco-color-, vd --tasco-color-primary-soft.

Bảng màu

Giá trị ở chế độ sáng và tối, kèm tỉ lệ tương phản khi đặt màu đó trên nền surface của cùng chế độ.

BiếnSángTối Tương phản
--tasco-color-primary#203368#7090dc12.10:1 / 5.21:1
--tasco-color-primary-hover#2f4b8f#94ade68.32:1 / 7.28:1
--tasco-color-primary-active#182544#35549e15.14:1 / 2.26:1
--tasco-color-primary-soft#eef3fb#1a27401.11:1 / 1.09:1
--tasco-color-accent#ff9800#ffa7262.16:1 / 8.39:1
--tasco-color-accent-soft#fff1d6#3a2c121.12:1 / 1.20:1
--tasco-color-accent-text#9e5d02#ffa7265.22:1 / 8.39:1
--tasco-color-success#089b00#22c55e3.68:1 / 7.15:1
--tasco-color-success-soft#ecfdf5#10241a1.05:1 / 1.00:1
--tasco-color-success-text#087e02#22c55e5.26:1 / 7.15:1
--tasco-color-warning#d97706#fbbf243.19:1 / 9.76:1
--tasco-color-warning-soft#fff7ed#2a21101.06:1 / 1.03:1
--tasco-color-warning-text#a55904#fbbf245.21:1 / 9.76:1
--tasco-color-error#d71431#f871715.21:1 / 5.89:1
--tasco-color-error-soft#fff1f0#2c14161.10:1 / 1.06:1
--tasco-color-info#0f4c81#60a5fa8.86:1 / 6.41:1
--tasco-color-info-soft#e8f2ff#13243d1.13:1 / 1.05:1
--tasco-color-link#1068d6#60a5fa5.29:1 / 6.41:1
--tasco-color-link-soft#e8f2ff#13243d1.13:1 / 1.05:1
--tasco-color-text#10213f#f8fafc16.01:1 / 15.58:1
--tasco-color-text-secondary#4b5563#c0cadb7.56:1 / 9.87:1
--tasco-color-text-muted#5f6b85#9aa6bf5.35:1 / 6.66:1
--tasco-color-text-subtle#9ca3af#6b76892.54:1 / 3.55:1
--tasco-color-surface#ffffff#1620331.00:1 / 1.00:1
--tasco-color-surface-elevated#ffffff#1a27401.00:1 / 1.09:1
--tasco-color-surface-muted#f6f8fc#1118271.06:1 / 1.09:1
--tasco-color-page#edf2f8#0f17241.13:1 / 1.10:1
--tasco-color-border#d8deea#31415f1.35:1 / 1.59:1
--tasco-color-border-strong#bcc6da#4b5f861.72:1 / 2.55:1
--tasco-color-sidebar-top#213368#1c2c5212.08:1 / 1.19:1
--tasco-color-sidebar-bottom#182544#0e1a3315.14:1 / 1.06:1

Gradient và đổ bóng

BiếnSángTối
--tasco-gradient-primarylinear-gradient(135deg, #203368, #2f4b8f)linear-gradient(135deg, #35549e, #4466b8)
--tasco-gradient-dangerlinear-gradient(135deg, #cf1444, #d71431)linear-gradient(135deg, #cf1444, #d71431)
--tasco-shadow-card0 12px 28px rgba(16, 33, 63, 0.08)0 12px 28px rgba(0, 0, 0, 0.35)
--tasco-shadow-raised0 18px 40px rgba(16, 33, 63, 0.14)0 18px 40px rgba(0, 0, 0, 0.5)

Cặp chữ/nền dùng được

Tương phản tối thiểu cho chữ thường là 4.5:1 (WCAG AA). Các cặp dưới đây là cặp component đang dùng; test của @tasco/theme khoá ngưỡng này nên đổi token làm một cặp tụt dưới ngưỡng thì CI báo lỗi. Cặp đánh dấu "Dưới AA" là ngoại lệ đã biết, chỉ dùng cho chữ không cần đọc (placeholder, trạng thái khoá).

Chữ / nềnSángTốiĐang dùng ở
--tasco-color-primary
trên --tasco-color-primary-soft
Aa10.86:1Aa4.77:1CTag primary, CButton ghost, icon CStatistic
--tasco-color-primary-hover
trên --tasco-color-primary-soft
Aa7.47:1Aa6.66:1CButton ghost :hover, ::selection theme tối
--tasco-color-primary
trên --tasco-color-surface
Aa12.10:1Aa5.21:1CButton secondary/outline/link, mục đang chọn của CTopNav, Pagination, Tabs
--tasco-color-primary-hover
trên --tasco-color-surface
Aa8.32:1Aa7.28:1CButton secondary/outline/link :hover
--tasco-color-primary
trên --tasco-color-surface-elevated
Aa12.10:1Aa4.77:1CButton trong modal/drawer/popover
--tasco-color-link
trên --tasco-color-surface
Aa5.29:1Aa6.41:1CTable "Xoá tất cả" trên thanh lọc
--tasco-color-link
trên --tasco-color-surface-elevated
Aa5.29:1Aa5.87:1thẻ <a> trong modal/drawer/popover
--tasco-color-link
trên --tasco-color-surface-muted
Aa4.97:1Aa6.98:1thẻ <a> trong hàng sọc CTable
--tasco-color-link
trên --tasco-color-page
Aa4.70:1Aa7.07:1thẻ <a> trên nền trang
#fff
trên --tasco-color-primary
Aa12.10:1Không dùngheader bảng, CCard primary, nút primary antdv, ngày đang chọn DatePicker
#fff
trên --tasco-color-primary-active
Aa15.14:1Aa7.21:1CChatMessage, cột sort header bảng; theme tối: header bảng, CCard primary, nút antdv, DatePicker
#fff
trên --tasco-gradient-primary
Aa8.32:1Aa5.47:1CButton primary, tab đang chọn của drawer Thiết lập CTable
#fff
trên --tasco-gradient-danger
Aa5.21:1Aa5.21:1CButton danger, nút primary danger antdv, hover item danger Dropdown theme tối
#fff
trên --tasco-color-error
Aa5.21:1Không dùngBadge, hover item danger Dropdown antdv
--tasco-color-sidebar-bottom
trên --tasco-color-accent
Aa7.03:1Aa8.90:1CSideNav mục :hover/đang chọn
--tasco-color-text
trên --tasco-color-surface
Aa16.01:1Aa15.58:1mục chưa chọn của CTopNav, tiêu đề CCard, giá trị CStatistic, nút icon CTable
--tasco-color-text-muted
trên --tasco-color-surface-muted
Aa5.03:1Aa7.25:1CTag default
--tasco-color-text-muted
trên --tasco-color-surface
Aa5.35:1Aa6.66:1nhãn CStatistic, nhãn thanh lọc CTable, footer CAppLayout
--tasco-color-text-muted
trên --tasco-color-surface-elevated
Aa5.35:1Aa6.09:1gợi ý trong drawer Thiết lập CTable
--tasco-color-text-subtle
trên --tasco-color-surface
Aa2.54:1Dưới AA — text-subtle là màu placeholder/disabled của antdv (colorTextQuaternary)Aa3.55:1Dưới AA — text-subtle là màu placeholder/disabled của antdv (colorTextQuaternary)mô tả CEmpty
--tasco-color-accent-text
trên --tasco-color-accent-soft
Aa4.68:1Aa6.98:1CTag accent, icon CStatistic
--tasco-color-success-text
trên --tasco-color-success-soft
Aa4.99:1Aa7.15:1CTag success, icon CStatistic
--tasco-color-warning-text
trên --tasco-color-warning-soft
Aa4.91:1Aa9.51:1CTag warning, icon CStatistic
--tasco-color-error
trên --tasco-color-error-soft
Aa4.73:1Aa6.23:1CTag error, icon CStatistic
--tasco-color-info
trên --tasco-color-info-soft
Aa7.83:1Aa6.13:1CTag info, icon CStatistic
--tasco-color-accent-text
trên --tasco-color-surface
Aa5.22:1Aa8.39:1cặp dùng được ở trang Màu & tương phản của docs
--tasco-color-success-text
trên --tasco-color-surface
Aa5.26:1Aa7.15:1chữ CStatus hoạt động, trend tăng CStatistic
--tasco-color-warning-text
trên --tasco-color-surface
Aa5.21:1Aa9.76:1cặp dùng được ở trang Màu & tương phản của docs
--tasco-color-error
trên --tasco-color-surface
Aa5.21:1Aa5.89:1chữ CStatus không hoạt động, trend giảm CStatistic
--tasco-color-info
trên --tasco-color-surface
Aa8.86:1Aa6.41:1cặp dùng được ở trang Màu & tương phản của docs
--tasco-color-error
trên --tasco-color-surface-elevated
Aa5.21:1Aa5.39:1item danger của Dropdown trong menu thao tác
--tasco-color-success-text
trên --tasco-color-info-soft
Aa4.65:1Aa6.84:1chữ CStatus trong hàng đang chọn của bảng
--tasco-color-error
trên --tasco-color-info-soft
Aa4.61:1Aa5.63:1chữ CStatus trong hàng đang chọn của bảng

Quy tắc chọn màu

  • accent, success, warning là màu nền. Đặt làm chữ trên nền sáng thì không đủ tương phản — chữ màu đó dùng biến -text tương ứng (--tasco-color-success-text).
  • primary, error, info làm chữ được ngay trên surface và trên nền -soft của chính nó.
  • Chữ trắng chỉ đặt trên primary-active, gradient-primary, gradient-danger; ở chế độ sáng thêm primaryerror.
  • Chữ trên nền cam accent dùng navy sidebar-bottom, không dùng chữ trắng.
  • text-subtle dưới ngưỡng AA — chỉ cho placeholder và trạng thái khoá, không cho nội dung người dùng cần đọc.
  • Nền -soft đi với chữ cùng họ: success-soft với success-text, error-soft với error. Trộn họ (chữ error trên success-soft) vừa khó đọc vừa sai nghĩa.

Màu trạng thái

Một trạng thái nghiệp vụ luôn đi với cùng một màu trong toàn hệ thống:

MàuNghĩaVí dụ
successHoàn tất, đang hoạt động, hợp lệĐã duyệt, Đã giao, Hoạt động
warningCần chú ý, đang chờ, sắp hết hạnChờ duyệt, Sắp hết hạn
errorThất bại, bị huỷ, không hoạt độngTừ chối, Đã huỷ, Quá hạn
infoĐang xử lý, thông tin trung tínhĐang giao, Đang xử lý
primaryTrạng thái gắn với thương hiệu, mới tạoMới
defaultChưa bắt đầu, nháp, không phân loạiNháp

Nhãn trạng thái dùng CTag với color tương ứng; trạng thái bật/tắt dùng CStatus. Màu luôn đi kèm chữ — người dùng không phân biệt được màu vẫn đọc được trạng thái.

Chế độ tối

Người dùng tự bật chế độ tối trên header. Hai chế độ không đối xứng hoàn toàn:

  • Ở chế độ tối, primary là màu sáng dùng làm chữ; nền có chữ trắng chuyển sang primary-active. Header bảng, card kiểu primary và nút primary của antdv tự đổi theo quy tắc này.
  • -text của accent, success, warning trùng màu gốc vì màu gốc ở chế độ tối đã đủ sáng.
  • Gradient danger giữ nguyên ở cả hai chế độ.

Thiết kế một màn hình thì kiểm tra cả hai chế độ. Màu tự đặt ngoài token sẽ không đổi theo — nguyên nhân phổ biến nhất của chữ tối trên nền tối.

Cho designer

  • Mã màu trong bảng trên dùng để dựng thư viện màu cho file thiết kế; đặt tên màu trong file thiết kế trùng tên token (primary-soft, text-muted) để dev tra ngược được.
  • Cần một màu chưa có vai trò nào đáp ứng: đề xuất token mới, kèm cặp chữ/nền dự kiến dùng — xem Đổi design token.

Liên quan