بستن

جلسه پنجاه و هفتم: آموزش کامل اتریبیوت ARIA در HTML

اتریبیوت aria

به دوره حرفه‌ای آموزشHTML در آوای وب خوش اومدی! اگه دنبال یه راهنمای کامل برای اتریبیوت ARIA در HTML هستی، جای درستی اومدی! این اتریبیوت‌ها بهت کمک می‌کنن وب‌سایتت رو برای همه کاربرا، از جمله افراد دارای معلولیت، در دسترس کنی و همزمان سئوی سایتت رو به اوج برسونی. تو این مقاله، با تمرکز روی سئو و دسترسی‌پذیری، تمام حالت‌ها و ویژگی‌های ARIA رو با مثال‌های کاربردی و ترفندهای حرفه‌ای برات توضیح می‌دیم. هیچ‌چیز از قلم نمی‌افته! آماده‌ای؟ بزن بریم!

🏷️ چرا اتریبیوت ARIA مهمه؟

تصور کن کاربری داری که نابینا یا کم‌بیناست و فقط با صفحه‌خوان (Screen Reader) وب‌گردی می‌کنه. یا کاربری که نمی‌تونه با ماوس کار کنه و فقط از کیبورد استفاده می‌کنه. اینجاست که اتریبیوت aria وارد عمل میشه.

🔹اتریبیوت ARIA کمک می‌کنه:

  • اپلیکیشن‌های تحت وب (SPA، فرم‌ها، منوهای داینامیک) برای همه قابل استفاده باشن.
  • نقش و وضعیت عناصر برای صفحه‌خوان‌ها مشخص بشه.
  • تجربه کاربری عادلانه‌تری برای همه فراهم بشه.

به زبان ساده: اتریبیوت‌ ARIA به مرورگر و ابزارهای کمکی می‌گن «این عنصر چی هست» و «الان تو چه وضعیتی قرار داره».

💡اتریبیوت ARIA دقیقاً چیه؟

ARIA مجموعه‌ای از اتریبیوت‌ها هست که می‌تونی به HTML اضافه کنی. این اتریبیوت‌ها برای کاربر عادی شاید تغییری در ظاهر ایجاد نکنن، اما برای کاربرانی که از فناوری‌های کمکی استفاده می‌کنن، خیلی حیاتی هستن.

طبق استاندارد W3C WAI-ARIA، این اتریبیوت‌ها به سه دسته تقسیم میشن:

  1. Role → نقش عنصر رو مشخص می‌کنه (مثل دکمه، منو، هشدار)
  2. State → وضعیت فعلی عنصر رو توضیح می‌ده (مثل فعال/غیرفعال بودن)
  3. Property → ویژگی یا خصوصیات عنصر رو معرفی می‌کنه (مثل برچسب جایگزین)

✨ حالت‌ها و ویژگی‌های ARIA چیه و چرا مهمه؟

اتریبیوت‌های ARIA (Accessible Rich Internet Applications) به سه دسته تقسیم می‌شن: نقش‌ها (Roles)، حالت‌ها (States)، و ویژگی‌ها (Properties). تو این مقاله، چون نقش‌ها رو کامل در جلسه بعدی پوشش خواهیم داد، تمرکزمون روی حالت‌ها و ویژگی‌هاست. اتریبیوت ARIA وضعیت یا اطلاعات اضافی عناصر HTML رو برای فناوری‌های کمکی (مثل صفحه‌خوان‌ها) مشخص می‌کنن تا کاربرایی با نیازهای خاص (مثل نابینایی یا مشکلات حرکتی) بتونن با سایت تعامل کنن.

  • حالت‌ها (States): وضعیت فعلی یه عنصر رو نشون می‌دن (مثل باز/بسته، انتخاب‌شده/نشده).
  • ویژگی‌ها (Properties): توضیحات یا روابط بین عناصر رو تعریف می‌کنن (مثل برچسب یا عنصر کنترل‌شده).

✨ چرا مهمه؟

  • پشتیبانی: همه مرورگرهای مدرن و ابزارهای کمکی (مثل NVDA، VoiceOver) از ARIA پشتیبانی می‌کنن.
  • دسترسی‌پذیری: صفحه‌خوان‌ها با این اتریبیوت‌ها محتوای داینامیک و روابط عناصر رو بهتر منتقل می‌کنن.
  • سئوی غیرمستقیم: بهبود تجربه کاربری (UX) نرخ پرش رو کم می‌کنه و سیگنال مثبتی برای گوگله.
  • جذب مخاطب: سایت‌های در دسترس برای کاربرای بیشتری جذابه.

