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

Token thiết kế: nền móng quyết định cả hệ thống

Hiểu token là hiểu tại sao đổi một màu ở gốc lại cập nhật toàn bộ sản phẩm số, và tại sao bỏ qua bước này thì hệ chỉ còn là đống component rời.

Chốt nhanh

Token thiết kế là một quyết định thiết kế được đặt tên và lưu thành dữ liệu, thay vì gõ giá trị thô rải rác khắp nơi. Mọi thành phần giao diện đều tham chiếu về token, nên đổi giá trị ở gốc là toàn bộ giao diện cập nhật theo. Bỏ qua tầng token, Anh Chị chỉ có một bộ component rời rạc và phải sửa hàng trăm chỗ bằng tay mỗi khi thương hiệu thay đổi.

Đối sánh nhanh
Nên chọn hướng này khi
  • từ hai sản phẩm số trở lên, cần sáng tối hoặc nhiều thương hiệu
  • muốn đổi một chỗ, toàn bộ giao diện cập nhật theo
Chưa cần khi
  • chỉ có một trang tĩnh, ít thay đổi, một người làm

Token thiết kế là một quyết định thiết kế được đặt tên và lưu thành dữ liệu. Ví dụ: thay vì gõ #1A1A2E ở mọi nơi cần màu nền chính, Anh Chị đặt tên nó là color.background.primary và dùng tên đó trong toàn bộ hệ thống. Đây không phải thủ thuật kỹ thuật mà là quyết định kiến trúc: ai kiểm soát token là người kiểm soát toàn bộ diện mạo sản phẩm.

Ba tầng token và lý do phân tầng

Hệ token lành mạnh có đủ ba tầng, mỗi tầng có một lý do thay đổi riêng:

  • Token gốc (global hay primitive): Chứa giá trị thô, ví dụ blue-500 = #2563EB. Tầng này không nói gì về mục đích sử dụng, chỉ là kho chứa.
  • Token ngữ nghĩa (semantic hay alias): Mang ý định thiết kế, ví dụ color.action.primary trỏ vào blue-500. Đây là tầng quyết định ngữ cảnh dùng: nền cảnh báo, chữ phụ, đường viền tương tác.
  • Token theo thành phần (component token): Gán cho từng bộ phận cụ thể, ví dụ button.background.default trỏ vào color.action.primary. Tầng này chỉ cần thiết khi hệ thống thực sự phình to.

Nguyên tắc vận hành: component chỉ đọc token ngữ nghĩa, không đọc thẳng token gốc. Đây là điều kiện để đổi chủ đề sáng tối hay đa thương hiệu mà không phải đi sửa từng component.

Tách ba tầng token để mỗi tầng có một lý do thay đổi riêng. Đổi một tầng không kéo đổ các tầng khác.

Nathan Curtis, Tokens in Design Systems (EightShapes)

Vì sao token quyết định toàn bộ hệ thống

Cách hệ thống thiết kế (design system) hoạt động là: mọi component đều tham chiếu về token, không chứa giá trị cứng bên trong. Điều này có nghĩa:

  • Đổi giá trị của một token ở tầng gốc hoặc ngữ nghĩa, toàn bộ giao diện website, ứng dụng, tài liệu đều cập nhật theo ngay lập tức.
  • Token là hợp đồng chung giữa người thiết kế và lập trình viên. Cả hai bên gọi cùng một tên, không còn tình trạng bên Figma dùng tên này, bên code dùng tên khác.
  • Khi cần mở rộng sang nền tảng mới, iOS, Android hay ứng dụng nhúng vào website đối tác, token xuất sang môi trường đó mà không cần thiết kế lại từ đầu.

Bỏ qua tầng token, hệ chỉ còn là bộ component rời. Đổi màu thương hiệu đồng nghĩa với việc ngồi sửa hàng trăm chỗ bằng tay và vẫn sót.

Khi nào cần đầu tư tầng token, khi nào chưa cần

Nên đầu tư tầng token đầy đủ khi: Anh Chị có từ hai sản phẩm số trở lên, hoặc một sản phẩm cần hỗ trợ chế độ sáng tối, hoặc có kế hoạch mở rộng thương hiệu trong tương lai gần. Cũng nên đầu tư sớm khi đội thiết kế và đội lập trình làm việc song song và cần ngôn ngữ chung.

