web design uiMay 29, 20269 min read

Design Tokens: كيف تحافظ أنظمة التصميم الحقيقية على الاتساق

ما هي Design Tokens، ونموذج الثلاث طبقات الذي تستخدمه الأنظمة الحقيقية (Shopify Polaris وIBM Carbon وGitHub Primer)، وكيفية تسميتها، والـ theming للوضع الداكن، ومتى تكون الـ tokens مبالغة.

By Boone
XLinkedIn
design tokens

Design Tokens: كيف تحافظ أنظمة التصميم الحقيقية على الاتساق

كود الألوان hex هو قيمة. الـ token هو قرار له اسم. أنظمة التصميم مبنية من قرارات، لا من قيم.

هذا الفارق هو جوهر الموضوع بأكمله. اكتب #0EA5E9 مباشرةً في أربعة عشر مكوناً في Figma، ثم يُطلب منك الوضع الداكن، وستجد نفسك أمام أسبوع من البحث والاستبدال. سمِّها color-interactive-primary وستغير قيمة واحدة فيما تُحدَّث كل الأسطح. هذا ليس سحراً، مجرد قرارات مسماة.

ما هو الـ design token فعلاً

الـ design token هو متغير مُسمى يُخزّن قرار تصميم. يمكنه استيعاب لون، أو قيمة مسافة، أو حجم خط، أو نصف قطر حدود، أو ظل، أو مدة زمنية. الاسم هو العقد. القيمة وراء الاسم يمكن أن تتغير دون كسر أي شيء يستخدم الـ token.

النهج الكلاسيكي بدون tokens يبدأ حين يختار المصمم #1D4ED8 للأزرار الأساسية، ويضعه مباشرة في مكون الزر، ثم ينسخ هذا الـ hex إلى البطاقة والشارة والرابط. بعد ستة أشهر، تتحدث الهوية البصرية. الآن أمامك مشكلة صيانة تكبر مع كل مكون شحنته.

الـ tokens تقلب المعادلة. تُسمّي القرار (color-action-default)، تُعيّن القيمة مرة واحدة، وكل شيء يُشير إلى الـ token يبقى متزامناً. القيمة هي تفصيل تقني. الاسم هو النظام.

الطبقات الثلاث التي تجعل الـ tokens تعمل

الـ tokens الخام مجرد متغيرات. ما يجعل نظام الـ tokens مفيداً فعلاً هو التسلسل الهرمي. كل نظام إنتاجي يستحق الدراسة يستخدم ثلاث طبقات.

الطبقةتُعرف أيضاًما تُخزّنهمثال
البدائيةعامة، أساسيةقيم خام بلا معنىcolor.blue.500 = #3B82F6
الدلاليةمستعارة، الدورأدوار مسماة مربوطة بالبدائياتcolor.interactive.default = color.blue.500
المكونمحددةقرارات مرتبطة بمكون بعينهbutton.background.default = color.interactive.default

البدائيات هي لوحة الألوان. كل أزرق، وكل خطوة مسافة، وكل نصف قطر يعيش هنا كقيمة مُسماة بلا رأي حول أين تُستخدم. لا تستهلك البدائيات مباشرة في المكونات.

الـ tokens الدلالية تربط الأدوار بالبدائيات. الـ token color-surface-default قد يُشير إلى لون قريب من الأبيض في الوضع الفاتح وقريب من الأسود في الوضع الداكن، والمكون لا يعرف أبداً القيمة الخام التي يحصل عليها. يعرف الدور فقط.

الـ tokens على مستوى المكون هي الأكثر تحديداً. توجد حين يحتاج المكون قراراً مختلفاً متعمداً عن الافتراضي الدلالي. زر الخطر يُشير بخلفيته إلى دور التغذية الراجعة الحرجة بدلاً من الدور التفاعلي الافتراضي. معظم المكونات لا تحتاج tokens خاصة بها؛ تستهلك الـ tokens الدلالية مباشرة.

مخطط voxel يُظهر ثلاث طبقات من الـ tokens مرصوفة فوق بعضها: مقياس البدائيات، والأدوار الدلالية، وقرارات المكون.
مخطط voxel يُظهر ثلاث طبقات من الـ tokens مرصوفة فوق بعضها: مقياس البدائيات، والأدوار الدلالية، وقرارات المكون.

لماذا الـ tokens تتفوق على القيم المُشفّرة مباشرةً

سرعة التغيير هي الحجة الواضحة، لكنها ليست الحقيقية. الحجة الحقيقية هي الدقة.

