بحث جذاب دسترسی پذیری (Accessibility) - خصوصا در وب

حتما دیدید توی بعضی پیاده رو ها توی خیابون یه سری رمپ وجود داره، یا روی دکمه های آسانسور برجستگی هایی هست، شبیه خط بریل. خب میتونید حدس بزنید که هدفشون چیه.وقتی یه محصول طراحی میشه باید فکر همه جاشو کرد. محصول باید برای همه قابل استفاده باشه. حتی افرادی با ناتوانی های فیزیکی مثل کور رنگی، کم بینایی، نابینایی، ناشنوایی و معلولیت های حرکتی.اعتبار تصویر از esri.comمتاسفانه این موضوع داخل کشور ما به اندازه کشور های دیگه پر اهمیت نیست و میبینیم که خیلی از محصولات و معابر برای افراد ناتوان مناسب سازی نشده. یادمه یه بار توی مترو میرداماد ۱ یا ۲ لاین آسانسور مخصوص افراد با صندلی چرخدار وجود داشت ولی همه مردم بعد از پیاده شدن از قطار هجوم میاوردن که سوار آسانسور بشن. از این بحث که بگذریم، ولی به عنوان یه برنامه نویس وب باید بدونیم که بهتره سعی کنیم وبسایت مون رو برای افرادی با این ناتوانی ها مناسب سازی کنیم.در کل این موضوع رو بهش میگیم Accessibility و بسیار موضوع پر اهمیتی هست. اینقدر پر اهمیت که اگر شما مالک یک محصول در کشوری مثل کانادا باشید ولی بحث Accessibility رو رعایت نکنید ملزم به پرداخت جریمه های سنگین هستید! مقایسه کنید که با اینجا که اصلا توجیه نیستن دوستان...خب یه مروری بکنم، پس کلا مناسب سازی محصول (چه فیزیکی و چه دیجیتالی) برای افرادی با ناتوانی هایی که اسم بردم رو بهش میگیم Accessibility یا دسترسی پذیری. حالا تو این مطلب میخوام توضیح بدم که چطوری میشه اندازش گرفت، چطوری میشه بهترش کرد و به چه چیزایی اصلا باید توجه کرد.مثالبرای اینکه یه سنس بهتری نسبت به بحث Accessibility داشته باشیم، چند تا نمونه از وب و دنیای واقعی براتون میارم:رمپ های توی بعضی پیاده رو ها برای عبور افراد با صندلی چرخ دارزیرنویس گذاشتن برای محتوای ویدئویی برای افراد ناشنواآسانسور هایی که بعضا توی پل های هوایی ازشون استفاده شدهافزایش کنتراست رنگ ها و یا هایلایت کردن بعضی جسم ها به رنگ های متفاوت برای افرادی که کور رنگ هستندصفحه خوان ها (Screen reader) برای افراد کم بینا و یا نابینادستیار های صوتی مثل siri و cortana برای افرادی که ناتوانی های جسمی دارنبزرگ کردن متن و نوشته های گوشی ها و اپلیکیشن ها که میبینیم که عموما برای افراد پیر در نظر گرفتنحتی شاید میشه میزان پیچ درب بطری های آب معدنی، زاویه قرار گرفتن دستگیره لیوان و رنگ آمیزی تابلو های اعلان و ... هم توی اینا گذاشت ولی چون این موضوعات که اشاره کردم بیشتر شاید بتونیم بگیم تجربه کاربری بیشتر توشون دخیل هست تا دسترسی پذیری، توی این دسته بندی قرار شون نمیدم.پس اگه دور و برمون رو نگاه کنیم میتونیم ببینیم که موضوع بسیار پر اهمیتی هست. ولی بحث ما بیشتر راجع به وب و فرانت اند هست و میخوایم ببینیم توی این Context این ماجرای Accessibility چطور اتفاق میوفته و چه استاندارد هایی داره.استاندارد WCAGتوی دنیای وب استاندارد هایی برای دسترسی پذیری بوجود اومده و در واقع اشاره دارن به Guideline هایی برای رعایت یک سری نکات. عبارت انگلیسیش میشه Web Content Accessibility Guidelines که به اختصار میشه WCAG که گرید های مختلفی هم داره.هدف ما به عنوان برنامه نویس های فرانت اند سادست: دنبال کردن این Guideline ها. جایی کار ما سخت میشه که اونا رو باید پیاده کنیم در عین اینکه به تجربه کاربری لطمه وارد نشه، همچنین به طرح اصلی وفادار باشه، مشکلی برای SEO پیش نیاد و در کل هر کاربری بتونه به راحت ترین شکل ممکن با اپلیکیشن ما کار کنه.گرید های مختلف WCAG اینا هستن: A و AA و AAA که یه طورایی میزان سختگیری شون رو تغییر میده، از A که میشه ساده ترین و تا AAA (تریپل A) که سختگیرانه ترین حالت هست. اگر اپلیکیشن شما امتیاز خوبی از Guideline های WCAG AAA دریافت کنه یعنی سرویس شما دسترسی پذیری بسیار بالایی داره و این اتفاق خیلی خوبیه.۴ اصل مهمبه طور کلی میتونیم موضوع Accessibility یا دسترسی پذیری رو به ۴ اصل مهم خرد کنیم، در مجموع با رعایت نکات این ۴ اصل میتونیم با اطمینان بیشتری بگیم که سرویس ما دسترس پذیری خوب داره:محسوس و مشهود بودن (Perceivable)عمل پذیر بودن (Operable)قابل فهم بودن (Understandable)و Robust بودن (واقعا نمیدونم اینو چی میشه معنی کرد به فارسی شاید بشه گفت قابل اتکا بودن)در ادامه با تک تک این مفاهیم به صورت جزیی آشنا میشیم که پایه های اصلی تمام اصول و تکنیک های دسترسی پذیری هستند.محسوس و مشهود بودن (Perceivable)اعتبار تصویر از بلاگ ahrefگذاشتن توضیحات برای تصاویر (چه از طریق alt و چه از طریق تگ های مربوط به تصویر مثل figure و figcaption). از این طریق مرورگر یا Screen reader میتونه محتوای تصویر رو طبق توضیحاتی که شما براش قرار دادید بخونه به جای اینکه اسم فایل که قطعا چیز بی معنی ای هست رو بخواد بخونه. علاوه بر اون به SEO سایت شما هم کمک میکنه.زیر نویس برای ویدئو هاقرار دادن زیرنویس برای ویدئو ها. (بیشتر مربوط به کانتنت میشه) این مورد هم کمک میکنه افراد ناشنوا راحت از محتوا استفاده کنن.نمونه پخش نسخه صوتی از سایت mediumتوضیحات متنی (یا حتی نسخه متنی) برای محتوا های صوتی. (بیشتر مربوط به کانتنت میشه) خیلی مطالب و مقاله هایی که توی ویرگول یا مدیوم هستند دارای یه نسخه صوتی کنارش هستند. ارائه محتوا به طوری که از نظر مفهومی مطابق با منظورش باشه، یعنی چی؟ یعنی اینکه مثلا اگر شما روی صفحه میخوای یه دکمه داشته باشی که کاربر روش کلیک کنه از المان button استفاده کنی نه اینکه یه div بذاری و بهش بدی. از این نمونه ها خیلی زیاده. به طور کل میشه گفت همون Semantic HTML رو انجام بدیم.همینطور که توی تصویر مشخصه متن های استفاده شده اصلا کنتراست خوبی ندارند. استفاده از رنگ هایی که کنتراست بالایی دارند. استاندارد های WCAG AA که میزان مینیمم رو عدد ۳ و AAA که مینیمم ۴.۵ هست رو میتونید ببینید. البته ابزار گوگل بهتون برای انتخاب رنگ هم میتونه کمک کنه ولی معمولا این تصمیمات باید تو مرحله دیزاین درنظر گرفته بشه. حتی بعضی وقت ها دیدم که Mode هایی برای افراد کم بینا و کور رنگ هم در نظر میگیرن. مثال زیر رو از دنیای بازی ها میزنم:بازی God of War Ragnarok که به عنوان بهترین بازی در زمینه Accessibility انتخاب شد - میتونید رنگ ها رو ببینید، البته محدود به این ویژگی نبود و کلی چیز دیگه هم داشتاز این بخش که بگذریم میرسیم به مورد بعدی:عمل پذیر بودن (Operable)این مورد بیشتر به این اشاره داره که اجزای سیستم کار کنن و درست کار کنن. مثال خیلی ساده اش میشه همین که شما روی صفحه که هستید، از طریق کی‌برد دکمه Tab که میزنید یه هایلایت میاره دور اون المان که الان حالت focus داره و با دکمه space شما میتونید عمل کلیک رو انجام بدید. یعنی اگر یک نفر با یک ناتوانی خاص باشه، میتونه به کمک دکمه tab روی المان های مختلف focus کنه، از طریق screen reader براش خونده بشه که روی چه المانی هست، بعد از اطمینان با دکمه space کلیک کنه روش.برای اینکه این هایلایت صورت بگیره توی CSS ما پراپرتی به نام outline داریم:حالتی که روی متن ویدئو focus کردمحالتی که روی دکمه focus کردممیتونیم به کمک همون outline که گفتم استایل این حالت رو عوض کنیم، مثلا dashed border باشه یا هر رنگی دلمون میخواد. ولی احتمالا خیلی اوقات شما کلا این پراپرتی رو none ست کردید! خودتونم دلیلش رو میدونید. (چون به نظر میاد که طرح رو داره زشت میکنه)این شد استایل دادنش، از اون مهم تر باید توی html به کمک tabindex هم ترتیب اش رو مشخص کنید که با چه ترتیبی بعد از زدن دکمه tab روی اون المان focus بشه و حتی با عدد منفی کاری کنید که اصلا قابل انتخاب شدن با tab نباشه.مهمه که همه المان ها هم استایل حالت focus داشته باشن علاوه بر اینکه outline داشته باشن.این اسلایدر قابلیت pause دارهاز طرف دیگه برای المان هایی که حالت کروسل یا اسلایدر دارن، سرعت تغییر کردن توشون به اندازه کافی باشه. اگر قابلیت pause هم داشته باشه که خیلی بهتر. حالا به هر نحو، مثلا کاربر بیاد روی همون اسلاید وایسه، اسلایدر همونجا متوقف بشه. اینطوری به کاربرانی که شاید سرعت خوندنشون پایین تره اجازه میدیم که بتونن راحت تر از محتوا استفاده کنن.یه تبلیغ واقعا بدحالا نمیدونم این گیف رو شما با تکرار میبینید یا نه (loop رو داره یا نه) ولی من اینو از سایت ورزش ۳ برداشتم، مشکلی که داره اینه که انقد محتوا فلش فلش میشه و پرش داره که کاربر رو عصبی میکنه. باید از استفاده از این شکل محتوا هم پرهیز بشه تا جای ممکن. اینو مطمئن نیستم ولی شنیدم که حتی این شکل محتوا میتونه یکی از عوامل ایجاد حملات سرع هم بشه.قابل فهم بودن (Understandable)هر المانی توی صحفه باید با یک هدف مشخص و درست قرار گرفته باشه و نشان دهنده اکشنی باشه که انجام میده. این نمونه مخصوصا توی دکمه ها و آیکان ها خییلی پر اهمیته. آیکان ها تا جای ممکن باید نشون بدن چه منظوری دارند.همینطور المان ها باید به صورت درست چیده بشن که برای کاربرا گنگ نباشن. موضوع مهم دیگه ارائه توضیحات کافی و لازم برای فرم هاست:یکی ار بهترین فرم ها، کلا فرم های گوگلهمیتونیم ببینیم که فرم خیلی شفاف و هدفش معلومه، کنتراست ها مناسبه، حالت focus و عملیات هایی که توسط کی‌برد انجام میشه خیلی تر و تمیزه و input اصلی تو صفحه هم label مناسب داره و در آخر suggestion مرتبط و خوبی رو خود chrome داره انجام میده که کار رو به سادگی تمام میکنه.بحث راجع به این موضوع میتونه خیییلی مفصل باشه ولی مطلب خیلی خیلی داره طولانی میشه و هنوز کلی چیز دیگه مونده. راجع به این موضوع تا دلتون بخواد مطلب و ویدئو و مقاله هست که توصیه میکنم حتما دنبال کنید.برای اینکه چیزی از قلم نیوفته یه سری نکته که شاید یادم رفته باشه هم اینجا اشاره میکنم:سعی کنید پراپرتی های Accessibility رو درست ازشون استفاده کنید مثل aria- ها و یا tabindex ها.یادتون نره از کی‌برد باید خیلی درست و بهینه استفاده کنید، نیازی نیست همه چیز قابل focus شدن باشه از ابزار هاتون هوشمندانه استفاده کنیدبرای همه المان ها تا جایی که میتونید از تگ های semantic استفاده کنید، مثلا اگه منو دارید nav بذارید یا اگه دکمه است button یا عنوان هست از تگ های h.در حالت هایی که المان های منطقی برای اونکار وجود نداشت به کمک role ایجادشون کنید.حتما به کمک ابزار های تست از کیفیت کارتون مطمین بشین. بعضی سرویس ها هستند که میتونن بیان این تست رو برای شما انجام بدن و حتی مشکلات رو هم براتون هایلایت میکنن.چطوری تست اش کنیم؟خب شما همه این کار ها رو که گفتیم هم انجام بدین، باز هم در نهایت باید بتونید تست شون کنید که مطمئن بشید کیفیت کافی رو داره. من یه سری از ابزار های معروف رو براتون معرفی میکنم. شما به نظرم با هر کدوم راحت تر هستین کار کنید.ابزار گوگل Lighthouseابزاری هست که اگر شما مرورگر کروم داشته باشید، روی خودش هست و نیاز به نصب چیزی نیست. علاوه بر اینکه Accessibility رو اندازه گیری میکنه تو موارد دیگه هم کمک تون میکنه. یه امتیازی هم بهتون میده. من خودم بیشتر از همین استفاده میکنم ولی بعضی های دیگه هم هستند که خوبن:ابزار WAVE - سرویسی هست که بهتون کمک میکنه میزان Accessibility رو اندازه گیری کنید، مشکلات رو بهتون میگه و روی مرورگر های کروم و فایرفاکس به صورت extension نصب میشهاکستنشن AXE - میتونید روی کروم نصبش کنید استفاده کنید، من نکردم تاحالاسایت ACheker - یکی از فکر کنم قدیمی ترینا باشه، به درد سایت هایی میخوره که الان روی پروداکشن هستند بیشتر چون تست لوکال نمیتونه انجام بده. خوبیش اینه میتونید میزان گرید WCAG رو هم تعیین کنید. یعنی مثلا روی AA تست بشه یا AAA یه نسبت به همونا بهتون خطا ها رو نشون بده.علاوه بر این ابزار ها، کلی کار دیگه هم میشه به صورت میدانی انجام داد، مثلا اگرررر بتونید اپلیکیشن تون رو برای افراد دارای ناتوانی بفرستید و ببینید چطور باهاش کار میکنن، چه مشکلاتی برمیخورن، چه پیشنهاد هایی میدن. البته این یه قسمت خوبیش باز هم مربوط میشه به تیم پروداکت ولی بهرحال...حتی میتونید Survey بذارید برای اینکار، البته من ندیدم خیلی این اتفاقا توی دنیای وب بیوفته ولی بهرحال چیزایی هست که میتونید در نظرتون داشته باشید.سعی کردم تا جایی که میشه موضوعات رو کامل و شفاف توضیح بدم، اگر موردی بود که احساس کردید از قلم افتاده یا بهش اشاره نشده، یا اشتباه گفتم حتما بهم بگید. همچنین میتونید از طریق لینکدین باهام در ارتباط باشید.