💡 لیست کامل حالت‌ها و ویژگی‌های ARIA


اینجا تمام حالت‌ها و ویژگی‌های ARIA (به جز نقش‌ها) رو با توضیح و مثال آوردیم. هیچ‌چیز از قلم نیفتاده!

✨ حالت‌ها (States)

حالت‌ها وضعیت فعلی یه عنصر رو نشون می‌دن و معمولاً با جاوااسکریپت به‌روزرسانی می‌شن.

اتریبیوتتوضیحمقادیر معتبرکاربرد
aria-checkedنشون می‌ده یه چک‌باکس، دکمه رادیویی یا آیتم مشابه انتخاب‌شده‌ست یا نهtrue, false, mixedبرای چک‌باکس‌ها یا منوهای انتخابی
aria-disabledمشخص می‌کنه یه عنصر غیرفعالهtrue, falseبرای دکمه‌ها یا ورودی‌های غیرقابل کلیک
aria-expandedنشون می‌ده یه عنصر (مثل منو یا آکاردئون) باز یا بسته‌ستtrue, false, undefinedبرای منوهای بازشونده یا آکاردئون‌ها
aria-hiddenمشخص می‌کنه یه عنصر برای فناوری‌های کمکی مخفیهtrue, falseبرای مخفی کردن محتوای غیرضروری از صفحه‌خوان‌ها
aria-invalidنشون می‌ده ورودی کاربر تو فرم معتبر نیستtrue, false, grammar, spellingبرای اعتبارسنجی فرم‌ها
aria-pressedنشون می‌ده یه دکمه تو حالت فشرده (تغییر وضعیت) هست یا نهtrue, false, mixedبرای دکمه‌های تغییر وضعیت (مثل روشن/خاموش)
aria-requiredمشخص می‌کنه یه فیلد تو فرم اجباریهtrue, falseبرای فیلدهای اجباری فرم
aria-selectedنشون می‌ده یه آیتم (مثل تب یا گزینه) انتخاب‌شده‌ستtrue, false, undefinedبرای تب‌ها یا لیست‌های انتخابی

✨ ویژگی‌ها (Properties)

ویژگی‌ها توضیحات یا روابط بین عناصر رو تعریف می‌کنن و معمولاً ثابت هستن.