حين يُسلّم مصمم ملفاً مليئاً بأكواد hex خام، لا يعرف المطور أيها مقصود وأيها عرضي. هل #1A1A2E هو الخلفية، أم أن أحدهم استخدم أداة قطارة اللون على الطبقة الخاطئة؟ الـ tokens تُزيل الغموض. اسم الـ token الدلالي هو توثيق يسير مع القيمة.

الـ tokens هي أيضاً عقد التسليم بين أدوات التصميم والكود في 2026. متغيرات Figma تُعيّن مباشرة على CSS custom properties. الـ token المُعرَّف في ملف Figma يمكن تصديره والتزام به واستهلاكه في الكود دون خطوة يدوية واحدة. تضيق الفجوة بين التصميم والتنفيذ حين يتحدث الطرفان بنفس أسماء الـ tokens.

للفرق التي تعمل على أعمال إمكانية الوصول، تُضيف الـ tokens طبقة أمان إضافية. تُراجع اللوحة الدلالية في مكان واحد وتضمن أن color-text-default يتجاوز دائماً تباين 4.5:1 مقابل color-surface-default، بصرف النظر عن الثيم النشط.

كيف تُهيكل أنظمة التصميم الحقيقية الـ tokens

ثلاثة أنظمة تستحق المعرفة: Shopify Polaris وIBM Carbon وGitHub Primer. تتعامل مع نموذج الثلاث طبقات بطرق مختلفة، والاختلافات تعليمية.

Shopify Polaris يحتفظ بالبدائيات في مقياس ألوان (color-sky-100 إلى color-sky-900) ويُعيّنها لأدوار دلالية مثل --p-color-bg-fill-active. الـ tokens على مستوى المكون نادرة، لذا معظم المكونات تستهلك الـ tokens الدلالية. الاصطلاح هو الدور-ثم-الحالة، وهو يُقرأ بشكل طبيعي في الكود، إذ تعرف ما bg-fill-disabled موجود لأجله دون سياق إضافي.

صفحة مرجع الـ tokens في Shopify Polaris تُدرج الـ tokens اللونية مع أسماء CSS custom property وقيمها.
صفحة مرجع الـ tokens في Shopify Polaris تُدرج الـ tokens اللونية مع أسماء CSS custom property وقيمها.

اطلع عليه مباشرةً على polaris.shopify.com

IBM Carbon يتعمق في الطبقات الدلالية. مجموعة الألوان تتضمن tokens للتغذية الراجعة الصريحة مثل support-error وsupport-success، وtokens لحالات التفاعل، وtokens للطبقات للأسطح المتداخلة (مكون على لوحة على صفحة، كل منها يحتاج قيمة سطح مختلفة). إنه أكثر تعقيداً، لكن IBM تُشحن برامج مؤسسية حيث كل حالة متداخلة مهمة.

صفحة الألوان في نظام IBM Carbon تُظهر الـ tokens اللونية الدلالية المربوطة بأدوار الواجهة.
صفحة الألوان في نظام IBM Carbon تُظهر الـ tokens اللونية الدلالية المربوطة بأدوار الواجهة.

اطلع عليه مباشرةً على carbondesignsystem.com

GitHub Primer يكشف طبقته البدائية باسم "primitives" وطبقته الدلالية باسم "functional tokens"، موثقة بشكل عام على primer.style. يتيح الـ theming في Primer لـ GitHub شحن الوضع الفاتح والداكن والتباين العالي الفاتح والداكن الخافت من مجموعة مكونات واحدة. كل ثيم هو تعيين قيم مختلف لنفس أسماء الـ tokens.

النمط عبر الأنظمة الثلاثة متسق: البدائيات كمقياس، والـ tokens الدلالية كأسماء أدوار، والـ theming كتبديل قيم على الطبقة الدلالية. المكونات تبقى دون تغيير.


Brainy تساعد المصممين على بناء أنظمة تتوسع، لا شاشات فردية. اطلع على ما نبنيه للمبدعين على /creators.


تسمية الـ tokens دون الجنون

تسمية الـ tokens تُفرق الفرق. شديدة العمومية والأسماء لا تحمل معلومات. شديدة التحديد وتكتب token جديداً لكل مكون.

اصطلاح التسمية الذي يعمل يُسمي أربعة أجزاء: الفئة، والدور، والمتغير، والحالة. لن تستخدم الأربعة في كل مرة، لكن البنية تمنع الفوضى العشوائية.

الجزءما يُمثّلأمثلة
الفئةخاصية التصميمcolor، spacing، radius، shadow، font
الدورالغرض الدلاليsurface، text، border، interactive، feedback
المتغيردور فرعي أو معدّلprimary، secondary، danger، subtle
الحالةالحالة التفاعليةdefault، hover، active، disabled، focus

