Mercato

الرموز

المسافات

نظام مسافات من طبقتين وثلاثة أوضاع كثافة. رموز أولية خام، وطبقة دلالية من ست عائلات تحكم كل علاقة مكانية، تتكيّف بين المضغوط والافتراضي والمريح دون تغيير شيفرة المكوّن.

جرّبها على الموقع نفسه

بدّل الكثافة أدناه: تُطبَّق على الموقع كله (لاحظ إيقاع الصفحة يتغيّر)، والمدرجات هنا تعكس الوضع الحالي حياً. كل عائلة تتكيّف باستقلال.
الكثافة

المعمار

طبقتان وثلاثة أوضاع. الأولية ١٤ درجة خام (0 إلى ١٢٨ بكسل). الدلالية ٣٠ رمزاً في ست عائلات × خمسة أحجام. أوضاع الكثافة تعيد ربط الرموز الدلالية لتكيّف الكثافة دون لمس شيفرة المكوّن. المكوّنات تستخدم الدلالية فقط.

افتراضي· نشط

واجهة المنتج العامة والمهام القياسية.

مضغوط

الجداول ولوحات البيانات وأدوات الإدارة الكثيفة.

مريح

المحتوى أولاً، التهيئة، التخطيطات اللمسية.

السلّم الأولي

أربع عشرة درجة خام في ثلاث مجموعات. ٨ بكسل (space.300) هو الحد الأدنى لخلوص اللمس. لا تستخدمها مباشرة في المكوّنات، بل عبر العائلات الدلالية.

دقيق · 0–12
أساسي · 16–48
كبير · 64–128

العائلات الدلالية

ست عائلات، كل منها لعلاقة مكانية واحدة. المدرجات أدناه بمقاس الوضع النشط حالياً؛ بدّل الكثافة من الضابط أعلى الصفحة لتراها تتغيّر. حدّد نوع العلاقة أولاً، ثم العائلة، ثم الحجم.

Stack · تكديس

التدفّق العمودي بين عناصر المحتوى.

استخدم · المسافة العمودية بين الفقرات وعناصر القوائم والحقول. md (16) قياسي.

تجنّب · الصفوف الأفقية، أو حشو الحاويات، أو أقسام الصفحة الكبرى.

افتراضي/مضغوط/مريح · xs:4/2/8 sm:8/4/16 md:16/8/32 lg:32/16/48 xl:48/32/64
Inline · سطري

المسافة الأفقية بين عناصر في صف.

استخدم · أزواج مترابطة (أيقونة + نص) بـ xs، وعناصر شريط أدوات بـ md.

تجنّب · التكديس العمودي، أو الحشو الداخلي، أو الشبكات المتكرّرة.

افتراضي/مضغوط/مريح · xs:2/0/4 sm:4/2/8 md:8/4/16 lg:16/8/32 xl:32/16/48
Inset · حشو داخلي

الحشو بين المحتوى وحدود حاويته.

استخدم · الحشو داخل البطاقات واللوحات والحقول والنوافذ. md (16) قياسي.

تجنّب · المسافة بين العناصر الشقيقة، فالكثافة تكيّفها تكييفاً مختلفاً.

افتراضي/مضغوط/مريح · xs:8/4/12 sm:12/8/16 md:16/12/32 lg:32/16/48 xl:48/32/64
Gap · فجوة

مسافة متساوية بين عناصر متكرّرة متماثلة.

استخدم · شبكات البطاقات وعناصر القوائم متساوية الوزن. md (16) قياسي.

تجنّب · التسلسل غير المتماثل، أو المجموعات غير المتكافئة، أو فصل الأقسام.

افتراضي/مضغوط/مريح · xs:4/2/8 sm:8/4/16 md:16/8/32 lg:32/16/48 xl:48/32/64
Section · قسم

الفصل بين مناطق الصفحة العمودية الكبرى.

استخدم · الانتقالات بين مناطق الصفحة العليا (بطل ← محتوى ← تذييل). md (48) قياسي.

تجنّب · داخل المكوّنات أو البطاقات أو المجموعات المحلية.

افتراضي/مضغوط/مريح · xs:16/12/24 sm:32/24/40 md:48/40/64 lg:80/64/96 xl:96/80/128
Container · حاوية

حشو أغلفة التخطيط والصفحة.

استخدم · حشو غلاف الصفحة والأغلفة التخطيطية الكبرى. md (32) قياسي.

تجنّب · بين كتل المحتوى الشقيقة أو لحشو المكوّنات (استخدم Inset).

