Chuyên môn · Nền tảng token và đa nền tảng

Sáng tối và đa thương hiệu: tính từ đầu hay bổ sung sau?

Câu hỏi không phải dựng đủ ngay hay để sau, mà là cấu trúc token có chừa đường hay không.

Chốt nhanh

Nên tính từ đầu ở cấu trúc, dù chưa cần dựng đủ giao diện tối hay từng thương hiệu ngay lập tức. Bí quyết nằm ở chỗ mọi giá trị màu sắc, kích thước, khoảng cách cần đặt ở tầng token gốc và được điều khiển qua tầng token ngữ nghĩa, để sau này đổi chủ đề hoặc thêm thương hiệu không phải đụng vào component. Nếu bỏ qua tầng ngữ nghĩa và cho component đọc thẳng màu thô, việc thêm chế độ tối hay thương hiệu thứ hai sau này gần như đồng nghĩa với làm lại từ đầu.

Đối sánh nhanh
Nên chọn hướng này khi
  • đã biết sẽ có chế độ tối, nhiều thương hiệu con
  • ngành tài chính hoặc y tế, yêu cầu tương phản cao
  • phục vụ nhiều phân khúc khách hàng khác nhau
Chưa cần khi
  • chắc chắn chỉ một thương hiệu một chế độ (vẫn nên giữ tầng ngữ nghĩa)
Nhìn nhanh
Ngành hay dùng
ngân hàng và tài chínhy tế

Câu hỏi này xuất hiện thường xuyên khi một dự án design system (hệ thống thiết kế) còn non trẻ: chúng ta có nên dựng cả giao diện sáng tối và hỗ trợ nhiều thương hiệu ngay từ đầu, hay cứ làm cho xong bản chính rồi tính sau? Sinh Vũ trả lời thẳng: không cần dựng đủ ngay, nhưng cấu trúc phải chừa đường từ giai đoạn một. Sự khác biệt nằm ở tầng token ngữ nghĩa.

Ba tầng token: nền tảng không thể bỏ

Một design system có cấu trúc token vững cần ít nhất ba tầng rõ ràng.

  • Token gốc (primitive token): lưu toàn bộ giá trị thô, ví dụ màu xanh lam cụ thể, cỡ chữ 14px, khoảng cách 8px. Tầng này không mang ý nghĩa ngữ cảnh.
  • Token ngữ nghĩa (semantic token): đặt tên theo vai trò, ví dụ "màu nền chính", "màu chữ phụ", "đường viền cảnh báo". Tầng này trỏ đến token gốc, và là nơi chủ đề, thương hiệu được điều khiển.
  • Token component: mỗi component chỉ đọc token ngữ nghĩa, không bao giờ đọc thẳng token gốc.

Khi cấu trúc này đứng vững, đổi chủ đề đồng nghĩa với thay ánh xạ ở tầng ngữ nghĩa. Component không cần biết có bao nhiêu chủ đề đang tồn tại.

Đặt mọi giá trị ở tầng token gốc, điều khiển chủ đề và thương hiệu ở tầng ngữ nghĩa, component lõi không đổi.

Material Design 3; Nathan Curtis, EightShapes

Chế độ tối không phải đảo màu

Hiểu sai này dẫn đến nhiều hệ thống có chế độ tối trông kỳ lạ, chữ khó đọc, màu thương hiệu bị lệch sắc. Chế độ tối đúng nghĩa là một bộ token ngữ nghĩa riêng, trong đó mỗi vai trò màu được trỏ sang một giá trị token gốc khác, phù hợp với nền tối.

Ví dụ: "màu nền chính" ở chế độ sáng trỏ về giá trị trắng nhạt, ở chế độ tối trỏ về giá trị xám đậm, không phải giá trị nghịch đảo toán học của màu trắng nhạt. Đây là lý do cần tầng ngữ nghĩa ngay từ đầu, kể cả khi chưa có kế hoạch làm chế độ tối trong sáu tháng tới.

Với các ngành có yêu cầu tương phản cao như tài chính hoặc y tế, nên kiểm tra tương phản đọc được ở cả hai chế độ từ giai đoạn thiết kế nền tảng, không để đến lúc ra mắt tính năng mới phát hiện.

Đa thương hiệu: một bộ component, nhiều bộ token

Lỗi tốn kém nhất Sinh Vũ gặp ở các hệ thống xây vội là nhân đôi component cho mỗi thương hiệu. Một thương hiệu con ra đời, nhóm sao chép toàn bộ thư viện component và chỉnh màu. Từ đó trở đi, mọi cập nhật phải làm hai lần, rồi ba lần.

Cách đúng: giữ một bộ component lõi dùng chung, mỗi thương hiệu có bộ token ngữ nghĩa riêng trỏ về token gốc của thương hiệu đó. Khi component hiển thị, nó chỉ hỏi "màu nền chính là gì?", còn câu trả lời phụ thuộc vào bộ token ngữ nghĩa nào đang được nạp.

