EduFlow

الوحدة 3 · الـ Components والأنظمة

Modes الـ Variables: الفاتح والداكن

18 دقراءة 4 داختر بحكمة

الدرس في لمحة

أضف الـ modes ‏Light وDark إلى الـ variables الدلالية في Steady، وبدّل شاشات كاملة بينهما، وأعِد فحص التباين لكي يكون الوضع الداكن مصمّمًا لا مقلوبًا.

  1. 1الـ Modes أعمدة من القيم
  2. 2تبديل شاشة
  3. 3صمّم الوضع الداكن ولا تقلبه
  4. 4الـ Modes أبعد من الألوان

لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.

أسرع طريقة لصنع الوضع الداكن أن تكرّر كل شاشة وتعيد تلوينها يدويًا. وهي أيضًا أسرع طريقة للحصول على مجموعتين من الشاشات تختلفان خلال شهر: يضيف أحدهم صف عادة إلى شاشة Today الفاتحة وينسى الداكنة. في Steady سيكون الوضع الداكن مفتاحًا واحدًا على الـ frame، لأن الألوان تشير إلى معانٍ أصلًا.

الـ Modes أعمدة من القيم

افتح الـ variables المحلية (تصل إليها من الشريط الجانبي الأيمن دون تحديد أي شيء، وقت كتابة هذا الدرس) وانظر إلى الـ collection المسمّاة Semantic. فيها عمود واحد من القيم، اسمه Mode 1 افتراضيًا. أعِد تسميته إلى Light، ثم أضف mode وسمّه Dark. صار لكل variable قيمتان: واحدة لكل عمود. ينسخ Figma القيم الموجودة إلى العمود الجديد، وهذه نقطة بداية لا إجابة.

املأ عمود Dark بجعل كل variable ‏alias لـ primitives مختلفة. هذا جدول الربط في Steady، مع قياس التباين مقابل السطح الذي يقع عليه كل لون:

