موسيقى للتركيز

بودكاست CSS - الحلقة 18: التركيز

على صفحة الويب، انقر على رابط ينقل المستخدم إلى المحتوى الرئيسي للموقع الإلكتروني. ويُشار إلى هذه الروابط غالبًا باسم روابط التخطّي أو روابط الربط. عند تفعيل هذا الرابط باستخدام لوحة مفاتيح، باستخدام مفتاحَي Tab وEnter، تظهر حلقة تركيز حول حاوية المحتوى الرئيسي. ما السبب؟

ويعود السبب في ذلك إلى أنّ <main> يحتوي على قيمة سمة tabindex="-1"، ما يعني أنّه يمكن التركيز عليه آليًا. عندما يتم استهداف <main>، لأنّ #main-content في شريط عنوان URL للمتصفّح يتطابق مع id، يتلقّى التركيز الآلي. قد يكون من المغري إزالة أنماط التركيز في هذه الحالات، ولكنّ التعامل مع التركيز بشكل مناسب وبعناية يساعد في توفير تجربة مستخدم جيدة وسهلة الاستخدام. ويمكن أن يكون أيضًا مكانًا رائعًا لإضافة بعض التشويق إلى التفاعلات.

ما أهمية التركيز؟

بصفتك مطوّر ويب، من واجبك توفير موقع إلكتروني سهل الاستخدام وشامِل للجميع. ويشكّل إنشاء حالات التركيز القابلة للوصول باستخدام CSS جزءًا من هذه المسؤولية.

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

كيفية تركيز المستخدمين على العناصر

يمكن التركيز على عناصر معيّنة تلقائيًا، وهي العناصر التي تقبل التفاعل والإدخال، مثل <a> و<button> و<input> و<select>. بعبارة أخرى، جميع عناصر النموذج والأزرار والروابط. يمكنك عادةً التنقّل في العناصر التي يمكن التركيز عليها في موقع إلكتروني باستخدام مفتاح التبويب (Tab) للانتقال إلى الأمام في الصفحة، وShift + التبويب (Tab) للانتقال إلى الخلف.

هناك أيضًا سمة HTML تُسمى tabindex تتيح لك تغيير فهرس التبويب، وهو الترتيب الذي يتم فيه التركيز على العناصر، في كل مرة يضغط فيها المستخدم على مفتاح Tab، أو يتم نقل التركيز من خلال تغيير العلامة في عنوان URL أو من خلال حدث JavaScript. إذا تم ضبط القيمة tabindex في عنصر HTML على 0، يمكن أن يتلقّى التركيز من خلال مفتاح tab وسيحترم مؤشر علامات التبويب العام، الذي يتم تحديده حسب ترتيب مصدر المستند.

في حال ضبط tabindex على -1، لا يمكنه تلقّي التركيز إلا آليًا، أي فقط عند حدوث حدث JavaScript أو تغيير تجزئة (مطابقة id للعنصر في عنوان URL). إذا ضبطت tabindex على أي قيمة أعلى من 0، ستتم إزالتها من فهرس علامات التبويب الشامل، الذي يتم تحديده حسب ترتيب مصدر المستند. سيتم الآن تحديد ترتيب التنقل باستخدام مفتاح التبويب حسب قيمة tabindex، وبذلك سيتلقّى العنصر الذي يحتوي على tabindex="1" التركيز قبل العنصر الذي يحتوي على tabindex="2"، على سبيل المثال.

تركيز التصميم

السلوك التلقائي للمتصفّح عند تركيز العنصر هو عرض حلقة تركيز. يختلف شكل حلقة التركيز هذه بين المتصفّح ونظام التشغيل.

يمكن تغيير هذا السلوك باستخدام CSS، باستخدام الفئات الزائفة :focus و:focus-within و:focus-visible التي تعرّفت عليها في درس الفئات الزائفة. من المهم ضبط تنسيق تركيز يتميز بالتباين مع التنسيق التلقائي للعنصر. على سبيل المثال، من الشائع استخدام السمة outline.

a:focus {
  outline: 2px solid slateblue;
}

يمكن أن تظهر السمة outline قريبة جدًا من نص الرابط، ولكن يمكن أن تساعد السمة outline-offset في ذلك، لأنّها تضيف padding مرئية إضافية بدون التأثير في الحجم الهندسي الذي يملؤه العنصر. ستؤدي القيمة الموجبة لرقم outline-offset إلى دفع المخطط التفصيلي للخارج، بينما ستؤدي القيمة السالبة إلى سحب المخطط التفصيلي للداخل.

في بعض المتصفّحات حاليًا، إذا كان لديك border-radius محدّدًا للعنصر وكنت تستخدم outline، لن يتطابقا، وسيكون للمخطط حوافز حادة. ولهذا السبب، يُغري استخدام box-shadow مع نصف قطر تمويه صغير لأنّ box-shadow يتم اقتصاصه إلى الشكل، مع مراعاة border-radius، ولكن لن يظهر هذا النمط في "وضع التباين العالي" في نظام التشغيل Windows. ويعود السبب في ذلك إلى أنّ "وضع التباين العالي" في نظام التشغيل Windows لا يطبّق الظلال، ويغضّ النظر في الغالب عن صور الخلفية لتفضيل الإعدادات المفضّلة للمستخدم.

الملخّص

من المهم جدًا إنشاء حالة تركيز تختلف عن الحالة التلقائية للعنصر. تُجري أنماط المتصفّح التلقائية ذلك نيابةً عنك، ولكن إذا أردت تغيير هذا السلوك، تذكَّر ما يلي:

  • تجنَّب استخدام outline: none على عنصر يمكنه تلقّي تركيز لوحة المفاتيح.
  • تجنَّب استبدال أنماط outline بأنماط box-shadow. لأنّها لا تظهر في وضع التباين العالي في نظام التشغيل Windows.
  • لا تضبط قيمة موجبة لسمة tabindex في عنصر HTML إلّا إذا كان ذلك ضروريًا.
  • تأكَّد من أنّ حالة التركيز واضحة جدًا مقارنةً بالحالة التلقائية.

التحقّق من فهمك

اختبِر معلوماتك حول التركيز

أيٌّ ممّا يلي من العناصر التي يمكن التركيز عليها تلقائيًا؟

<a>
🎉
<p>
يُرجى إعادة المحاولة.
<button>
🎉
<input>
🎉
<output>
يُرجى إعادة المحاولة.
<select>
🎉

أي من أجهزة الإدخال التالية يمكنها ضبط التركيز؟

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