المناطق الحية: aria-live وaria-atomic وaria-relevant
الإعلان عن التحديثات غير المتزامنة للتقنيات المساعدة
المناطق الحية: aria-live وaria-atomic وaria-relevant درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
ما المقصود بالمناطق الحية؟
المنطقة الحية هي قسم من الصفحة يُحدَّث محتواه ديناميكيًا. تراقب قارئات الشاشة المناطق الحية وتعلن عن التغييرات تلقائيًا، من دون أن ينقل المستخدم التركيز.
إنشاء منطقة حية
أضف aria-live إلى عنصر حاوية:
<!-- Polite: announce when user is idle -->
<div aria-live="polite" id="notifications"></div>
<!-- Inject text to announce: -->
<script>
document.getElementById('notifications').textContent = '5 new messages';
// Screen reader announces: '5 new messages' when user pauses
</script>مراجعة قيم aria-live
المستويات الثلاثة لـ aria-live:
off— لا توجد إعلانات، وهي القيمة الافتراضية للمناطق غير الحيةpolite— يُعلن عنها عندما يتوقف المستخدم مؤقتًا عن الكلامassertive— يُعلن عنها فورًا ويقاطع الكلام الحالي
aria-atomic بالتفصيل
تتحكم aria-atomic في المحتوى الذي يُعلن عنه عند تغيّر المحتوى:
<div aria-live="polite" aria-atomic="false"> <!-- default -->
Items in cart: <span id="count">3</span>
</div>
<!-- Only the changed span is announced: '4' -->
<div aria-live="polite" aria-atomic="true">
Items in cart: <span id="count">3</span>
</div>
<!-- The entire div is announced: 'Items in cart: 4' -->
<!-- aria-atomic="true" gives more context but is more verbose -->قيم aria-relevant
تحدد aria-relevant تغييرات DOM التي تؤدي إلى إطلاق الإعلانات:
<!-- Default: additions text -->
<div aria-live="polite" aria-relevant="additions text">
<!-- Announce removals too: -->
<div aria-live="polite" aria-relevant="removals">
<!-- Announce everything: -->
<div aria-live="polite" aria-relevant="all">
<!-- Values: additions, removals, text, all
'additions' = added nodes announced
'removals' = removed nodes announced
'text' = text content changes announced -->أدوار المناطق الحية المحددة مسبقًا
تضبط بعض الأدوار aria-live ضمنيًا:
role="alert"— aria-live="assertive" + aria-atomic="true"role="status"— aria-live="polite" + aria-atomic="true"role="log"— aria-live="polite"role="timer"— aria-live="off"role="marquee"— aria-live="off"
حالة التحميل باستخدام منطقة حية
أعلن عن حالتي بدء التحميل واكتماله:
<div role="status" aria-live="polite" aria-atomic="true" id="load-status">
<!-- empty initially -->
</div>
<script>
async function loadData() {
document.getElementById('load-status').textContent = 'Loading...';
const data = await fetchData();
renderResults(data);
document.getElementById('load-status').textContent =
`${data.length} results loaded.`;
}
</script>ملاحظات إرسال النموذج
منطقة حية لحالة إرسال النموذج:
<form id="contact-form" novalidate>
<input type="email" name="email">
<button type="submit">Subscribe</button>
</form>
<div role="status" aria-live="polite" id="form-status"></div>
<script>
form.addEventListener('submit', async (e) => {
e.preventDefault();
const status = document.getElementById('form-status');
status.textContent = 'Submitting...';
await submitForm(new FormData(form));
status.textContent = 'Thank you! You are now subscribed.';
});
</script>عدد نتائج البحث
أعلن عن نتائج البحث ديناميكيًا:
<label for="search">Search</label>
<input type="search" id="search">
<div role="status" aria-live="polite" aria-atomic="true" id="results-count"></div>
<div id="results"></div>
<script>
let debounceTimer;
search.addEventListener('input', () => {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
const results = filterResults(search.value);
renderResults(results);
document.getElementById('results-count').textContent =
`${results.length} results for "${search.value}"`;
}, 300);
});
</script>أنماط استخدام خاطئة للمناطق الحية
تجنب أخطاء المناطق الحية التالية:
- لا تنشئ المناطق الحية وتحذفها؛ اجعلها ثابتة وابدأ بمحتوى فارغ
- لا تضع المناطق الحية داخل مناطق aria-hidden
- لا تستخدم assertive للتحديثات الاعتيادية، لأنه يسبب إزعاجًا كبيرًا
- لا تعلن عن التحديثات بوتيرة متكررة جدًا؛ حدّد معدل تحديث أعداد نتائج البحث
اختبار المناطق الحية
كيفية اختبار إعلانات المناطق الحية:
- شغّل VoiceOver (على Mac: Cmd+F5) أو NVDA (على Windows: Ctrl+Alt+N)
- فعّل التحديث واستمع إلى الإعلان
- تحقق من التوقيت: ينتظر polite، بينما يقاطع assertive
- تحقق من أن axe DevTools لا يبلّغ عن مشكلات في المناطق الحية
تحقق سريع
ما الدور الذي يضبط ضمنيًا aria-live على assertive وaria-atomic على true؟
مراجعة: المناطق الحية
أساسيات المناطق الحية:
aria-live="polite"— انتظر حتى يتوقف المستخدم مؤقتًاaria-live="assertive"— قاطع الكلام فورًاaria-atomic="true"— أعلن عن المنطقة بأكملهاrole="alert"= assertive + atomic؛ role="status" = polite + atomic- أبقِ المناطق الحية ثابتة؛ امسح المحتوى ثم عيّن المحتوى الجديد
الأسئلة الشائعة
هل درس «المناطق الحية: aria-live وaria-atomic وaria-relevant» مجاني؟
نعم — نص درس «المناطق الحية: aria-live وaria-atomic وaria-relevant» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «المناطق الحية: aria-live وaria-atomic وaria-relevant»؟
الإعلان عن التحديثات غير المتزامنة للتقنيات المساعدة تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المناطق الحية: aria-live وaria-atomic وaria-relevant»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- aria-expanded وaria-controls لعناصر التبديل
- aria-selected وأنماط علامات التبويب
- المناطق الحية: aria-live وaria-atomic وaria-relevant
- الاختبار باستخدام قارئات الشاشة