اتریبیوتتوضیحمقادیر معتبرکاربرد
aria-activedescendantمشخص می‌کنه کدوم زیرعنصر تو یه ویجت ترکیبی (مثل لیست) فعالهآیدی عنصرمدیریت فوکوس تو لیست‌ها یا منوها
aria-atomicتعیین می‌کنه تغییرات یه منطقه داینامیک کامل به صفحه‌خوان اعلام بشه یا نهtrue, falseمناطق داینامیک مثل چت
aria-autocompleteنوع تکمیل خودکار ورودیinline, list, both, noneفیلدهای جستجو یا کادرهای کشویی
aria-braillelabelبرچسب متنی برای نمایشگرهای بریلمتننمایشگرهای بریل
aria-brailleroledescriptionتوضیح نقش عنصر برای نمایشگرهای بریلمتنتوضیحات سفارشی در بریل
aria-busyنشون می‌ده یه عنصر در حال بارگذاری یا آپدیتهtrue, falseمحتوای داینامیک در حال لود
aria-controlsمشخص می‌کنه یه عنصر کدوم بخش رو کنترل می‌کنهآیدی عنصرتب‌ها، آکاردئون‌ها، منوها
aria-currentنشون می‌ده آیتم تو مجموعه فعالهpage, step, location, date, time, true, falseمنوهای ناوبری یا مراحل فرم
aria-describedbyبه یه عنصر با توضیحات اضافی اشاره می‌کنهآیدی عنصرتوضیحات فرم یا خطاها
aria-detailsبه یه عنصر با اطلاعات مفصل اشاره می‌کنهآیدی عنصرتصاویر یا نمودارها
aria-dropeffectنوع افکت درگ‌انددراپcopy, execute, link, move, none, popupرابط‌های درگ‌انددراپ
aria-errormessageبه پیام خطای مرتبط با ورودی اشاره می‌کنهآیدی عنصراعتبارسنجی فرم
aria-flowtoمسیر ناوبری پیشنهادی برای صفحه‌خوانآیدی عنصرهدایت محتوای پیچیده
aria-grabbedنشون می‌ده یه عنصر در درگ‌انددراپ انتخاب‌شده‌ستtrue, false, undefinedرابط‌های درگ‌انددراپ
aria-haspopupنشون می‌ده عنصر یه منو/دیالوگ بازشونده دارهtrue, false, menu, listbox, tree, grid, dialogمنوهای کشویی یا دیالوگ‌ها
aria-labelبرچسب متنی مستقیم برای عنصرمتنآیکون‌ها یا عناصر بدون متن بصری
aria-labelledbyبه یه عنصر با برچسب متنی اشاره می‌کنهآیدی عنصرتب‌ها، دکمه‌ها با توضیحات خارجی
aria-levelسطح سلسله‌مراتب عنصر (مثل تیتر)عددتیترهای سفارشی
aria-liveنحوه اعلام تغییرات داینامیکoff, polite, assertiveهشدارها یا چت‌ها
aria-modalنشون می‌ده یه دیالوگ مدالهtrue, falseپنجره‌های محاوره‌ای
aria-multilineمشخص می‌کنه ورودی متنی چندخطیهtrue, falseتکست‌ایریا یا ورودی بزرگ
aria-multiselectableنشون می‌ده لیست چند آیتم قابل انتخاب دارهtrue, falseلیست‌های چندانتخابی
aria-orientationجهت ویجت رو مشخص می‌کنهhorizontal, vertical, undefinedاسکرول‌بارها یا اسلایدرها
aria-placeholderمتن پیش‌فرض ورودیمتنفیلدهای ورودی بدون placeholder
aria-posinsetموقعیت آیتم در مجموعهعددلیست‌ها یا منوها
aria-readonlyنشون می‌ده ورودی فقط خوندنیهtrue, falseفیلدهای غیرقابل ویرایش
aria-relevantنوع تغییرات منطقه داینامیک که باید اعلام بشهadditions, removals, text, allچت‌ها یا فیدهای خبری
aria-roledescriptionتوضیح سفارشی برای نقش عنصرمتنتوضیحات کاربرپسندتر
aria-rowcountتعداد کل ردیف‌ها در جدول/گریدعددجداول بزرگ
aria-rowindexشماره ردیف عنصر در جدولعددجداول پیمایشی
aria-rowspanتعداد ردیف‌های تحت پوشش سلولعددجداول پیچیده
aria-setsizeتعداد کل آیتم‌ها در مجموعهعددلیست‌ها یا منوها
aria-sortنحوه مرتب‌سازی ستون جدولascending, descending, none, otherجداول قابل مرتب‌سازی
aria-valuemaxحداکثر مقدار ویجت عددیعدداسلایدرها یا ورودی‌های عددی
aria-valueminحداقل مقدار ویجت عددیعدداسلایدرها
aria-valuenowمقدار فعلی ویجت عددیعدداسلایدرها یا progressbar
aria-valuetextتوضیح متنی برای مقدار عددیمتنتوضیحات کاربرپسندتر

💡 چطور اتریبیوت ARIA به سئو کمک می‌کنه؟

این اتریبیوت‌ها به‌صورت غیرمستقیم روی سئو تاثیر می‌ذارن:

  • بهبود UX: توضیحات واضح و تعامل داینامیک باعث می‌شه کاربرا بیشتر تو صفحه بمونن.
  • دسترسی‌پذیری: گوگل سایت‌های در دسترس رو به‌عنوان منابع باکیفیت می‌شناسه.
  • ساختار معنایی: اتریبیوت‌هایی مثل aria-label و aria-describedby به ایندکس بهتر محتوا کمک می‌کنن.
  • جذب مخاطب: سایت‌های در دسترس ترافیک بیشتری از کاربرای متنوع جذب می‌کنن.

📌 هشدار: استفاده نادرست (مثل aria-label غیرضروری یا آیدی‌های اشتباه) می‌تونه باعث خطای دسترسی‌پذیری بشه.

📝 مثال‌های سئو محور: اتریبیوت ARIA تو عمل

1. فرم با اعتبارسنجی و aria-invalidaria-errormessage