افتراضي/مضغوط/مريح · xs:8/4/12 sm:16/12/24 md:32/24/40 lg:48/40/64 xl:80/64/96

أوضاع الكثافة

نفس التخطيط في الأوضاع الثلاثة جنباً إلى جنب: لاحظ كيف يتقلّص المضغوط ويتنفّس المريح. يمكن قصر الكثافة على حاوية بعينها بوضع data-density عليها، فيتعايش جدول مضغوط مع لوحة مريحة على الشاشة نفسها.

افتراضي

حفظإلغاء

مضغوط

حفظإلغاء

مريح

حفظإلغاء

المبادئ

عشرة مبادئ حاكمة لقرارات المسافات.

01التقارب

المسافة تنقل قوة العلاقة. مسافة أضيق داخل المجموعة منها بين المجموعات؛ دع المسافة تحلّ محلّ الحدود.

02الاتجاهية

المسافة العمودية والأفقية دوران مختلفان. اختر Stack للعمودي وInline للأفقي حسب محور العلاقة.

03الالتزام بالسلّم

كل القيم من السلّم الأولي؛ لا أرقام عشوائية. لا قيم بكسل ثابتة في المكوّنات.

04التسلسل

المقدار يزيد مع المستوى البنيوي: خطوات أصغر داخل المكوّنات، وأكبر بين الأقسام.

05فصل العائلات

كل عائلة لعلاقة مكانية واحدة. حدّد نوع العلاقة أولاً ثم العائلة ثم الحجم.

06الاحتواء مقابل الفصل

الحشو الداخلي والفجوة الخارجية خاصيتان مستقلتان. لا تستبدل إحداهما بالأخرى.

07التكيّف مع الكثافة

الكثافة مقصودة من ثلاثة أوضاع. مضغوط للجداول، افتراضي للعام، مريح للمحتوى أولاً.

08الإيقاع

الفواصل المتكرّرة تخلق إيقاعاً بصرياً. استخدم Gap لكل البنى المتكرّرة متساوية التباعد.

09اتساق العلاقة

نفس العلاقة تستخدم دائماً نفس العائلة والحجم عبر المكوّنات.

10خلوص اللمس

حافظ على ٨ بكسل على الأقل بين العناصر التفاعلية المتجاورة، وهدف ٤٤×٤٤ بكسل للمنطقة.

مرجع سريع

أيّ عائلة لأيّ موقف. حدّد العلاقة أولاً، ثم اختر الحجم.

الموقفالعائلةمثال
مسافة عمودية بين حقول أو عناصر قائمة أو فقراتStack
فجوة بين أزرار أو وسوم أو أيقونات في صفInline
حشو داخلي لبطاقة أو لوحة أو حقل أو نافذةInset
فجوة متساوية بين بطاقات شبكة أو عناصر قائمةGap
المسافة بين أقسام الصفحة العلياSection
حشو غلاف الصفحة أو التخطيطContainer

إمكانية الوصول

المسافات تحكم الفجوة والحشو لا اللون. الخطر الأساسي هو تجاور أهداف اللمس في الوضع المضغوط.

المعيارالمستوىلماذا ينطبق
2.5.5 · حجم الهدفAAAالمسافة بين العناصر التفاعلية المتجاورة تؤثر في الفجوة القابلة للاستخدام؛ في الوضع المضغوط قد تصل inline/gap إلى 0.

ثابت خلوص اللمس

ثابت النظام: لا تُقلّل مسافة الوضع المضغوط دون ٨ بكسل (space.300) بين عنصرين تفاعليين متجاورين. المخالفة تحذير.

فحوص الوضع المضغوط (تفاعلي)

عائلتا inline وgap تحملان أعلى خطر في الوضع المضغوط لأن العناصر التفاعلية تظهر كثيراً في صفوف وشبكات.

الرمزافتراضيمضغوطمريحالخطر
spacing.inline.xs2px0px4pxتحذير إن استُخدم بين عناصر تفاعلية مميّزة
spacing.inline.sm4px2px8pxمعلومة — راجع السياق
spacing.inline.md8px4px16pxمعلومة — راجع السياق
spacing.inline.lg16px8px32pxيمرّ
spacing.inline.xl32px16px48pxيمرّ
spacing.gap.xs4px2px8pxمعلومة — راجع السياق
spacing.gap.sm8px4px16pxمعلومة — راجع السياق
spacing.gap.md16px8px32pxيمرّ
spacing.gap.lg32px16px48pxيمرّ
spacing.gap.xl48px32px64pxيمرّ

فحوص بنيوية مطلوبة

WARNING

inline.xs (مضغوط = 0) لا يُستخدم كفجوة بين تحكّمات تفاعلية مميّزة.