الـ variable الدلالي Light Dark
color/surface/default white gray/950 ‏(#111827)
color/surface/raised white gray/800 ‏(#1F2937)
color/text/primary gray/900، ‏17.40:1 gray/50، ‏16.98:1
color/text/secondary gray/500، ‏4.83:1 gray/400، ‏6.99:1
color/action/primary teal/700، ‏5.47:1 teal/400، ‏9.53:1
color/on-action white gray/950

أبقِ الـ collection المسمّاة Primitives بـ mode واحد. الـ primitive حقيقة (teal/700 هو #0F766E)؛ أما الـ variable الدلالي فقرار يعتمد على السياق. والـ modes تخصّ القرارات.

الـ variable الدلالي action primary في المنتصف. في الـ mode ‏Light يشير إلى teal 700؛ وفي Dark يشير إلى teal 400. زر التعليم المرتبط به يظهر بتركوازي داكن على شاشة فاتحة وبتركوازي فاتح على شاشة داكنة. teal/700 teal/400 action/primary Light Dark صف فاتح صف داكن
الـ variable الدلالي نفسه يُحلّ إلى primitives مختلفة حسب الـ mode

تبديل شاشة

كرّر frame شاشة Today وحدّد النسخة. في الشريط الجانبي الأيمن، استخدم عنصر التحكم في mode الـ variables (في قسم Appearance وقت كتابة هذا الدرس)، واختر الـ collection المسمّاة Semantic ثم Dark. تتبدّل كل تعبئة وحدّ ولون نص مرتبط في الشاشة دفعة واحدة.

ينجح ذلك بفضل الوراثة. كل طبقة تبدأ على Auto، أي «استخدم الـ mode الخاص بأبي». يصعد Figma في شجرة الطبقات حتى يجد أبًا ضُبط له mode، وإن لم يجد، يستخدم الـ mode الافتراضي للـ collection (العمود الأول). ويمكنك أيضًا ضبط mode على صفحة كاملة دون تحديد أي شيء.

الآن لم تعد النسخة شيئًا تصونه؛ إنها الـ components نفسها معروضة عبر mode مختلف. أضف صف عادة إلى الشاشة الفاتحة وانسخه إلى الداكنة، وسيكون داكنًا من فوره.

صمّم الوضع الداكن ولا تقلبه

الوضع الداكن تصميم قائم بذاته. وبضع قواعد تكفي لمعظم العمل:

  • الألوان المميّزة تصبح أفتح. ‏teal/700 يعطي 5.47:1 على الأبيض لكن 3.24:1 فقط على gray/950. يجب أن يكون اللون المميّز في الوضع الداكن درجة أفتح.
  • النص فوق الألوان المميّزة قد ينقلب. الأبيض على teal/400 يعطي 1.86:1، وهذا فشل واضح. لهذا السبب يوجد color/on-action كـ token مستقل: في Dark يشير إلى gray/950، فيعطي 9.53:1.
  • الارتفاع يعني لونًا أفتح، لا أغمق. الظلال بالكاد تظهر على الخلفيات الداكنة، لذا تستخدم الأسطح المرتفعة مثل لوحة New habit رماديًا أفتح قليلًا (surface/raised).
  • تجنّب التطرّف الحادّ. النص القريب من الأبيض على خلفية قريبة من الأسود أريح في الجلسات الطويلة من الأبيض الصافي على الأسود الصافي، الذي قد يبهر العين.

الـ Modes أبعد من الألوان

الـ modes ليست للثيمات فقط. collection باسم Density فيها الـ modes ‏Comfortable وCompact يمكن أن تحمل number variables للـ padding في الصف (12 مقابل 8) وللـ gap بين الصفوف. وcollection باسم Content فيها string variables يمكن أن تحمل التسميات نفسها بالإنجليزية والعربية، وهذه طريقة سريعة لترى هل ما زال “Save habit” يتّسع حين يصبح أطول. بل يمكنك تبديل الـ modes داخل prototype، مثلًا لعرض مفتاح الثيم الداكن في الإعدادات.

صارت لديك الآن مجموعة بثيمات ومبنية على tokens. الدرس الأخير من هذا القسم ينظّمها في شيء يستطيع مصمّم آخر، أو مطوّر، أن يتسلّمه ويستخدمه دون أن يسألك.

أهم النقاط

  • الـ mode عمود واحد من القيم في collection من الـ variables؛ وتبديل الـ mode في frame يستبدل كل قيمة مرتبطة دفعة واحدة.
  • ضع الـ modes على الـ collection الدلالية وأبقِ الـ primitives بـ mode واحد، فلا يغيّر الوضع الداكن إلا ما يشير إليه كل معنى.
  • تستخدم الطبقات الـ mode ‏Auto افتراضيًا، فترث من أقرب أب ضُبط له mode، وإلا تعود إلى الـ mode الافتراضي للـ collection.
  • الوضع الداكن ليس قلبًا للألوان؛ الألوان المميّزة تصبح عادةً أفتح، والنص فوقها قد ينقلب إلى داكن، والأسطح تصبح أفتح كلما ارتفعت.
  • كل لون نص وعنصر تحكم يحتاج فحص تباين جديدًا في كل mode، لأن زوجًا ينجح في الفاتح قد يفشل في الداكن.

قراءات إضافية

تحقّق من فهمك

3 أسئلة

السؤال 1 من 3

تضبط frame شاشة Today على Dark. صف عادة واحد داخله مضبوط صراحةً على Light. ماذا ترى؟

السؤال 2 من 3

في الوضع الداكن، يشير color/action/primary إلى teal/400 ‏(#2DD4BF)، وتسمية الزر تستخدم color/on-action الذي ما زال أبيض. تباين التسمية 1.86:1. ما الإصلاح الصحيح؟

السؤال 3 من 3

لماذا تبقى الـ primitives ‏(teal/700، gray/500…) في collection بـ mode واحد؟

تدريب

اختر بحكمة

راجع المحاولة الأولى للوضع الداكن

أضاف زميلك mode باسم Dark إلى الـ collection الدلالية في Steady، لكنه لم يغيّر إلا قيم الأسطح والنصوص. هذا ما تُحلّ إليه شاشة Today في Dark، مقيسًا مقابل surface/default ‏(#111827) ما لم يُذكر غير ذلك:

الـ Variable القيمة في Dark النتيجة
text/primary gray/50 16.98:1
text/secondary gray/400 6.99:1
action/primary teal/700 (دون تغيير) 3.24:1، أيقونات التعليم والروابط تبدو باهتة
on-action white (دون تغيير) 5.47:1 على teal/700
border/default gray/200 (دون تغيير) 14.33:1، الفواصل تبهر العين

اختر كل تغيير يحسّن الوضع الداكن دون أن يكسر شيئًا آخر.

راجع المحاولة الأولى للوضع الداكن