این متن هنوز کامل نیست و در حال بروزرسانی است. نسخهی نهایی پس از تکمیل در دسترس قرار خواهد گرفت.
دسترسیپذیری ساختاری برای همه کاربران
در عصر دیجیتال، دسترسیپذیری (Accessibility) به عنوان یکی از اصلیترین اصول توسعه وب مدرن، بیش از یک ویژگی فنی، به یک حق اساسی برای تمام کاربران تبدیل شده است. این فصل به بررسی جامع و تخصصی چهار اصل اصلی WCAG (Web Content Accessibility Guidelines) نقش صفات و نقشهای ARIA، و راهکارهای ناوبری بدون ماوس میپردازد.
هدف این فصل، ایجاد صفحات وبی که هر کاربر - چه نابینا، چه ناشنوا، چه دارای محدودیت حرکتی یا شناختی - بتواند به راحتی به محتوا دسترسی داشته باشد.
11.1 چهار اصل اصلی WCAG: بنیان دسترسیپذیری
11.1.1 قابلادراک (Perceivable)
کاربران باید بتوانند تمامی محتوا را از طریق حواس خود درک کنند. شامل:
- متن جایگزین برای تصاویر (
alt)
- توضیحات برای ویدئوها (زیرنویس، توصیف)
- تفاوت کافی در رنگ (حداقل 4.5:1 برای متن)
- محتوای غیرتصویری (مانند اسکرول، انیمیشن) باید قابل دسترسی باشد
<img src="chart.png" alt="نمودار رشد فروش در سال ۱۴۰۳">
<video controls>
<track kind="captions" src="subtitles.vtt" srclang="fa" label="زیرنویس فارسی">
</video>
alt برای تصاویر مهم و track برای ویدئوها به کاربران نابینا و گفتاری کمک میکنند. استفاده از aria-label برای اشیاء غیرقابل دسترسی (مثل آیکونها) ضروری است.
11.1.2 قابلعمل (Operable)
کاربران باید بتوانند به تمامی عناصر تعاملی دسترسی داشته باشند، حتی بدون ماوس. شامل:
- دسترسی با کیبورد (Tab - Enter - Arrow Keys)
- زمان کافی برای عمل (نه محدودیت زمانی برای کاربران ناهمخوان)
- جلوگیری از انگیزشهای ناخواسته (مثلاً انیمیشنهای مدام)
<button tabindex="0">اعمال تغییرات</button>
<a href="#content" class="skip-link">پرش به محتوا</a>
- tabindex="0" برای فعالسازی دسترسی با Tab.
- tabindex="-1" برای غیرفعال کردن از دسترسی (مثلاً در دکمههای موقت).
11.1.3 قابلفهم (Understandable)
محتوا باید به روشی واضح، منطقی و پیشبینیپذیر ارائه شود.
- متن ساده و قابل فهم
- پیشبینیپذیری رفتار (مثلاً لینکها در هر جا یکسان عمل کنند)
- راهنمایی در صورت خطای ورودی
- استفاده از عناصر معنایی (مثل
<nav> - <main>)
<label for="email">ایمیل:</label>
<input type="email" id="email" name="email" required aria-invalid="true">
<p id="error-email" role="alert">لطفاً یک ایمیل معتبر وارد کنید.</p>
- aria-invalid="true" و role="alert" به Screen Readers کمک میکند تا خطا را به صورت فوری اعلام کند.
- استفاده از aria-live="polite" برای اعلانهای غیرفوری (مثلاً "فرم ارسال شد").
11.1.4 مقاوم (Robust)
محتوا باید با تمام ابزارهای دسترسی و مرورگرهای مختلف کار کند.
- سازگاری با نرمافزارهای خواننده متن (Screen Readers)
- سازگاری با ابزارهای تغییر تنظیمات (مثلاً بزرگنمایی)
- استفاده از استانداردهای HTML و ARIA به درستی
<div role="region" aria-label="منوی اصلی">
<ul>
<li><a href="/">صفحه اصلی</a></li>
<li><a href="/about">درباره ما</a></li>
</ul>
</div>
- استفاده از role و aria-* به صورت صحیح، به ابزارهای دسترسی کمک میکند تا ساختار صفحه را به درستی تشخیص دهد.
- از role="application" فقط در موارد خاص (مثل ورودی پیچیده) استفاده کنید.
11.2 نقشها و صفات ARIA: تقویت ساختار معنایی
11.2.1 نقشهای ARIA (Roles)
- ARIA (Accessible Rich Internet Applications) به عنوان پل بین HTML و ابزارهای دسترسی عمل میکند.
- نقشها مشخص میکنند که یک عنصر چه نوع عملکردی دارد.
| role="navigation" |
منوی ناوبری |
| role="main" |
محتوای اصلی صفحه |
| role="button" |
دکمه مجازی |
| role="alert" |
پیام هشدار |
| role="dialog" |
پنجره مودال |
| role="listbox" |
لیست قابل انتخاب |
<div role="alert" aria-live="assertive">
فرم با موفقیت ارسال شد!
</div>
- aria-live="polite" برای اعلانهای غیرفوری (مثلاً "آپدیت شد")
- aria-live="assertive" برای اعلانهای فوری (مثلاً "خطای امنیتی")
11.2.2 ویژگیهای ARIA (Properties & States)
این ویژگیها وضعیت فعلی یک عنصر را مشخص میکنند.
| aria-label |
توضیح مختصر بدون نمایش |
| aria-labelledby |
ارجاع به یک یا چند عنوان |
| aria-describedby |
توضیحات جانبی |
| aria-expanded |
آیا بخش باز است؟ |
| aria-checked |
آیا گزینه انتخاب شده؟ |
| aria-hidden |
مخفی کردن از دسترسی |
<button
aria-expanded="false"
aria-controls="menu-content"
onclick="toggleMenu()"
>
منو
</button>
<div id="menu-content" hidden>
<ul>
<li><a href="#">اولین مورد</a></li>
<li><a href="#">دومین مورد</a></li>
</ul>
</div>
- استفاده از aria-controls برای ارتباط بین دکمه و محتوای مرتبط.
- aria-expanded باید به صورت دینامیک تغییر کند (با JavaScript).
11.3 ناوبری بدون ماوس (کیبوردی): دسترسی برای تمام کاربران
11.3.1 tabindex: مدیریت ترتیب دسترسی
tabindex ترتیب ورود کاربر به عناصر را تعیین میکند. مقادیر:
- 0: اضافه به ترتیب طبیعی DOM
- 1-: غیرقابل دسترسی با Tab
- 1, 2, ...: ترتیب دستی (نامناسب)
<a href="#content" tabindex="0">پرش به محتوا</a>
از tabindex با مقادیر بالای 0 خودداری کنید - این کار باعث سردرگمی میشود. بهتر است از ترتیب طبیعی DOM استفاده کنید.
11.3.2 Skip Links (لینکهای پرش): جلوگیری از گمشدن در منوی اصلی
این لینکها به کاربران کمک میکنند تا مستقیماً به محتوای اصلی برسند و از گذر از منوی اصلی جلوگیری کنند.
<a href="#main-content" class="skip-link">پرش به محتوای اصلی</a>
<main id="main-content">
<h1>محتوای اصلی صفحه</h1>
<p>این محتوا بلافاصله بعد از پرش نمایش داده میشود.</p>
</main>
.skip-link {
position: absolute;
top: -40px;
left: 0;
background: #000;
color: #fff;
padding: 8px;
text-decoration: none;
z-index: 999;
}
.skip-link:focus {
top: 0;
}
focus برای نمایش لینک وقتی کاربر به آن رسیده است. این لینک فقط در زمان تمرکز نمایش داده میشود.
11.3.3 گردش در محتوا با کیبورد
11.3.3 گردش در محتوا با کیبورد
- Tab به عناصر بروند
- Enter روی دکمهها کلیک کنند
- Space روی گزینهها انتخاب کنند
- Arrow Keys در لیستها، منوها، و جداول حرکت کنند
- Esc پنجرهها یا مودالها را ببندند
<ul role="menubar">
<li role="none">
<a href="#" role="menuitem">منوی اول</a>
</li>
<li role="none">
<a href="#" role="menuitem">منوی دوم</a>
</li>
</ul>
استفاده از role="menuitem" به Screen Readers کمک میکند تا ساختار منو را تشخیص دهد. کلیدهای Enter و Space برای انتخاب گزینه.
یک صفحه وب موفق، فقط با زیبایی ظاهری نیست بلکه با احترام به تمام کاربران، استفاده از ARIA، مدیریت دسترسی با کیبورد، و پایبندی به استانداردهای WCAG ساخته میشود. این فصل پایهای برای نوشتن محتوای دسترسیپذیر، انسانی و متناسب با استانداردهای جهانی است.
بعدی
قبلی