Chưa cần nhiều lớp token nếu: Chỉ có một trang tĩnh, ít thay đổi, một người làm từ đầu đến cuối. Trong trường hợp này, tầng ngữ nghĩa tối giản vẫn nên có để bảo vệ về sau, nhưng chưa cần đầy đủ ba tầng.

Quan điểm của Sinh Vũ: dựng token trước khi dựng component, vì token là nền của mọi thứ phía trên. Đảo ngược thứ tự thì về sau phải phá và làm lại.

Lỗi thường gặp khi triển khai token

  • Đặt tên token theo màu cụ thể ở tầng ngữ nghĩa: Ví dụ đặt tên color.xanh-500 cho màu nút chính. Khi thương hiệu đổi sang màu cam, cái tên hóa ra sai nghĩa hoàn toàn và gây nhầm lẫn cho cả đội.
  • Component đọc thẳng token gốc: Bỏ qua tầng ngữ nghĩa khiến chế độ tối và đa thương hiệu bế tắc về sau, vì không có tầng trung gian để hoán đổi.
  • Sinh quá nhiều token không ai dùng: Hệ phình to, tỉ lệ token thực sự được dùng thấp, đội thiết kế không còn nhớ nổi token nào dùng cho gì. Bắt đầu từ nhu cầu thực của giao diện hiện có, chuẩn hóa rồi mới mở rộng.

Đặt tên token theo ý nghĩa sử dụng, không theo giá trị hiện tại, để tên vẫn đúng khi giá trị đổi.

Nathan Curtis, Naming Tokens in Design Systems (EightShapes)

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

Sinh Vũ coi tầng token là nền móng không thể bỏ qua. Trong mỗi dự án xây hệ thống thiết kế, Giai đoạn 1 luôn mở đầu bằng rà soát toàn bộ giao diện số hiện có rồi chuẩn hóa thành ba lớp token trước khi dựng bất kỳ component nào.

Quan điểm vận hành là một nguồn chuẩn duy nhất cho màu, font, khoảng cách: đổi ở gốc thì cả website, ứng dụng và component đổi theo, không sót chỗ nào. Đây không phải tham vọng kỹ thuật, mà là điều kiện tối thiểu để một thương hiệu nhất quán trên nhiều điểm chạm số mà không tiêu hao sức người vào việc đồng bộ bằng tay.

Công cụ mang về

Checklist quyết định

Chủ đề: Token thiết kế là gì và vì sao nó quyết định cả hệ thống. Cẩm nang Sinh Vũ, sinhvu.com

0 trên 6 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

Nathan Curtis, Tokens in Design Systems (EightShapes); Nathan Curtis, Naming Tokens in Design Systems (EightShapes); Material Design 3, Design tokens overview.

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

Token thiết kế khác biến CSS (CSS variable) ở điểm nào?

Biến CSS là kỹ thuật lưu giá trị trong mã lập trình. Token thiết kế là quyết định thiết kế được đặt tên theo ý nghĩa sử dụng, tồn tại độc lập với nền tảng kỹ thuật và có thể xuất sang CSS, iOS, Android hay bất kỳ môi trường nào. Nói cách khác, biến CSS là một cách triển khai token, còn token rộng hơn và sống ở tầng ngôn ngữ chung giữa thiết kế và lập trình.

Có bao nhiêu token là đủ, và làm sao biết mình đang sinh quá nhiều?

Không có con số tuyệt đối. Dấu hiệu nhận biết sinh quá nhiều là tỉ lệ token thực sự được dùng trong component thấp, và đội thiết kế không còn nhớ nổi token nào dùng cho gì. Sinh Vũ khuyên bắt đầu từ nhu cầu thực của giao diện hiện có, chuẩn hóa rồi mới mở rộng, thay vì định nghĩa toàn bộ hệ token trước khi có sản phẩm để đối chiếu.

Nếu sản phẩm chỉ có một giao diện, không cần chế độ tối, có cần ba tầng token không?

Không nhất thiết phải đầy đủ ba tầng ngay từ đầu. Tuy nhiên, tầng ngữ nghĩa (semantic) vẫn nên có dù sản phẩm đơn giản, vì nó bảo vệ Anh Chị khỏi phải sửa từng component mỗi khi màu sắc thay đổi. Tầng component token có thể để sau khi hệ thực sự phình to.

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