راهنمای جامع برای پیادهسازی tooltipهای قابل دسترس با استفاده از حالتهای hover و focus، برای تضمین کارایی برای همه کاربران، از جمله افراد دارای معلولیت.
پیادهسازی Tooltip: اطلاعات قابل دسترس با Hover و Focus
Tooltipها پیامهای راهنمای کوچک و متنی هستند که وقتی کاربر نشانگر ماوس خود را روی یک عنصر نگه میدارد یا روی آن فوکوس میکند، ظاهر میشوند. آنها میتوانند اطلاعات اضافی ارائه دهند، هدف یک عنصر را روشن کنند یا نکاتی در مورد نحوه استفاده از یک ویژگی ارائه دهند. با این حال، اگر tooltipها به درستی پیادهسازی نشوند، به راحتی میتوانند به کابوسهای دسترسپذیری تبدیل شوند. این راهنما بهترین شیوهها را برای ایجاد tooltipهایی که برای همه، از جمله کاربران دارای معلولیت، قابل استفاده باشند، تشریح میکند.
چرا دسترسپذیری برای Tooltipها اهمیت دارد
دسترسپذیری فقط مربوط به انطباق با استانداردها نیست؛ بلکه به معنای ایجاد تجربه کاربری بهتر برای همه است. وقتی tooltipها قابل دسترس نباشند، میتوانند کاربرانی را که به فناوریهای کمکی مانند صفحهخوانها، ناوبری با صفحهکلید یا ورودی صوتی تکیه میکنند، محروم کنند. این سناریوها را در نظر بگیرید:
- کاربران صفحهخوان: اگر یک tooltip به درستی نشانهگذاری نشده باشد، ممکن است یک صفحهخوان حضور یا محتوای آن را اعلام نکند.
- کاربران صفحهکلید: اگر یک tooltip فقط با نگه داشتن ماوس (hover) ظاهر شود، کاربران صفحهکلید قادر به دسترسی به آن نخواهند بود.
- کاربران دارای اختلالات حرکتی: حرکات دقیق ماوس که برای تعاملات hover لازم است، میتواند چالشبرانگیز یا غیرممکن باشد.
- کاربران دارای ناتوانیهای شناختی: یک tooltip با زمانبندی نامناسب یا گیجکننده میتواند باعث ناامیدی شده و درک مطلب را مختل کند.
با پیروی از بهترین شیوههای دسترسپذیری، میتوانیم اطمینان حاصل کنیم که tooltipها به جای مانع شدن، تجربه کاربری را برای همه بهبود میبخشند.
اصول کلیدی برای Tooltipهای قابل دسترس
اصول زیر برای ایجاد tooltipهای قابل دسترس حیاتی هستند:
- فراهم کردن دسترسی جایگزین: اطمینان حاصل کنید که tooltipها هم از طریق hover و هم از طریق فوکوس صفحهکلید قابل دسترسی هستند.
- استفاده از ویژگیهای ARIA: از ویژگیهای ARIA (Accessible Rich Internet Applications) برای شناسایی و توصیف صحیح tooltipها به فناوریهای کمکی استفاده کنید.
- مدیریت فوکوس: کنترل کنید که هنگام نمایش و پنهان شدن یک tooltip، فوکوس به کجا میرود.
- اطمینان از کنتراست کافی: کنتراست رنگ کافی بین متن tooltip و پسزمینه آن فراهم کنید.
- فراهم کردن زمان کافی: به کاربران زمان کافی برای خواندن محتوای tooltip بدهید.
- قابل بستن کردن آنها: راهی واضح برای بستن tooltip فراهم کنید.
- پرهیز از استفاده بیش از حد: از tooltipها به ندرت و فقط در مواقع ضروری استفاده کنید.
تکنیکهای پیادهسازی
۱. استفاده از Hover و Focus
مهمترین جنبه tooltipهای قابل دسترس این است که اطمینان حاصل شود هم برای کاربران ماوس و هم برای کاربران صفحهکلید قابل دسترسی هستند. این به این معناست که tooltip باید هم هنگام hover و هم زمانی که عنصر فوکوس را دریافت میکند، ظاهر شود.
HTML:
<a href="#" aria-describedby="tooltip-example">لینک نمونه</a>
<div id="tooltip-example" role="tooltip" style="display: none;">این یک tooltip نمونه است.</div>
CSS:
a:hover + div[role="tooltip"],
a:focus + div[role="tooltip"] {
display: block;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
z-index: 1000; /* اطمینان از اینکه tooltip در بالاترین لایه قرار دارد */
}
توضیح:
aria-describedby
: این ویژگی، لینک را با استفاده از ID به عنصر tooltip متصل میکند. این به فناوریهای کمکی میگوید که tooltip اطلاعات بیشتری در مورد لینک ارائه میدهد.role="tooltip"
: این نقش ARIA عنصر را به عنوان یک tooltip شناسایی میکند.- CSS از انتخابگر همزاد مجاور (
+
) برای نمایش tooltip هنگام hover یا focus روی لینک استفاده میکند.
جاوا اسکریپت (کنترل پیشرفته - اختیاری):
در حالی که CSS میتواند نمایش/پنهانسازی ساده را مدیریت کند، جاوا اسکریپت کنترل قویتری را امکانپذیر میسازد، به ویژه زمانی که tooltipها به صورت پویا ایجاد میشوند یا به رفتار پیچیدهتری نیاز دارند.
const link = document.querySelector('a[aria-describedby="tooltip-example"]');
const tooltip = document.getElementById('tooltip-example');
link.addEventListener('focus', () => {
tooltip.style.display = 'block';
});
link.addEventListener('blur', () => {
tooltip.style.display = 'none';
});
link.addEventListener('mouseover', () => {
tooltip.style.display = 'block';
});
link.addEventListener('mouseout', () => {
tooltip.style.display = 'none';
});
۲. استفاده از ویژگیهای ARIA
ویژگیهای ARIA برای ارائه اطلاعات معنایی به فناوریهای کمکی ضروری هستند. در اینجا به تفکیک ویژگیهای کلیدی میپردازیم:
aria-describedby
: همانطور که قبلاً ذکر شد، این ویژگی رابطه بین عنصر فعالکننده و عنصر tooltip را برقرار میکند.role="tooltip"
: این ویژگی به صراحت عنصر را به عنوان یک tooltip تعریف میکند.aria-hidden="true"
/aria-hidden="false"
: از اینها برای نشان دادن اینکه آیا tooltip در حال حاضر برای فناوریهای کمکی قابل مشاهده است یا خیر، استفاده کنید. وقتی tooltip پنهان است،aria-hidden="true"
را تنظیم کنید. وقتی قابل مشاهده است،aria-hidden="false"
را تنظیم کنید. این امر به ویژه هنگام استفاده از جاوا اسکریپت برای کنترل دیدهشدن tooltip اهمیت دارد.
مثال:
<button aria-describedby="help-tooltip">ارسال</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">برای ارسال فرم اینجا کلیک کنید.</div>
جاوا اسکریپت (برای aria-hidden):
const button = document.querySelector('button[aria-describedby="help-tooltip"]');
const tooltip = document.getElementById('help-tooltip');
button.addEventListener('focus', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('blur', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
button.addEventListener('mouseover', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('mouseout', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
۳. مدیریت Focus
وقتی یک tooltip ظاهر میشود، به طور کلی *نباید* فوکوس را از عنصر فعالکننده بدزدد. فوکوس باید روی عنصری باقی بماند که tooltip را فعال کرده است. این تضمین میکند که کاربران صفحهکلید میتوانند بدون وقفههای غیرمنتظره به پیمایش صفحه ادامه دهند.
با این حال، ممکن است شرایطی وجود داشته باشد که شما *بخواهید* فوکوس را به tooltip منتقل کنید، به ویژه اگر tooltip حاوی عناصر تعاملی (مانند لینکها، دکمهها) باشد. در این حالت، اطمینان حاصل کنید که:
- tooltip از نظر بصری متمایز است تا نشان دهد که فوکوس دارد.
- راهی واضح برای بازگرداندن فوکوس به عنصر فعالکننده اصلی وجود دارد (مانند دکمه بستن در داخل tooltip).
در بیشتر موارد، برای سادگی و قابلیت استفاده، بهتر است از مدیریت فوکوس در خود tooltip خودداری شود.
۴. اطمینان از کنتراست کافی
کنتراست رنگ برای خوانایی بسیار مهم است. اطمینان حاصل کنید که رنگ متن در tooltipهای شما کنتراست کافی در برابر رنگ پسزمینه دارد. دستورالعملهای دسترسپذیری محتوای وب (WCAG) نسبت کنتراست حداقل 4.5:1 برای متن معمولی و 3:1 برای متن بزرگ (18pt یا 14pt ضخیم) را توصیه میکند.
از ابزارهای بررسی کنتراست آنلاین برای تأیید اینکه انتخابهای رنگ شما با استانداردهای دسترسپذیری مطابقت دارد، استفاده کنید. نمونههایی از ابزارهای بررسی کنتراست عبارتند از:
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Coolors: https://coolors.co/contrast-checker
مثال (کنتراست خوب):
.tooltip {
background-color: #000;
color: #fff;
}
مثال (کنتراست ضعیف):
.tooltip {
background-color: #fff;
color: #eee;
}
۵. فراهم کردن زمان کافی
کاربران برای خواندن محتوای tooltip به زمان کافی نیاز دارند. از tooltipهایی که خیلی سریع ناپدید میشوند، خودداری کنید. اگرچه عدد جادویی وجود ندارد، اما هدف را بر روی حداقل زمان نمایش چند ثانیه قرار دهید. همچنین، tooltip باید تا زمانی که کاربر روی عنصر فعالکننده hover کرده یا فوکوس دارد، قابل مشاهده باقی بماند. اگر نیاز به بستن tooltip به دلیل رویدادهای دیگر دارید، نشانگری ارائه دهید که tooltip بسته خواهد شد.
اگر محتوای tooltip طولانی است، در نظر بگیرید که راهی برای بستن دستی tooltip توسط کاربر فراهم کنید (مانند دکمه بستن یا فشردن کلید Escape).
۶. قابل بستن کردن آنها
در حالی که tooltipها اغلب به طور خودکار با دور شدن ماوس کاربر یا برداشتن فوکوس ناپدید میشوند، ارائه یک راه واضح برای بستن دستی آنها، به ویژه برای tooltipهای طولانی یا tooltipهای حاوی عناصر تعاملی، یک عمل خوب است.
روشهای بستن Tooltipها:
- دکمه بستن: یک دکمه بستن با برجستگی بصری در داخل tooltip قرار دهید.
- کلید Escape: به کاربران اجازه دهید با فشردن کلید Escape، tooltip را ببندند.
- کلیک در بیرون: tooltip را زمانی ببندید که کاربر در هر جایی خارج از tooltip و عنصر فعالکننده کلیک کند. (با احتیاط استفاده کنید زیرا میتواند مخل باشد).
مثال (دکمه بستن):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
این محتوای tooltip من است.
<button onclick="hideTooltip()">بستن</button>
</div>
مثال (کلید Escape):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // با تابع واقعی پنهان کردن tooltip خود جایگزین کنید
}
});
۷. پرهیز از استفاده بیش از حد
از tooltipها باید به ندرت و فقط زمانی که اطلاعات واقعاً مفیدی ارائه میدهند، استفاده شود. استفاده بیش از حد از tooltipها میتواند رابط کاربری را شلوغ کند، حواس کاربران را پرت کند و تجربهای ناامیدکننده ایجاد کند.
جایگزینهای Tooltipها:
- برچسبهای واضح: از برچسبهای واضح و توصیفی برای فیلدهای فرم، دکمهها و لینکها استفاده کنید.
- راهنمای متنی: متن راهنما را مستقیماً در رابط کاربری، نزدیک به عناصر مربوطه ارائه دهید.
- مستندات راهنما: برای ویژگیهای پیچیدهتر، به مستندات راهنمای جامع لینک دهید.
ملاحظات پیشرفته
محتوای پویا
اگر محتوای tooltip شما به صورت پویا تولید میشود (مثلاً از یک API بارگیری میشود یا بر اساس ورودی کاربر بهروز میشود)، اطمینان حاصل کنید که ویژگی aria-describedby
و قابلیت دیدهشدن tooltip به طور متناسب بهروز میشوند. از جاوا اسکریپت برای مدیریت این بهروزرسانیها استفاده کنید.
موقعیتیابی
موقعیتیابی tooltipهای خود را با دقت در نظر بگیرید. از قرار دادن آنها به گونهای که محتوای مهم را بپوشانند یا باعث تغییرات در چیدمان شوند، خودداری کنید. به اندازههای مختلف صفحه و وضوح تصویر توجه داشته باشید و از CSS برای اطمینان از اینکه tooltipها همیشه در داخل viewport قابل مشاهده هستند، استفاده کنید.
دستگاههای موبایل
Tooltipها به طور سنتی به تعاملات hover متکی هستند که در دستگاههای لمسی موجود نیست. برای دستگاههای موبایل، روشهای تعامل جایگزین را در نظر بگیرید، مانند:
- ضربه (Tap): tooltip را هنگام ضربه زدن کاربر به عنصر نمایش دهید.
- فشار طولانی (Long press): tooltip را هنگام فشار طولانی کاربر روی عنصر نمایش دهید.
- نمایش در هنگام فوکوس: زمانی که عنصر فوکوس را دریافت میکند نمایش داده شود. این کار را میتوان با جاوا اسکریپت، با بررسی پشتیبانی از لمس (مثلاً `('ontouchstart' in window)`) و تغییر رفتار نمایش بر اساس آن انجام داد.
تست کردن Tooltipهای شما
Tooltipهای خود را به طور کامل تست کنید تا اطمینان حاصل شود که برای همه کاربران قابل دسترس هستند. از ترکیبی از تست دستی و ابزارهای تست دسترسپذیری خودکار استفاده کنید.
روشهای تست:
- ناوبری با صفحهکلید: بررسی کنید که tooltipها با استفاده از صفحهکلید قابل دسترسی هستند.
- تست با صفحهخوان: از یک صفحهخوان برای اطمینان از اینکه tooltipها به درستی اعلام میشوند، استفاده کنید.
- تحلیل کنتراست رنگ: از یک ابزار بررسی کنتراست رنگ برای تأیید کنتراست کافی استفاده کنید.
- تست موبایل: tooltipها را روی دستگاههای موبایل و اندازههای صفحه مختلف تست کنید.
- تست دسترسپذیری خودکار: از ابزارهایی مانند axe DevTools، WAVE یا Lighthouse برای شناسایی مشکلات بالقوه دسترسپذیری استفاده کنید.
بینالمللیسازی (i18n) و بومیسازی (l10n)
هنگام توسعه tooltipها برای مخاطبان جهانی، بینالمللیسازی و بومیسازی را در نظر داشته باشید:
- جهت متن: از هر دو جهت متن چپ به راست (LTR) و راست به چپ (RTL) پشتیبانی کنید. از ویژگیهای منطقی CSS (مانند `margin-inline-start`, `margin-inline-end`) به جای ویژگیهای فیزیکی (مانند `margin-left`, `margin-right`) برای چیدمان استفاده کنید.
- ترجمههای مختص زبان: ترجمههای محتوای tooltip را برای زبانهای مختلف ارائه دهید.
- فرمتهای تاریخ و زمان: فرمتهای تاریخ و زمان را با منطقه کاربر تطبیق دهید.
- فرمتهای اعداد: از فرمتهای اعداد مناسب برای مناطق مختلف (مانند جداکنندههای اعشاری، جداکنندههای هزارگان) استفاده کنید.
نتیجهگیری
پیادهسازی tooltipهای قابل دسترس نیازمند برنامهریزی دقیق و توجه به جزئیات است. با پیروی از اصول و تکنیکهای ذکر شده در این راهنما، میتوانید tooltipهایی ایجاد کنید که برای همه، صرف نظر از تواناییهایشان، قابل استفاده باشند. به یاد داشته باشید که دسترسپذیری یک فرآیند مداوم است، بنابراین به تست و بهبود tooltipهای خود ادامه دهید تا اطمینان حاصل کنید که نیازهای همه کاربران شما را برآورده میکنند.