التحكم في التركيز باستخدام Tabindex

تكون عناصر HTML العادية، مثل <button> أو <input>، مضمّنة مجانًا في إمكانية الوصول إلى لوحة المفاتيح. مع ذلك، إذا كنت تنشئ مكوِّنات تفاعلية مخصّصة، استخدِم السمة tabindex لضمان إمكانية الوصول إليها من خلال لوحة المفاتيح.

التحقّق مما إذا كان يمكن الوصول إلى عناصر التحكّم من خلال لوحة المفاتيح

تُعد أداة مثل Lighthouse رائعة في اكتشاف بعض مشكلات إمكانية الوصول، ولكن لا يمكن اختبار بعض الأشياء إلا من قبل شخص.

جرِّب الضغط على مفتاح Tab للتنقل في موقعك الإلكتروني. هل يمكنك الوصول إلى جميع عناصر التحكم التفاعلية على الصفحة؟ في حال عدم حدوث ذلك، قد تحتاج إلى استخدام tabindex لتحسين إمكانية التركيز على عناصر التحكّم هذه.

إدراج عنصر في ترتيب التنقل بـ Tab

أدخِل عنصرًا في ترتيب التنقل بـ Tab الطبيعي باستخدام tabindex="0". مثال:

<div tabindex="0">Focus me with the TAB key</div>

للتركيز على عنصر، اضغط على مفتاح Tab أو استدعِ طريقة focus() للعنصر.

إزالة عنصر من ترتيب التنقل بـ Tab

إزالة عنصر باستخدام السمة tabindex="-1" مثال:

<button tabindex="-1">Can't reach me with the TAB key!</button>

يؤدي هذا الإجراء إلى إزالة العنصر من ترتيب علامات التبويب الطبيعي، ولكن يمكن التركيز على العنصر من خلال استدعاء طريقة focus().

تجدر الإشارة إلى أنّ تطبيق tabindex="-1" على عنصر لا يؤثر في عناصره الثانوية، وإذا كانت مرتبطة بترتيب مفتاح التبويب (Tab) بشكل طبيعي أو بسبب قيمة tabindex، فستبقى بترتيب مفتاح التبويب (Tab). لإزالة عنصر وجميع العناصر الثانوية الخاصة به من ترتيب التنقّل باستخدام مفتاح التبويب (Tab)، يمكنك استخدام رمز polyfill inert الخاص بـ WICG. يحاكي رمز polyfill سلوك سمة inert المقترَحة، ما يمنع اختيار العناصر أو قراءتها بواسطة التكنولوجيا المساعِدة.

تجنُّب tabindex > 0

يؤدي استخدام أي قيمة tabindex أكبر من 0 إلى نقل العنصر إلى مقدّمة ترتيب علامات التبويب الطبيعي. إذا كان هناك عناصر متعددة بقيمة tabindex أكبر من 0، يبدأ ترتيب علامات الجدولة من أدنى قيمة أكبر من صفر ويتحوّل إلى أعلى.

إنّ استخدام قيمة tabindex أكبر من 0 يُعتبر معارضًا للنمط لأنّ برامج قراءة الشاشة تتنقّل في الصفحة بترتيب DOM، وليس حسب ترتيب التنقل بـ Tab. إذا كنت بحاجة إلى ظهور عنصر في وقت أقرب في ترتيب التنقل بـ Tab، فيجب نقله إلى مكان سابق في DOM.

تسهِّل أداة Lighthouse تحديد العناصر باستخدام tabindex > 0. شغِّل تدقيق إمكانية الوصول (Lighthouse > الخيارات > إمكانية الوصول) وابحث عن نتائج التدقيق "لا يحتوي أي عنصر على قيمة [tabindex] أكبر من 0".

إنشاء مكونات يسهل الوصول إليها باستخدام ميزة "التنقل tabindex"

إذا كنت تنشئ مكونًا معقدًا، فقد تحتاج إلى إضافة دعم إضافي للوحة المفاتيح خارج التركيز. ننصحك بأخذ عنصر select المضمّن في الاعتبار. يمكن التركيز عليه ويمكنك استخدام مفاتيح الأسهم لعرض وظائف إضافية (الخيارات القابلة للتحديد).

لتنفيذ وظائف مشابهة في المكوّنات الخاصة بك، استخدِم أسلوبًا يُعرَف باسم "tabindex متنقلًا". يعمل مؤشر جدولة التنقل من خلال ضبط tabindex على 1- لجميع الأطفال باستثناء الحساب النشط حاليًا. يستخدم المكون بعد ذلك أداة معالجة حدث لوحة المفاتيح لتحديد المفتاح الذي ضغط عليه المستخدم.

عند حدوث ذلك، يضبط المكوِّن القيمة 0-1 للسمة الفرعية التي تمّ التركيز عليها سابقًا، ويضبط tabindex الخاص بالطفل الذي سيتم التركيز عليه على 0، ويطلب الطريقة focus() عليه.tabindex

قبل

<div role="toolbar">
  <button tabindex="-1">Undo</button>
  <button tabindex="0">Redo</button>
  <button tabindex="-1">Cut</button>
</div>

بعد

<div role="toolbar">
  <button tabindex="-1">Undo</button>
  <button tabindex="-1">Redo</button>
  <button tabindex="0">Cut</button>
</div>

وصفات الوصول إلى لوحة المفاتيح

إذا لم تكن متأكدًا من مستوى دعم لوحة المفاتيح الذي قد تحتاج إليه المكوّنات المخصّصة، يمكنك الرجوع إلى الإصدار 1.1 من ممارسات تأليف ARIA. يسرد هذا الدليل المفيد أنماط واجهة المستخدم الشائعة ويحدد المفاتيح التي يجب أن تدعمها مكوناتك.