هيكل التحميل
Skeletonaria-busy="true"
اسمه كمانسكيليتون، الهيكل التحميلي، شاشة الهيكل، العناصر النائبة، هيكل المحتوى، شيمر، skeleton screen، skeleton loader، content placeholder، shimmer، ghost loader
هيكل التحميل نسخة رمادية مبسّطة من الواجهة، تُرسم في أماكن المحتوى الحقيقي وبمقاساته أثناء جلبه. وظيفته أن يخبرك بشكل الصفحة قبل وصول البيانات، فيقصر الإحساس بالانتظار ويمنع القفز البصري لحظة وصولها. والفرق بينه وبين المؤشّر الدوّار (spinner) أن الدوّار يقول «انتظر» ولا يقول شيئاً عن التخطيط، أمّا الهيكل فيقول «هذا ما سيأتي، وهنا سيأتي». وشريط التقدّم يعرض نسبة معلومة من عمل مُقاس، والهيكل لا يعرف كم بقي أصلاً. وحالة الفراغ نتيجة نهائية معناها «لا توجد بيانات»، بينما الهيكل وعد مؤقّت معناه «البيانات في الطريق». وهيكل لا ينتهي أسوأ من رسالة خطأ صريحة. والقاعدة الحاكمة: إن لم يطابق الهيكل شكل المحتوى ومقاسه، قفز التخطيط عند وصول البيانات، وتكون قد صنعت المشكلة التي كنت تحاول إخفاءها.
لو قلت عليه…
العيّنة الحيّة
تفاعل مع الديمو. كل الأجزاء حقيقية ومرقّمة.
تشريح العنصر: كل جزء واسمه
مرّر على أي سطر ليتحدّد مكانه في الديمو فوق.
برومبت البناء
سلوكه في الاتجاه من اليمين لليسار
الجزء ده حصري عندنا.
مسار اللمعة
ينعكساللمعة تسير في اتجاه القراءة: من اليسار إلى اليمين في الإنجليزية، ومن اليمين إلى اليسار في العربية. المشكلة أن transform خاصية فيزيائية لا تنقلب مع dir أبداً، فـ translateX(-100%) ثابت يجعل اللمعة تمشي عكس القراءة في الصفحة العربية. اربطها بمتغيّر: --dir: 1 على الجذر و--dir: -1 داخل [dir="rtl"]، ثم translateX(calc(100% * var(--dir)))؛ ولو كانت الحركة خطّية بسيطة كفاك animation-direction: reverse داخل [dir="rtl"].
ميل التدرّج
ينعكسزاوية linear-gradient فيزيائية هي الأخرى: لا توجد في CSS كلمة منطقية مثل to inline-end للتدرّجات حتى اليوم. لمعة بزاوية 110deg ستميل في الاتجاه الخاطئ بعد الانعكاس، فاحسبها من نفس متغيّر الاتجاه: linear-gradient(calc(90deg + 20deg * var(--dir)), …). والقاعدة نفسها تنطبق على background-position إن كنت تحرّك الخلفية بدل العنصر.
هندسة الكتل نفسها
لا ينعكسلا تصلح اتجاه اللمعة بعكس الهيكل كله عبر transform: scaleX(-1). الكتل ليست عناصر اتجاهية: العكس يقلب زوايا border-radius غير المتماثلة، ويعكس أي أيقونة نائبة بداخلها، ويغيّر اتجاه أي clip-path أو mask-image مطبّق عليها. اقصر الانعكاس على الحركة وحدها (أي على قيمة --dir في الـ keyframes) واترك الصناديق كما هي. ولو احتجت أنصاف أقطار غير متماثلة فاكتبها بالخصائص المنطقية border-start-start-radius و border-start-end-radius لتنعكس وحدها.
السطر الأخير الأقصر
ينعكسالشريط الأخير في الفقرة يبدأ من البداية المنطقية وينقص عند النهاية المنطقية: في العربية يبدأ من اليمين ويتوقّف قبل الحافّة اليسرى. صندوق كتلي بعرض 55% وهوامش صفرية يفعل ذلك وحده، لكن margin-right: auto سيثبّته في الجهة الخطأ، فاستخدم margin-inline-end: auto. ولو أضفت تلاشياً بـ mask-image: linear-gradient(to right, …) فهو فيزيائي ويحتاج قلباً صريحاً في RTL.
حشو الهيكل يطابق حشو المكوّن
ينعكسالهيكل والمكوّن الحقيقي يجب أن يتقاسما نفس قيم padding و gap بالضبط. لو كتبت في البطاقة الحقيقية padding-inline-start وفي هيكلها padding-left، تطابقا في الإنجليزية واختلفا في العربية، فيقفز التخطيط عند وصول البيانات في اللغة العربية وحدها. وهذا أسوأ أنواع العيوب لأنه لا يظهر في اختبارك.
أسماؤه في الكود
كل سطر هو كلمة مكتبة واحدة عن نفس الشيء. خد السطر اللي بيكلّم مشروعك.
شوف كمان
آخر تحديث · 2026-08-19