<form>
    <label for="email">ایمیل:</label>
    <input id="email" type="email" aria-required="true" aria-invalid="true" aria-errormessage="error">
    <span id="error">ایمیل نامعتبر</span>
    <button type="submit">ارسال</button>
</form>

چرا سئو محوره؟

  • aria-invalid و aria-errormessage خطاها رو به کاربرا و صفحه‌خوان‌ها واضح می‌کنن.
  • فرم‌های در دسترس تعامل کاربر رو بالا می‌برن.

آکاردئون با aria-expandedaria-controls

<button aria-expanded="false" aria-controls="content">نمایش محتوا</button>
<div id="content" hidden>محتوای آکاردئون</div>

چرا سئو محوره؟

  • aria-expanded و aria-controls تعامل داینامیک رو برای صفحه‌خوان‌ها واضح می‌کنن.
  • جاوااسکریپت بهینه سرعت صفحه رو حفظ می‌کنه.

3. هشدار داینامیک با aria-livearia-atomic

<div aria-live="assertive" aria-atomic="true">
    <p>خطا: لطفاً فرم را کامل کنید.</p>
</div>
<script>
    setTimeout(() => {
        document.querySelector('[aria-live]').innerHTML = '<p>فرم ارسال شد!</p>';
    }, 3000);
</script>

چرا سئو محوره؟

  • aria-live و aria-atomic تغییرات رو فوراً به صفحه‌خوان‌ها اعلام می‌کنن.
  • هشدارهای واضح تعامل کاربر رو بالا می‌بره.

❓ پرسش‌های متداول (FAQ)

۱. آیا اتریبیوت ARIA روی سئو تاثیر مستقیم داره؟
نه، ولی تجربه کاربری بهتر → تاثیر غیرمستقیم روی سئو.

۲. میشه فقط با اتریبیوت ARIA کار کرد و تگ‌های استاندارد رو کنار گذاشت؟
خیر. اولویت با HTML معنایی هست. ARIA فقط مکمل هست.

۳. فرق aria-label و aria-labelledby چیه؟

  • aria-label → متن توصیفی مستقیم
  • aria-labelledby → متن توصیفی توسط عنصر دیگه

🎯 پروژه عملی: یک منوی دسترس‌پذیر با اتریبیوت ARIA بساز

ازت می‌خوام یه منوی کشویی ساده طراحی کنی که:

  • با دکمه باز و بسته بشه.
  • از aria-expanded برای وضعیت منو استفاده کنه.
  • از aria-controls برای اتصال دکمه به منو استفاده کنه.
  • برای هر آیتم منو برچسب (aria-label) تعریف بشه.

💡 نکته: لازم نیست ظاهر رو پیچیده کنی، تمرکز روی استفاده درست از اتریبیوت ARIA باشه. در ضمن، یادت نره اگه مبتدی هستی، کدات رو تو W3C Validator چک کنی و مطمئن شی درست نوشتی.

🏁 جمع‌بندی: وب‌سایتت رو با اتریبیوت ARIA بترکون!

اتریبیوت‌های ARIA در HTML یکی از کلیدهای مهم برای ساختن وب‌سایت‌های دسترس‌پذیر هستن.

  • نباید جایگزین تگ‌های HTML بشه، بلکه باید مکملشون باشه.
  • ARIA کمک می‌کنه عناصر داینامیک برای همه کاربران قابل درک باشن.
  • نقش (role)، وضعیت (state) و ویژگی‌ها (property) رو مشخص می‌کنه.

💬 ایده‌هات رو فریاد بزن!

نظرت درباره اتریبیوت ARIA چیه؟ دلت می‌خواد چه چیزی به این آموزش اضافه کنیم؟ سوالی تو ذهنت مونده؟ تو نظرات برامون بگو! تیم حرفه‌ای پشتیبانی با جون و دل جوابت رو می‌ده!

شهرام نجفی

شهرام نجفی

شهرام نجفی — بیش از ۱۵ سال طراحی و توسعهٔ وب به‌صورت فریلنس. قالب اختصاصی آوای وب را از صفر نوشته‌ام. مطالب این سایت را بر پایهٔ مستندات رسمی MDN و WHATWG می‌نویسم و قبل از انتشار در مرورگرهای واقعی تست می‌کنم. نمونه‌کارهایم در shahramnajafi.com است.

نظر شما در این مورد چیه؟