أمثلة عملية، مكتوبة كـ CSS custom properties يستهلكها المطور فعلاً:

  • color-surface-default يُعيّن الخلفية الافتراضية للصفحة
  • color-text-subtle هو النص الثانوي بتباين أقل
  • color-interactive-primary-hover هو حالة hover للإجراء الأساسي
  • spacing-component-md هو الـ padding الداخلي المتوسط للمكونات
  • radius-interactive هو نصف قطر الزوايا للعناصر القابلة للنقر

قاعدتان توفران أكثر النقاشات. لا تُشفّر القيمة الخام في الاسم أبداً، لأن color-blue-500 لا يُخبرك بشيء عن الدور. لا تُسمّ بالمكون في الطبقة الدلالية أبداً، لأن button-primary-color في الطبقة الدلالية يعني أنك تخطيت الطبقة الدلالية كلياً.

لـ أنظمة الطباعة التي تتوسع، ينطبق الاصطلاح ذاته، وfont-size-body-lg يتفوق على text-18px في كل مرة.

رسم voxel لاسم token مقسم إلى أربعة أجزاء: الفئة، والدور، والمتغير، والحالة.
رسم voxel لاسم token مقسم إلى أربعة أجزاء: الفئة، والدور، والمتغير، والحالة.

مجموعة tokens واحدة، الوضع الفاتح والداكن

الوضع الداكن هو حيث تُثمر أنظمة الـ tokens بشكل أوضح. إن سمّيت الـ tokens خاصتك بالدور، فالوضع الداكن هو تبديل قيم، لا إعادة تصميم.

موقع GitHub Primer لنظام التصميم، الذي يُشحن الـ tokens الوظيفية الفاتحة والداكنة وعالية التباين من مجموعة tokens واحدة.
موقع GitHub Primer لنظام التصميم، الذي يُشحن الـ tokens الوظيفية الفاتحة والداكنة وعالية التباين من مجموعة tokens واحدة.

اطلع عليه مباشرةً على primer.style

الآلية مباشرة. الـ token الدلالي color-surface-default يُشير إلى بدائي قريب من الأبيض في الوضع الفاتح وقريب من الأسود في الوضع الداكن. المكون الذي يستهلكه لا يتغير أبداً. تُبدّل الثيمات بتبديل تعيين القيم على الطبقة الدلالية.

CSS custom properties تجعل هذا ميكانيكياً:

css
:root { --color-surface-default: #ffffff; --color-text-primary: #111827; } [data-theme="dark"] { --color-surface-default: #0f172a; --color-text-primary: #f8fafc; }

كل مكون يُشير إلى var(--color-surface-default) يستجيب الآن لسمة الثيم بصفر كود إضافي. Shopify Polaris وGitHub Primer وIBM Carbon تستخدم جميعها هذا النمط على نطاق الإنتاج.

نمط الفشل هو خلط الـ tokens الدلالية والبدائية في المكونات. حين يُشير مكون إلى color-blue-600 مباشرةً بدلاً من color-interactive-primary، يتوقف ذلك المكون عن الاستجابة للـ theming. إشارة بدائية واحدة غير مبالية تكسر النموذج بأكمله. قواعد Lint التي تُعلم عن استهلاك البدائيات المباشر في كود المكون تستحق وقت الإعداد.

فهم كيف تُحدث اختيارات الألوان تأثيرها يمنحك الأساس المفاهيمي، والـ tokens تمنحك البنية للتصرف بناءً عليه عبر كل ثيم.

متى تكون الـ design tokens مبالغة

الـ tokens تُضيف عدم مباشرة. عدم المباشرة له تكاليف. كن صادقاً حول متى تستحق هذه التكاليف الدفع.

الحالةالـ tokens؟السبب
نظام تصميم يخدم 3+ منتجاتنعمالـ tokens المشتركة تُعوّض تكلفتها فوراً
منتج واحد، 5+ مصمميننعميمنع انجراف اللوحة عبر الفريق
منتج واحد، 1-2 مصممين، تكرار نشطربماالطبقة الدلالية فقط، تخطّ الـ tokens على مستوى المكون
موقع تسويقي، بلا مكتبة مكوناتلاstylesheet واحد أسرع في التغيير
نموذج أولي أو MVP أقل من 3 أشهرلاجرّد بعد استقرار التصميم
إضافة الوضع الداكن لنظام موجودنعمهذا بالضبط ما الـ tokens موجودة لأجله

الفرق الصغيرة تتحرك أسرع بدون tokens. شركة ناشئة من ثلاثة أشخاص تسعى لتحقيق product-market fit لا تحتاج تسلسلاً هرمياً بثلاث طبقات. حين تغير اتجاهك البصري كل أسبوعين، مكتبة Figma styles واحدة تكفي.

النمط المضاد الذي يجب تجنبه هو التسمية الدلالية المتسرعة. الـ tokens المُسماة color-blue وcolor-gray تُضيف عدم مباشرة بلا معنى. إما سمّ بالدور مع color-surface وcolor-text، أو ابقَ مع البدائيات حتى يكون لديك ما يكفي من المكونات لتعرف ما هي الأدوار فعلاً.

التسمية السيئة للـ tokens أسوأ من لا tokens على الإطلاق. الـ token المُسمى button-color-for-the-checkout-page في الطبقة الدلالية هو فخ صيانة. انضباط التسمية ليس اختيارياً، إنه السبب في أن الـ tokens تعمل أصلاً.

رسم voxel يُقابل بين إعداد tokens بسيط بقيمتين وبرج متعدد الطبقات مُبالغ فيه.
رسم voxel يُقابل بين إعداد tokens بسيط بقيمتين وبرج متعدد الطبقات مُبالغ فيه.

أسئلة شائعة

هل تحل الـ design tokens محل Figma styles؟

لا، لكنها تُوسّعها. متغيرات Figma، التي أُصدرت في 2023، هي أقرب مكافئ طبيعي داخل Figma، وتُعيّن على الـ tokens البرمجية حين تشترك في اصطلاحات التسمية بين الجانبين. Figma styles تتعامل مع الطباعة وتعبئات الألوان، بينما تتعامل المتغيرات مع التسلسل الهرمي الكامل للـ tokens بما في ذلك الحالات والقرارات على مستوى المكون.

هل تعمل الـ tokens بدون نظام تصميم؟

الـ tokens ذات قيمة أكبر داخل نظام التصميم، لكن حتى منتج واحد يستفيد من التسمية الدلالية على مستوى CSS custom property. لا تحتاج نظاماً رسمياً لتتوقف عن تشفير قيم hex مباشرةً.

ما الأداة التي يجب استخدامها لإدارة الـ tokens؟

للفرق الصغيرة، متغيرات Figma مع تصدير JSON تكفي. للفرق الأكبر، Style Dictionary (مفتوح المصدر، من Amazon) هو أداة البناء القياسية. يأخذ بنية JSON للـ tokens ويُخرج CSS custom properties وثوابت iOS Swift وملفات Android XML. Tokens Studio for Figma هو مكوّن الإضافة الشهير بين Figma وStyle Dictionary.

ما مقدار التفصيل الذي يجب أن تمتلكه الـ tokens على مستوى المكون؟

بالقدر الذي تحتاجه فقط. معظم المكونات يمكنها استهلاك الـ tokens الدلالية مباشرةً. الـ tokens على مستوى المكون منطقية حين ينحرف مكون عن الطبقة الدلالية عمداً، كزر إجراء تدميري أو بانر بسطح غير معتاد. في حالة الشك، استهلك الدلالية وأنشئ الـ tokens على مستوى المكون فقط حين تجد نفسك تكتب استثناءات.

هل يمكن للـ tokens التعامل مع المسافات والطباعة، أم الألوان فقط؟

تعمل الـ tokens لأي شيء بقيمة محددة: اللون، والمسافة، والطباعة، ونصف قطر الحدود، وظل الصندوق، ومدة الحركة، وتخفيف الحركة، والـ z-index. الأنظمة الأكثر نضجاً، مثل IBM Carbon ونظام Atlassian Design System، تمتلك tokens لكل هذه الخصائص. ابدأ بالألوان والمسافات، ثم أضف غيرها كلما نضج النظام.

توقف عن تشفير القيم مباشرةً

المسار العملي ليس معقداً:

  • سمّ البدائيات كمقياس
  • عيّن تلك البدائيات لأدوار دلالية
  • اجعل كل مكون يستهلك الـ tokens الدلالية، لا البدائيات أبداً
  • صدّر قيم الـ tokens من مصدر واحد (متغيرات Figma، ملف JSON، أو حزمة نظام تصميم) ودع أدوات البناء توزعها على CSS وiOS وAndroid

لا تحتاج هجرة لمدة ثلاثة أشهر للبدء. اختر مكوناً واحداً، سمّ قراراته، وأحسّ بالفارق حين تغير قيمة واحدة وتشاهد كل شيء يُحدَّث. تلك التجربة هي الحجة بحد ذاتها.

لمزيد من الكتابة حول أنظمة التصميم، اطلع على ما تغطيه Brainy على /paper.

Brainy helps designers build systems that scale, not one-off screens. See what we are building for creators.

Get Started

More from Brainy Papers

Keep reading