0Pricing
HTML Academy · درس

aria-expanded وaria-controls لعناصر التبديل

إنشاء أدوات كشف وأكورديون ميسّرة باستخدام ARIA

aria-expanded وaria-controls لعناصر التبديل درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.

نظرة عامة على نمط التبديل

تحتاج عناصر التحكم بالتبديل، مثل الأكورديونات والقوائم المنسدلة والقوائم، إلى ARIA للتعبير عن حالتها المفتوحة أو المغلقة:

  • aria-expanded — يشير إلى حالة فتح عنصر التحكم أو إغلاقه
  • aria-controls — يربط عنصر التحكم بالعنصر الذي يتحكم فيه

aria-expanded

توضح aria-expanded ما إذا كان العنصر الذي يتم التحكم فيه موسّعًا أم مطويًا:

<button aria-expanded="false" aria-controls="menu">
  Menu
</button>
<ul id="menu" hidden>
  <li><a href="/">Home</a></li>
</ul>
<script>
btn.addEventListener('click', () => {
  const expanded = btn.getAttribute('aria-expanded') === 'true';
  btn.setAttribute('aria-expanded', !expanded);
  menu.hidden = expanded;
});
</script>

aria-controls

تشير aria-controls إلى معرّف العنصر الذي يتم التحكم فيه:

<button
  id="details-btn"
  aria-expanded="false"
  aria-controls="details-panel"
>
  Show Details
</button>
<div id="details-panel" hidden>
  <p>Additional details go here...</p>
</div>
<!-- Screen reader: 'Show Details, button, collapsed'
     After click: 'Show Details, button, expanded' -->

نمط الأكورديون

أكورديون يمكن الوصول إليه باستخدام aria-expanded:

<div class="accordion">
  <h3>
    <button
      aria-expanded="false"
      aria-controls="panel-1"
    >Section 1</button>
  </h3>
  <div id="panel-1" hidden>
    <p>Panel 1 content...</p>
  </div>

  <h3>
    <button
      aria-expanded="false"
      aria-controls="panel-2"
    >Section 2</button>
  </h3>
  <div id="panel-2" hidden>
    <p>Panel 2 content...</p>
  </div>
</div>

نمط القائمة المنسدلة

قائمة منسدلة للتنقل يمكن الوصول إليها:

<nav>
  <button
    aria-expanded="false"
    aria-haspopup="true"
    aria-controls="products-menu"
  >Products</button>

  <ul id="products-menu" role="menu" hidden>
    <li role="menuitem"><a href="/widget">Widget</a></li>
    <li role="menuitem"><a href="/gadget">Gadget</a></li>
  </ul>
</nav>

aria-haspopup

تشير aria-haspopup إلى أن تفعيل عنصر التحكم سيفتح نافذة منبثقة:

<button aria-haspopup="menu">File</button>
<!-- Values: true (menu), menu, listbox, tree, grid, dialog -->
<!-- Screen reader: 'File, button, has popup' -->

<!-- Note: aria-haspopup="true" is equivalent to "menu" -->
<!-- Use specific values when the popup type matters -->

استكمال ARIA لـ Details/Summary

تعبّر details/summary الأصلية بالفعل عن حالة التوسيع، ولذلك لا حاجة إلى ARIA:

<details>
  <summary>FAQ Question</summary>
  <p>Answer goes here.</p>
</details>
<!-- Browser automatically provides aria-expanded
     and the disclosure widget semantics -->
<!-- No need to add aria-expanded manually to summary -->

CSS لحالة aria-expanded

استخدم aria-expanded كخطاف في CSS:

/* Panel hidden by default: */
[aria-controls] + [hidden] {
  display: none;
}

/* Or using aria-expanded on the button: */
[aria-expanded="false"] + .panel {
  display: none;
}

[aria-expanded="true"] + .panel {
  display: block;
}

/* Rotate arrow icon: */
[aria-expanded="true"] .arrow {
  transform: rotate(180deg);
}

متطلبات لوحة المفاتيح لعناصر التبديل

يجب أن تدعم مكوّنات التبديل التفاعل باستخدام لوحة المفاتيح:

  • Enter أو Space — تفعيل زر التبديل
  • Escape — إغلاق قائمة منسدلة أو قائمة
  • مفاتيح الأسهم — التنقل داخل قائمة مفتوحة

إدارة التركيز بعد التبديل

بعد تبديل المحتوى، أدر التركيز بالطريقة المناسبة:

// Accordion: focus stays on the button (usually OK)
// Dropdown menu: move focus to first menu item on open

button.addEventListener('click', () => {
  const expanded = button.getAttribute('aria-expanded') === 'true';
  button.setAttribute('aria-expanded', !expanded);
  panel.hidden = expanded;

  if (!expanded) {
    // Opening a dropdown: focus first item
    panel.querySelector('a, button, [tabindex]')?.focus();
  }
});

اعتبارات الأجهزة المحمولة

مكوّنات التبديل على الأجهزة المحمولة:

  • يجب ألا تقل مساحة أهداف اللمس عن 44×44px (WCAG 2.5.5)
  • تدعم قارئات الشاشة على الأجهزة المحمولة aria-expanded (‏iOS VoiceOver وAndroid TalkBack)
  • لا تحل إيماءات السحب محل التفعيل باستخدام لوحة المفاتيح أو الزر

تحقق سريع

ما القيمة التي ينبغي أن تكون لـ aria-expanded عندما يكون القسم الذي يتم التحكم فيه مخفيًا؟

مراجعة: aria-expanded وaria-controls

أساسيات ARIA لعناصر التبديل:

  • aria-expanded="true/false" — حالة عنصر التحكم المفتوحة أو المغلقة
  • aria-controls="id" — يربط عنصر التحكم باللوح الخاص به
  • aria-haspopup — يشير إلى توفر نافذة منبثقة
  • حدّث aria-expanded عند كل عملية تبديل
  • انقل التركيز إلى داخل القائمة المفتوحة، وأعده إلى عنصر التشغيل عند الإغلاق

الأسئلة الشائعة

هل درس «aria-expanded وaria-controls لعناصر التبديل» مجاني؟

نعم — نص درس «aria-expanded وaria-controls لعناصر التبديل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.

ماذا ستتعلم في «aria-expanded وaria-controls لعناصر التبديل»؟

إنشاء أدوات كشف وأكورديون ميسّرة باستخدام ARIA تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟

لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «aria-expanded وaria-controls لعناصر التبديل»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟

نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. aria-expanded وaria-controls لعناصر التبديل
  2. aria-selected وأنماط علامات التبويب
  3. المناطق الحية: aria-live وaria-atomic وaria-relevant
  4. الاختبار باستخدام قارئات الشاشة
← العودة إلى HTML Academy