aria-selected وأنماط علامات التبويب
تنفيذ واجهات علامات تبويب يمكن الوصول إليها باستخدام لوحة المفاتيح
aria-selected وأنماط علامات التبويب درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
نظرة عامة على نمط علامات التبويب
تتكوّن واجهة علامات التبويب من ثلاثة مكوّنات ARIA:
role="tablist"— حاوية لجميع علامات التبويبrole="tab"— زر علامة تبويب فرديrole="tabpanel"— لوحة المحتوى الخاصة بكل علامة تبويب
بنية علامات التبويب باستخدام ARIA
ترميز كامل لعلامات تبويب يمكن الوصول إليها:
<div role="tablist" aria-label="Account Settings">
<button role="tab" id="tab-1" aria-selected="true"
aria-controls="panel-1">Profile</button>
<button role="tab" id="tab-2" aria-selected="false"
aria-controls="panel-2" tabindex="-1">Security</button>
<button role="tab" id="tab-3" aria-selected="false"
aria-controls="panel-3" tabindex="-1">Notifications</button>
</div>
<div id="panel-1" role="tabpanel" aria-labelledby="tab-1">
Profile content...
</div>
<div id="panel-2" role="tabpanel" aria-labelledby="tab-2" hidden>
Security content...
</div>aria-selected
تشير aria-selected إلى العنصر النشط حاليًا ضمن سياق التحديد:
<!-- In a tablist: -->
<button role="tab" aria-selected="true">Active Tab</button>
<button role="tab" aria-selected="false">Other Tab</button>
<!-- In a listbox: -->
<ul role="listbox">
<li role="option" aria-selected="false">Option 1</li>
<li role="option" aria-selected="true">Option 2</li>
</ul>نمط لوحة المفاتيح لعلامات التبويب
تحدد أنماط ARIA سلوكًا معينًا للوحة المفاتيح عند استخدام علامات التبويب:
- Tab — ينقل التركيز إلى داخل قائمة علامات التبويب، وتحديدًا إلى علامة التبويب المحددة
- مفاتيح الأسهم — التنقل بين علامات التبويب بالتتابع
- Tab مرة أخرى — ينقل التركيز خارج قائمة علامات التبويب إلى اللوحة النشطة
- Home — علامة التبويب الأولى
- End — علامة التبويب الأخيرة
تنفيذ لوحة المفاتيح لعلامات التبويب
التنقل بين علامات التبويب باستخدام مفاتيح الأسهم:
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach((tab, i) => {
tab.addEventListener('keydown', (e) => {
let target;
if (e.key === 'ArrowRight') target = tabs[(i + 1) % tabs.length];
if (e.key === 'ArrowLeft') target = tabs[(i - 1 + tabs.length) % tabs.length];
if (e.key === 'Home') target = tabs[0];
if (e.key === 'End') target = tabs[tabs.length - 1];
if (target) {
activateTab(target);
target.focus();
}
});
});دالة activateTab
دالة لتبديل علامات التبويب وتحديث ARIA:
function activateTab(selectedTab) {
// Deactivate all tabs:
document.querySelectorAll('[role="tab"]').forEach(tab => {
tab.setAttribute('aria-selected', 'false');
tab.setAttribute('tabindex', '-1');
document.getElementById(tab.getAttribute('aria-controls')).hidden = true;
});
// Activate selected tab:
selectedTab.setAttribute('aria-selected', 'true');
selectedTab.setAttribute('tabindex', '0');
document.getElementById(selectedTab.getAttribute('aria-controls')).hidden = false;
}نمط tabindex المتنقّل
تستخدم مجموعات علامات التبويب tabindex متنقّلًا لإبقاء علامة تبويب واحدة ضمن ترتيب التنقل:
<!-- Only the selected tab has tabindex=0 -->
<button role="tab" aria-selected="true" tabindex="0">Active</button>
<button role="tab" aria-selected="false" tabindex="-1">Other</button>
<button role="tab" aria-selected="false" tabindex="-1">Another</button>
<!-- When user arrows to a new tab:
1. Set new tab tabindex=0
2. Set old tab tabindex=-1
3. Focus new tab -->aria-selected مقابل aria-checked
aria-selected مقابل aria-checked — سياقات مختلفة:
aria-selected— يُستخدم في عناصر واجهة التحديد: علامات التبويب، والخيارات في listbox، والعناصر في treearia-checked— يُستخدم في العناصر القابلة للتحديد: مربعات الاختيار، وعناصر القوائم التي تحمل علامة اختيار
التركيز على لوحة علامات التبويب
عند تفعيل علامة تبويب، تصبح اللوحة مرئية، لكن يبقى التركيز على علامة التبويب:
// Users can then Tab to move into the panel content
// The panel should not automatically receive focus
// Exception: if the panel is very long, consider moving focus
// to the panel heading for long-form content tabs
// Panel should have tabindex=-1 for programmatic focus:
<div id="panel-1" role="tabpanel" aria-labelledby="tab-1" tabindex="-1">التفعيل التلقائي مقابل اليدوي
نموذجا تفعيل علامات التبويب:
- تلقائي — تُفعّل علامات التبويب أثناء تنقل المستخدم بينها باستخدام الأسهم، ما يوفر تجربة أبسط
- يدوي — يجب على المستخدم الضغط على Enter/Space للتفعيل بعد التنقل بالأسهم، وهو أفضل عندما يتطلب محتوى علامة التبويب تحميلًا
تنسيق علامات التبويب التي يمكن الوصول إليها
CSS لحالة علامة التبويب المحددة التي يمكن الوصول إليها:
[role="tab"] {
border-bottom: 3px solid transparent;
padding: 0.75rem 1rem;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
border-bottom-color: #0070f3;
font-weight: bold;
}
/* :focus-visible for keyboard users: */
[role="tab"]:focus-visible {
outline: 2px solid #0070f3;
outline-offset: -2px;
}تحقق سريع
كيف ينبغي أن يعمل التنقل باستخدام لوحة المفاتيح داخل قائمة علامات التبويب؟
مراجعة: aria-selected وعلامات التبويب
أساسيات نمط علامات التبويب:
- tablist ← tab (aria-selected) ← tabpanel (aria-labelledby)
- تتنقل مفاتيح الأسهم بين علامات التبويب، ويدخل Tab إلى اللوحة
- tabindex متنقّل: علامة التبويب النشطة فقط لها tabindex=0
- تكون aria-selected="true" على علامة التبويب النشطة
- تستخدم اللوحات غير النشطة السمة hidden
الأسئلة الشائعة
هل درس «aria-selected وأنماط علامات التبويب» مجاني؟
نعم — نص درس «aria-selected وأنماط علامات التبويب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «aria-selected وأنماط علامات التبويب»؟
تنفيذ واجهات علامات تبويب يمكن الوصول إليها باستخدام لوحة المفاتيح تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «aria-selected وأنماط علامات التبويب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- aria-expanded وaria-controls لعناصر التبديل
- aria-selected وأنماط علامات التبويب
- المناطق الحية: aria-live وaria-atomic وaria-relevant
- الاختبار باستخدام قارئات الشاشة