دليل RTL لعناصر الواجهة
لما الصفحة تنعكس من اليمين لليسار، مش كل حاجة بتنعكس معاها. الجزء الصعب مش تفعيل dir="rtl"، لكن معرفة إيه اللي المفروض ينقلب، وإيه اللي لو قلبته هيبان مكسور، وأنهي خاصية CSS منطقية تحلّ المشكلة من جذرها بدل ما تكتب قاعدتين لكل عنصر. ده المرجع اللي بيجمع الإجابات دي في مكان واحد.
من الخصائص المادية إلى المنطقية
أغلب أعطال التخطيط العربي سببها خاصية واحدة مكتوبة بالجهة بدل الاتجاه. الجدول ده هو الاستبدال المباشر: اكتب العمود الأوسط، وانسَ إنك محتاج قاعدة منفصلة لكل اتجاه.
| لا تكتب | اكتب بدلها | لماذا |
|---|---|---|
margin-left / margin-right | margin-inline-start / margin-inline-end | أكثر سبب منفرد لانكسار التخطيط العربي. القاعدة الواحدة تخدم الاتجاهين. |
padding-left / padding-right | padding-inline-start / padding-inline-end | الحشو الداخلي للأزرار والحقول التي تحمل أيقونة على جانب واحد. |
left / right | inset-inline-start / inset-inline-end | مواضع العناصر العائمة: الإشعارات، الأزرار الطافية، القوائم المنبثقة. |
text-align: left / right | text-align: start / end | يجعل النص يتبع اتجاه المحتوى بدل أن يُثبَّت على جهة واحدة. |
border-left / border-right | border-inline-start / border-inline-end | الخط الملوّن على حافّة التنبيهات والاقتباسات. ينتقل للجهة الصحيحة وحده. |
border-radius: a b c d | border-start-start-radius … | مهمّ في الأزرار المتلاصقة ومجموعات الحقول، حيث تُدوَّر الأطراف الخارجية فقط. |
transform: translateX(100%) | translateX(calc(100% * var(--dir))) | لا يوجد بديل منطقي للتحويلات، فعرِّف متغيّر اتجاه واضربه في القيمة. |
transform-origin: left | transform-origin: inline-start | أشرطة التقدّم ومؤقّتات الإشعارات التي تفرغ في اتجاه القراءة. |
float: left | float: inline-start | الصور الملتفّة بالنص داخل المقالات. |
background-position: left | background-position-x + [dir] | لا يوجد بديل منطقي، فتحتاج قاعدة صريحة داخل [dir="rtl"]. |
إيه اللي ينعكس وإيه اللي ممنوع ينعكس
عكس كل الأيقونات بـ scaleX(-1) خطأ شائع بينتج واجهة غريبة: ساعة بعقارب مقلوبة وكاميرا مقلوبة. القاعدة: اعكس ما يدلّ على اتجاه في القراءة أو في التسلسل، واترك ما يمثّل شيئاً مادياً أو معياراً عالمياً.
ينعكس
- الأسهم الاتجاهية: التالي والسابق، والرجوع، وسهم التراجع، وسهم «شوف المزيد».
- أيقونات المحاذاة والمسافة البادئة، وأيقونات القوائم المرقّمة.
- أشرطة التقدّم والمنزلقات، فهي تبدأ من اليمين.
- ترتيب الأزرار في تذييل النوافذ الحوارية.
- اتجاه لمعان الهياكل التحميلية وحركات الانزلاق.
لا ينعكس أبداً
- الساعات والمؤقّتات وأي شيء يمثّل عقارب، فالوقت لا ينعكس.
- رمز التحميل الدوّار، فدورانه ليس اتجاهاً في القراءة.
- أيقونات الحالة: صح، خطأ، تحذير، معلومة.
- الأيقونات التي تمثّل أشياء مادية معروفة: المفتاح، القفل، الكاميرا، عربة التسوّق.
- الشعارات، وأي أيقونة تحمل حرفاً لاتينياً أو رقماً.
- أزرار تشغيل الوسائط ▶، وهي معيار عالمي لا يتبع اتجاه اللغة.
- رمز السهم المتّجه لأسفل في القوائم المنسدلة، لأنه عمودي لا أفقي.
الخلط الاتجاهي (Bidi)
أصعب أخطاء العربية مش في التخطيط، لكن في السطر الواحد اللي فيه عربي ولاتيني وأرقام مع بعض. خوارزمية الاتجاه في المتصفّح بتشتغل تلقائياً، والنتيجة بتبقى غلط في حالات متكرّرة.
الأرقام والمعرّفات داخل نص عربي
الأرقام تُكتب من اليسار لليمين حتى داخل الجملة العربية. الخلل يظهر عند التصاقها بعلامات مثل # أو % أو + أو -، فقد ينتقل الرمز للطرف الخطأ. الحلّ: لفّها بـ <bdi> أو span بـ unicode-bidi: isolate.
أسماء الكود داخل جملة عربية
اسم مثل aria-expanded أو max-width: 100% في نهاية جملة عربية قد تُزاح شرطته أو نقطتاه إلى الجانب الآخر. أي مقطع لاتيني منشور داخل نص عربي يجب أن يكون معزولاً اتجاهياً.
المحتوى الذي يكتبه المستخدم
لا تفترض لغة تعليق أو اسم ملف كتبه المستخدم. استخدم dir="auto" على الحقول وعلى مواضع العرض، فيتولّى المتصفّح تحديد الاتجاه من أول حرف ذي اتجاه قويّ.
الخطوط والارتفاع السطري
الحروف العربية أعلى وأكثر تشابكاً من اللاتينية، فارتفاع سطر مضبوط على الإنجليزية يبدو خانقاً بالعربية. ارفع line-height بمقدار 0.15 إلى 0.25 تقريباً في النصوص العربية، وألغِ letter-spacing تماماً لأنه يفكّك الحروف المتّصلة.
ملاحظات RTL لكل عنصر
219كل صفحة عنصر في القاموس فيها قسم RTL خاص بيه. دي فهرسة سريعة لكل الملاحظات المنشورة.
- إجراءات السحبSwipe Actionsالبادئة والخاتمة تتبادلان · الإزاحة الخام تبقى فيزيائية · رسو اللوح ومحاذاة نصّه · أيقونات الإجراءات · التصادم مع إيماءة الرجوع5
- زرّ الإجراء العائمFloating Action Buttonالركن ينتقل إلى الجهة المقابلة · رمز الزرّ لا ينعكس · الأيقونة عند بداية الكبسولة الممتدّة · محور العنقود لا ينقلب · مصدر حركة الانبثاق يُقلب يدوياً5
- السحب للتحديثPull to Refreshالإيماءة لا تنعكس · دوران المؤشّر · نصّ المؤشّر وطابع الوقت · السحب الأفقي على نفس القائمة · الحشو حول المؤشّر5
- ورقة الإجراءاتAction Sheetالصفوف ليس فيها ما ينعكس · الأيقونة القائدة · الصفّ المدمّر يحتفظ بلونه وموضعه · مرساة الـ popover على iPad · طول الاسم العربي لا يتبع الإنجليزي5
- التمرير اللانهائيInfinite Scrollأي محور ينعكس أصلاً · المؤشّر الدوّار والصفوف الهيكلية · عدّاد العناصر · القائمة الأفقية · اتجاه نصّ العناصر الواردة5
- متتبّع التمريرScrollspyجهة العمود · شريط التعليم · إزاحة المستويات المتداخلة · المراقب لا ينعكس · شريط تقدّم القراءة5
- قصّ النصّTruncation (Ellipsis and Line Clamp)جهة القطع · قناع التلاشي · القطع من الوسط بالترتيب المنطقي · اسم لاتيني داخل سطر عربي · ارتفاع السطر في فقرة محصورة5
- الشريط المقسّمSegmented Controlترتيب الأقسام · إزاحة المؤشّر · زوايا الطرفين · الأسهم · التسميات اللاتينية5
- الشريط الدوّارCarouselالمحور المضمّن ينعكس وحده · السهمان: الموضع والرسم والوظيفة · إشارة scrollLeft · ما لا تقلبه CSS نيابةً عنك · ما داخل الشريحة يبقى كما رُسم5
- اللوحة المنبثقةPopoverكلمات الجهة: المنطقي والفيزيائي · إزاحة السهم · اللوحة المُرحَّلة تفقد dir · الانقلاب عند حافّة الشاشة · المحور الكتلي لا ينعكس5
- لوحة الأوامرCommand Paletteعزل اسم الأمر · تلميح الاختصار داخل الصفّ · اتجاه حقل الأمر · شريط الصفّ المميّز · الاختصار على تخطيط عربي5
- قائمة الأوامرMenu (Dropdown Menu and Context Menu)جهة القائمة الفرعية · سهم القائمة الفرعية · عمود العلامة وعمود الاختصار · نصّ الاختصار نفسه · مفتاحا ArrowRight و ArrowLeft5
- ترويسة الموقع وشريط التنقّلSite Header and Navbarترتيب الشريط · حشو قائمة الروابط · القائمة المنسدلة من عنصر تنقّل · مبدّل اللغة · زرّ القائمة ولوحته5
- الشريط الجانبيSidebarأي حافّة يجلس عليها · الحدّ الفاصل عن المحتوى · تدرّج العناصر المتداخلة · سهم الطيّ وأيقونة الهامبرغر · حركة الطيّ5
- الخطّ الفاصلDividerالخطّ المُزاح · الفاصل المُعنون · الخطّ الرأسي بين الأزرار · التدرّج المتلاشي · الفاصل القابل للسحب5
- البطاقةCardالبطاقة الأفقية · الحشو وتدوير الزوايا · صفّ الإجراءات · الشارة في الزاوية · الصورة نفسها5
- جدول البياناتData Tableترتيب الأعمدة · العمود المجمّد · سهم الفرز · الأعمدة الرقمية · التمرير الأفقي5
- الصورة الرمزية ومجموعتهاAvatar and Avatar Groupاتجاه التداخل · ترتيب التراكب · ركن نقطة الحالة · موضع العدّاد وعلامة الزائد · ما لا ينعكس: الصورة والحروف5
- التنبيهAlertالحافّة الملوّنة · صفّ الأيقونة والإغلاق · أيقونات الحالة لا تنقلب · المقاطع اللاتينية داخل الرسالة · الشريط المحقون خارج الشجرة5
- الشارةBadgeركن الشارة · علامة الزائد في السقف · نظام الأرقام · النقطة وإزاحتها · الشارة بعد تسمية نصّية5
- مؤشّر التقدّمProgress Bar vs Spinner vs Ringاتجاه امتلاء الشريط · زحف الشريط غير المحدّد · دوران المؤشّر · هندسة الحلقة مقابل تسميتها · الأرقام ونظام الترقيم5
- رفع الملفاتFile Upload / Dropzoneصفّ الملف · شريط تقدّم كل ملف · اسم ملف لاتيني في صفّ عربي · الحجم ونظام الأرقام · نافذة النظام5
- حقل الإكمال التلقائيCombobox / Autocompleteمحاذاة اللائحة والطبقة العليا · مؤشّر التحميل · التمييز داخل الكلمة · استعلام عربي فوق تسميات لاتينية · مؤشّر النصّ ومفاتيحه5
- حقل النصText Inputجهة البادئة واللاحقة · قيمة لاتينية داخل نموذج عربي · dir="auto" افتراضاً · ترتيب أرقام العدّاد · الأرقام العربية الهندية في القيمة5
- المنزلقSliderالمحور كلّه ينعكس · تثبيت الامتلاء والمقبض · الأسهم تتبادل معناها · حساب السحب بالمؤشّر · الرقم نفسه لا ينقلب5
- مجموعة أزرار الاختيارRadio Groupمعنى سهمَي اليمين واليسار · موضع الدائرة من نصّها · التفاف الصفّ الأفقي · انتقال المؤشّر المنزلق · ما يبقى على ترتيب الـ DOM5
- مربّع الاختيارCheckboxموضع المربّع في السطر · علامة الصح والشرطة · تدرّج الشجرة المتفرّعة · حلقة التركيز · عمود التحديد في الجدول5
- حقل النموذجForm Fieldموضع التسمية والنجمة · اتجاه القيمة نفسها · أيقونة الحالة داخل الصندوق · عزل القيمة اللاتينية داخل الرسالة · رسالة المتصفّح الأصلية5
- الورقة السفليةBottom Sheetالمقبض لا ينعكس · صفّ إجراءات الرأس · حواف الأمان فيزيائية · السحب الرأسي محايد · ما بداخل الورقة5
- شريط التنقّل السفليTab Bar / Bottom Navigationترتيب الوجهات ينعكس · مؤشّر التحديد يسير على المحور المنطقي · الشارة: الركن المنطقي والرقم داخلها · أيقونات الأشياء لا تنعكس · المنطقة الآمنة تستثنى من قاعدة المنطقي5
- الدرج الجانبيDrawer / Side Panelالحافّة المرتكِزة نفسها تنقلب · حركة الانزلاق تحتاج متغيّر اتجاه · اتجاه السحب للإغلاق ينعكس · زرّ الإغلاق والظلّ · ما لا ينعكس: المحور الكتلي والحجب5
- الحالة الفارغةEmpty Stateالرسم الاتجاهي وحده هو الذي ينعكس · الرسم الذي يحمل نصّاً لاتينياً يُستبدل لا يُقلب · كتلة النصّ الوسطى ونصّ البحث المقتبس · صفّ الأزرار · الحالة الفارغة داخل جدول5
- الشريحةChip / Tagالأيقونة والـ × داخل الشريحة · التفاف الصفّ ومحاذاته · أسهم لوحة المفاتيح داخل المجموعة · شريط الشرائح القابل للتمرير · قيمة لاتينية داخل شريحة عربية5
- مفتاح التبديلSwitch / Toggleاتجاه سفر القرص · امتلاء المسار · موضع التسمية في الصفّ · الرمزان داخل المسار · السحب بالإصبع5
- ترقيم الصفحاتPaginationاتجاه صفّ الأرقام · سهما السابق والتالي · الأرقام والفاصل بينها · مفاتيح الأسهم · نقاط الكاروسيل والتمرير5
- النافذة الحواريةModal Dialogترتيب أزرار التذييل · ركن زرّ الإغلاق · الطبقة الحاجبة لا تنعكس · البوابة تفلت من اتجاه الصفحة · قفل التمرير وتعويض الشريط5
- القائمة المنسدلةDropdown / Selectمحاذاة اللائحة · السهم لا ينعكس · داخل الخيار · مفاتيح التنقّل الرأسية · الأسهم في اللائحة الأفقية5
- التلميحTooltipالجهة والمحاذاة والانقلاب · إزاحة السهم · اتجاه نصّ التلميح · منشأ حركة الظهور · الخاصية الأصلية title5
- التبويباتTabsمفاتيح الأسهم تتبادل · موضع الخطّ النشط · تمرير الشريط عند الفيض · تدرّجات حوافّ التمرير · ما لا يُعكس أبداً5
- مؤشّر الخطواتSteps / Stepperاتجاه التسلسل · امتلاء خطّ الوصل · الأرقام داخل الدوائر · علامة الصح لا تنعكس · الشكل الرأسي على الموبايل5
- هيكل التحميلSkeletonمسار اللمعة · ميل التدرّج · هندسة الكتل نفسها · السطر الأخير الأقصر · حشو الهيكل يطابق حشو المكوّن5
- الأقسام المطويةAccordionموضع المؤشّر داخل الرأس · المؤشّر الذي يدور رأسياً · المؤشّر الذي يشير جانباً · الإزاحة والحشو في التداخل · مفاتيح التنقّل5
- الإشعار العائمToastموضع الإشعار · حركة الدخول · شريط المؤقّت · أيقونة التراجع · مدّة العرض5
- مسار التنقّلBreadcrumbsاتجاه المسار · الفاصل السهمي · الأسماء اللاتينية داخل مسار عربي · الطيّ والقصّ4