Skip to content

إتاحة الوصول ​

تسعى lh-ui-plus لتقديم تجربة UI يسيرة الوصول لجميع المستخدمين حول العالم.

التنقّل بلوحة المفاتيح ​

يدعم كل المكوّنات التفاعلية العمل عبر لوحة المفاتيح:

المفتاحالإجراء
Tabالتنقّل بين العناصر القابلة للتركيز
Enter / Spaceتنشيط زر/مفتاح
Escapeإغلاق الطبقة المنبثقة لـ Dialog/Select
Arrow Up/Downتحريك الخيارات في Select/Cascader صعودًا ونزولًا

خصائص ARIA ​

يُخرج كل مكوّن خصائص ARIA حسب الحاجة (فيما يلي نتيجة الإ render الفعلية):

html
<!-- زر Button معطّل: disabled أصلي، يمكن تخطّيه باستخدام Tab -->
<button disabled>...</button>

<!-- مفتاح Switch: عنصر button مع role/aria-checked -->
<button role="switch" aria-checked="false">...</button>

<!-- Checkbox: عنصر input أصلي، والمعنى الدلالي يأتي من التسمية -->
<input type="checkbox" />

<!-- مربع الحوار Dialog: aria-modal + aria-label يشير إلى العنوان -->
<div role="dialog" aria-modal="true" aria-label="عنوان مربع الحوار">
  ...
</div>

الأسبقية للدلالات الأصلية: يستخدم Button خاصية disabled الأصلية، ويستخدم Checkbox العنصر <input type="checkbox"> الأصلي، دون إضافة aria-disabled / role="checkbox" مكررة — فإضافة ARIA زائدة فوق العناصر الأصلية تخالف المعيار نفسه.

قارئ الشاشة ​

  • الأزرار التي تحوي أيقونات فقط تتطلب تمرير aria-label يدويًا (انظر توصيات التطوير أدناه)
  • يأتي زر إغلاق Dialog مزوّدًا بـ aria-label="close" مسبقًا
  • تمرّر المكوّنات الخصائص الأصلية: أي خاصية لا تُعالَج صراحةً تنتقل إلى العنصر الجذري، ويمكن إضافة aria-* حسب الحاجة

تباين الألوان ​

اختير نصّ اللون الأساسي استنادًا إلى هدف WCAG 2.1 AA (النص العادي ≥ 4.5:1، والنص الكبير والعناصر غير النصية ≥ 3:1)؛ ومع لوحة الألوان الصينية منخفضة التشبّع يُنصح باستخدام تسلسل --lh-text-color-* من تخصيص السمات بدل اختيار ألوان مخصّصة، لضمان التباين.

إدارة التركيز ​

  • يوفَّر حلقة تركيز :focus-visible موحّدة على العنصر الجذري: تظهر عند التنقّل بلوحة المفاتيح ولا تظهر عند النقر بالفأرة
  • تدعم الطبقات المنبثقة لـ Dialog/Select الإغلاق بزر Escape
  • قابلية التشغيل بلوحة المفاتيح: جميع العناصر القابلة للتركيز هي عناصر <button> / <input> أصلية وتدعم التنقّل بـ Tab بطبيعتها

لم تُنفَّذ بعدُ كلٌّ من فخ التركيز وإعادة التركيز (تركيز أول عنصر عند فتح Dialog والعودة إلى الزر المُشغِّل بعد الإغلاق)، ويمكن متابعة ذلك في Issue.

توصيات التطوير ​

إضافة aria-label إلى المكوّن ​

vue
<LhButton aria-label="إغلاق مربع الحوار" @click="close">
  <LhIcon name="close" />
</LhButton>

استخدام المنطقة الحيّة للإعلانات ​

vue
<script setup lang="ts">
import { ref } from 'vue'
const message = ref('')
</script>

<template>
  <div aria-live="polite">{{ message }}</div>
</template>

تخطّي التنقّل (Skip Navigation) ​

html
<a href="#main" class="skip-link">تخطّي إلى المحتوى الرئيسي</a>

أدوات الاختبار ​

يُوصى باستخدام الأدوات التالية لكشف مشاكل إتاحة الوصول:

  • axe DevTools — إضافة للمتصفح
  • WAVE — Web Accessibility Evaluation Tool
  • lighthouse — تدقيق إتاحة وصول مدمج

إتاحة الوصول ليست ميزة اختيارية، بل حق أساسي من حقوق الإنسان. — Web Accessibility Initiative (WAI)

جمال التقاليد، أساس الكود