0Pricing
HTML Academy · درس

aria-hidden وaria-live

إخفاء العناصر الزخرفية والإعلان عن المحتوى الديناميكي لقارئات الشاشة

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

aria-hidden

تزيل aria-hidden="true" العنصر من شجرة إمكانية الوصول، ولذلك يتجاهله قارئ الشاشة تمامًا:

<!-- Decorative icon: visible but skip by screen readers -->
<span aria-hidden="true">★★★★☆</span>
<span class="sr-only">4 out of 5 stars</span>

<!-- Decorative separator -->
<img src="divider.svg" alt="" aria-hidden="true">

<!-- Note: aria-hidden does NOT affect visibility or tab focus
     A button with aria-hidden is still tabbable! -->

حالات استخدام aria-hidden

الاستخدامات المناسبة لـ aria-hidden:

<!-- 1. Icons next to descriptive text -->
<button>
  <svg aria-hidden="true"><!-- icon --></svg>
  Save Document
</button>

<!-- 2. Repeated text in a card link -->
<a href="/blog/post-1">
  <span aria-hidden="true">Read more</span>
  <span class="sr-only">Read more: HTML5 Forms Guide</span>
</a>

<!-- 3. UI decoration (dots, decorative borders) -->
<span aria-hidden="true">•••</span>

مشكلة شائعة في aria-hidden

يُمنع تطبيق aria-hidden على العناصر القابلة للتركيز:

<!-- BAD: button is in tab order but invisible to screen readers -->
<button aria-hidden="true">Close</button>

<!-- Users reach this via Tab but hear nothing
     They cannot tell if they're on a button or lost focus -->

<!-- If you want to hide from both: use hidden attribute -->
<button hidden>Close</button>

<!-- Or: disabled (but disabled removes from tab order) -->
<button disabled aria-hidden="true">Close</button>

aria-live

تحوّل aria-live منطقةً إلى منطقة حية، إذ يُعلن عن التغييرات تلقائيًا:

<!-- polite: announce when user is idle -->
<div aria-live="polite" id="status"></div>

<!-- assertive: announce immediately, interrupting current speech -->
<div aria-live="assertive" id="errors"></div>

<script>
// Inject text to trigger announcement:
document.getElementById('status').textContent = 'File saved successfully.';
// Screen reader announces this without user moving focus
</script>

قيم aria-live

القيم الثلاث لـ aria-live:

  • off — القيمة الافتراضية: لا يتم الإعلان عن التغييرات
  • polite — يُعلن عنها عند توقف المستخدم مؤقتًا؛ للتحديثات غير العاجلة
  • assertive — يُعلن عنها فورًا ويقاطع الكلام الحالي؛ للأخطاء والتنبيهات الحرجة

aria-atomic

تتحكم aria-atomic في ما إذا كان سيُعلن عن المنطقة بأكملها أو عن الأجزاء التي تغيّرت فقط:

<div aria-live="polite" aria-atomic="true" id="timer">
  Time remaining: 05:00
</div>
<!-- aria-atomic="true": announce the whole div each update -->
<!-- Without it: only the changed text node is announced
     'Time remaining: 05:00' vs just '05:00' -->

<script>
setInterval(() => {
  document.getElementById('timer').textContent = `Time remaining: ${getTime()}`;
}, 1000);
</script>

aria-relevant

تحدد aria-relevant أنواع التغييرات التي يُعلن عنها:

<div
  aria-live="polite"
  aria-relevant="additions text"   <!-- announce added content and text changes -->
  id="feed"
>
  <!-- New items added here -->
</div>
<!-- Values: additions, removals, text, all
     Default: additions text
     aria-relevant="removals" needed to announce deleted items -->

أفضل ممارسات المناطق الحية

إرشادات بشأن المناطق الحية:

  • استخدم منطقة حية ثابتة واحدة لكل نوع من الإعلانات، ولا تنشئها وتحذفها باستمرار
  • ابدأ بمحتوى فارغ؛ ثم أدرج النص لتحفيز الإعلان عنه
  • اجعل الإعلانات موجزة، لأن قارئات الشاشة قد تقاطع الكلام أو تتأخر عنه
  • في حالات التحميل: استخدم polite
  • في أخطاء النماذج: استخدم assertive أو role="alert"

أنماط إشعارات Toast

الإعلان عن إشعارات Toast باستخدام المناطق الحية:

<div
  role="status"
  aria-live="polite"
  aria-atomic="true"
  id="toast-container"
  class="sr-only"
></div>

<script>
function showToast(message) {
  const container = document.getElementById('toast-container');
  container.textContent = '';
  // Force rerender for re-announcement:
  requestAnimationFrame(() => {
    container.textContent = message;
  });
}
</script>

aria-busy

تشير aria-busy="true" إلى أن المحتوى قيد التحديث:

<div id="feed" aria-live="polite" aria-busy="false">
  <!-- content -->
</div>

<script>
const feed = document.getElementById('feed');
feed.setAttribute('aria-busy', 'true');

await loadContent();
feed.innerHTML = newContent;

feed.setAttribute('aria-busy', 'false');
// Only now does the live region announce the update
</script>

تحقق سريع

متى ينبغي استخدام aria-live="assertive" بدلًا من "polite"؟

مراجعة: aria-hidden وaria-live

أساسيات الإخفاء والمناطق الحية:

  • aria-hidden="true" — يزيل العنصر من شجرة إمكانية الوصول، باستثناء العناصر القابلة للتركيز!
  • aria-live="polite" — يعلن عن التغييرات عندما يكون المستخدم غير مشغول
  • aria-live="assertive" — يعلن عنها فورًا، للأخطاء
  • aria-atomic="true" — يعلن عن المنطقة بأكملها عند حدوث تغيير
  • aria-busy — يمنع الإعلانات أثناء التحميل

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

هل درس «aria-hidden وaria-live» مجاني؟

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

ماذا ستتعلم في «aria-hidden وaria-live»؟

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

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

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

كم من الوقت يستغرق درس «aria-hidden وaria-live»؟

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

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

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

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

  1. متى تستخدمون ARIA بدلًا من HTML الأصلي
  2. role وbutton وalert وdialog وlandmark
  3. aria-label وaria-labelledby وaria-describedby
  4. aria-hidden وaria-live
← العودة إلى HTML Academy