Tính từ đầu: Đầu tư thêm một giai đoạn thiết kế cấu trúc token. Component không thay đổi khi thêm thương hiệu mới hoặc chế độ tối. Chi phí mở rộng thấp, đồng đều theo thời gian.

Bổ sung sau: Tiết kiệm thời gian giai đoạn đầu. Khi cần mở rộng, gần như phải kiểm tra và sửa từng component một, hoặc làm lại cấu trúc token trong khi hệ thống đã đang chạy. Rủi ro lỗi cao hơn nhiều.

Khi nào có thể để sau

Sinh Vũ không nói mọi thứ phải làm đủ ngay ngày một. Có những phần hoàn toàn có thể để lại cho giai đoạn sau mà không ảnh hưởng cấu trúc.

  • Chưa cần dựng toàn bộ màn hình giao diện tối nếu sản phẩm chưa ra mắt tính năng đó.
  • Chưa cần điền đủ bộ token ngữ nghĩa cho thương hiệu thứ hai nếu thương hiệu đó chưa có kế hoạch cụ thể.
  • Chưa cần viết tài liệu chi tiết cho từng chế độ ngay lúc này.

Điều không thể để sau: quyết định đặt tầng ngữ nghĩa vào cấu trúc hay không. Đây là quyết định một chiều, và chọn sai ở bước này sẽ kéo chi phí sửa lên rất cao về sau.

Góc nhìn của Sinh Vũ

Sinh Vũ mặc định bàn giao bộ token ba lớp hỗ trợ cả chế độ sáng và tối ngay ở Giai đoạn 1, đúng nguyên tắc chừa đường ở cấu trúc trước. Với khách đa thương hiệu dùng chung mã nguồn, tầng ngữ nghĩa là chỗ để tách thương hiệu mà không phá component lõi.

Nếu Anh / Chị hiện tại chắc chắn chỉ có một thương hiệu và một chế độ trong toàn bộ vòng đời sản phẩm, thì đây là trường hợp hiếm có thể cân nhắc cấu trúc đơn giản hơn. Nhưng trong thực tế, đa số doanh nghiệp đang phát triển đều sẽ cần ít nhất một trong hai: chế độ tối hoặc thương hiệu con. Chừa đường từ đầu là quyết định an toàn hơn.

Công cụ mang về

Checklist quyết định

Chủ đề: Sáng tối và đa thương hiệu: tính từ đầu hay bổ sung sau?. Cẩm nang Sinh Vũ, sinhvu.com

0 trên 7 mục

Bấm chọn từng mục Anh / Chị thấy đúng, rồi bấm in hoặc lưu thành PDF để mang theo.

Dấu hiệu cho thấy Anh / Chị nên làm
Câu hỏi cần trả lời trước khi quyết định

Nếu Anh / Chị đánh dấu phần lớn ở nhóm dấu hiệu trên, đây là lúc nên trao đổi kỹ hơn. Sinh Vũ có thể cùng Anh / Chị soi lại và đề xuất hướng đi.

Nguồn tham khảo

Material Design 3, Design tokens overview. Nathan Curtis, Tokens in Design Systems (EightShapes). Color tokens và hướng dẫn sáng tối trong design system (Bootcamp). Kinh nghiệm thực hành Sinh Vũ qua các dự án đa thương hiệu.

Câu hỏi thường gặp

Nếu hiện tại chỉ có một thương hiệu và một chế độ sáng, có cần làm tầng ngữ nghĩa không?

Có. Dù chỉ có một thương hiệu và một chế độ hôm nay, tầng ngữ nghĩa vẫn cần được giữ ngay từ đầu vì chi phí chừa đường lúc này gần như bằng không, trong khi chi phí gắn thêm về sau rất cao. Khi thêm chế độ tối hay thương hiệu thứ hai, Anh / Chị chỉ cần ánh xạ lại token ngữ nghĩa sang bộ giá trị mới, không cần sửa component nào.

Chế độ tối có thể làm bằng cách đảo màu tự động không?

Không nên. Đảo màu tự động thường cho ra tương phản sai, chữ khó đọc, và màu thương hiệu bị lệch sắc. Chế độ tối đúng nghĩa là một bộ token ngữ nghĩa riêng trỏ về token gốc phù hợp, không phải phép nghịch đảo kỹ thuật. Với nhóm ngành có yêu cầu tương phản cao như tài chính hoặc y tế, điều này càng quan trọng hơn.

Đa thương hiệu có nghĩa là phải làm nhiều bộ component riêng không?

Không. Đây là lỗi tốn kém nhất mà Sinh Vũ hay gặp ở các hệ thống đã làm vội. Với cấu trúc token đúng, Anh / Chị chỉ cần một bộ component lõi dùng chung, còn thương hiệu được tách bằng cách thay bộ giá trị token ngữ nghĩa. Mỗi thương hiệu con có bộ token ngữ nghĩa riêng trỏ về token gốc của thương hiệu đó.

← Về Hệ thiết kế số
{INJ}