WARNING

لا فجوة تفاعلية في أي وضع كثافة تقلّ عن ٨ بكسل.

WARNING

إن نُشر الوضع المضغوط على شاشات تفاعلية، تُدقَّق كل مسافاته التفاعلية.

INFO

المكوّنات تشير للرموز الدلالية لا الأولية (الأولية لا تتكيّف مع الكثافة).

لا معايير WCAG AA يمكن لقيم المسافة وحدها أن تخالفها؛ أقصى شدّة تحذير، لا حاجب. الخطر الأساسي: تجاور الأهداف في الوضع المضغوط.

الشيفرة للمطوّرين

التسليم الأساسي لطبقة المسافات هو متغيّرات CSS المخصّصة. المكوّنات تستهلك رموز العائلات الدلالية فقط (‎--spacing-{family}-{size}‎)، ولا تلمس السلّم الأولي ولا قيم px خام أبداً. المسافات ثابتة عبر الوضعين الفاتح والداكن؛ ما يعيد ربط الرموز هو وضع الكثافة (data-density) لا السمة.

سلسلة المتغيّرات

المتغيّرات تُبنى على ثلاث طبقات: مدرّج أوّلي، ثم رمز أوّلي، ثم رمز دلالي يُحلّ حسب الوضع. المكوّنات تستهلك الطبقة الدلالية فقط.

عقد CSS
/* Tier 1 — primitive step (raw px, one scale) */
--spacing-space-300: 8px;   /* touch-clearance minimum */
--spacing-space-500: 16px;

/* Tier 2 — semantic family token; components consume THIS */
:root {
  --spacing-inset-md: var(--spacing-space-500);  /* 16px */
  --spacing-stack-sm: var(--spacing-space-300);  /* 8px  */
}

/* Density remaps the same semantic names (no theme involved) */
[data-density="compact"]     { --spacing-inset-md: var(--spacing-space-400); } /* 12px */
[data-density="comfortable"] { --spacing-inset-md: var(--spacing-space-700); } /* 32px */

جدول المرجع

الرمزمتغيّر CSSالقيمةالاستخدام
inset.md--spacing-inset-mdspace.500 (16px)حشو البطاقات واللوحات
inset.sm--spacing-inset-smspace.400 (12px)حشو حاوية مضغوط
stack.sm--spacing-stack-smspace.300 (8px)الفجوة بين نصوص متراصّة
stack.md--spacing-stack-mdspace.500 (16px)الفجوة بين الكتل
inline.md--spacing-inline-mdspace.300 (8px)الفجوة بين عناصر تفاعلية متجاورة
gap.md--spacing-gap-mdspace.500 (16px)فجوة الشبكة أو المرن
section.md--spacing-section-mdspace.900 (48px)الفصل بين أقسام الصفحة

الاستخدام

مثال
.card {
  padding: var(--spacing-inset-md);
  display: flex;
  flex-direction: column;
  gap: var(--spacing-stack-sm);
}
.card__actions {
  display: flex;
  gap: var(--spacing-inline-md);
}
/* No media queries for density: set data-density on any ancestor and
   every value above remaps in place, component code untouched. */

أخطاء شائعة

الخطأما يفسدالصواب
padding: 15pxيتجاهل السلّم ولا يتكيّف مع الكثافةvar(--spacing-inset-md)
var(--spacing-space-500)يتجاوز طبقة العائلات، فلا يعيد الربط مع الكثافةvar(--spacing-inset-md)
فجوة تفاعلية دون ٨ بكسليكسر ثابت خلوص اللمس في الوضع المضغوطأبقِ فجوات العناصر التفاعلية عند inline.md / space.300 أو أكبر
‎@media‎ يدوي لتضييق المسافاتيكرّر منظومة الكثافةاضبط data-density ودع الرموز تعيد الربط

كيف تُستهلك

الرموز مصدرها واحد آلي القراءة (tokens.json في المهارة). حزمة @mercato/tokens تولّد منه: متغيّرات CSS (التسليم الأساسي)، وإعداد Tailwind جاهز، وكائن سمة مطبوع بـ TypeScript. أهداف المنصّات الأخرى (Style Dictionary وDTCG وiOS وAndroid وCompose) تتولّد من المصدر نفسه عند الطلب.

الاستيراد
// CSS variables (canonical) — import once at the app root
import "@mercato/tokens/css";

// Tailwind preset
// tailwind.config: { presets: [require("@mercato/tokens/tailwind")] }

// Typed theme object (JS/TS)
import { tokens } from "@mercato/tokens";