Ръководство за имплементиране на достъпни подсказки чрез посочване и фокус, осигуряващо използваемост за всички потребители, включително тези с увреждания.
Имплементация на подсказки: Достъпна информация при посочване и фокус
Подсказките са малки, контекстуални помощни съобщения, които се появяват, когато потребител посочи с мишката или фокусира елемент. Те могат да предоставят допълнителна информация, да изяснят целта на даден елемент или да предложат съвети как да се използва дадена функция. Въпреки това, подсказките лесно могат да се превърнат в кошмар за достъпността, ако не са имплементирани правилно. Това ръководство очертава най-добрите практики за създаване на подсказки, които са използваеми от всички, включително потребители с увреждания.
Защо достъпността е важна при подсказките
Достъпността не е просто въпрос на съответствие; тя е свързана със създаването на по-добро потребителско изживяване за всички. Когато подсказките не са достъпни, това може да изключи потребители, които разчитат на асистивни технологии като екранни четци, навигация с клавиатура или гласово въвеждане. Разгледайте тези сценарии:
- Потребители на екранен четец: Ако подсказката не е правилно маркирана, екранният четец може да не обяви нейното присъствие или съдържание.
- Потребители на клавиатура: Ако подсказката се появява само при посочване с мишка, потребителите на клавиатура няма да имат достъп до нея.
- Потребители с двигателни увреждания: Прецизните движения на мишката, необходими за взаимодействия при посочване, могат да бъдат трудни или невъзможни.
- Потребители с когнитивни увреждания: Лошо синхронизирана или объркваща подсказка може да създаде фрустрация и да попречи на разбирането.
Като следваме най-добрите практики за достъпност, можем да гарантираме, че подсказките подобряват, а не възпрепятстват потребителското изживяване за всички.
Ключови принципи за достъпни подсказки
Следните принципи са от решаващо значение за създаването на достъпни подсказки:
- Осигурете алтернативен достъп: Уверете се, че подсказките са достъпни както при посочване с мишка, така и при фокус с клавиатура.
- Използвайте ARIA атрибути: Използвайте атрибути на ARIA (Accessible Rich Internet Applications), за да идентифицирате и опишете правилно подсказките за асистивните технологии.
- Управлявайте фокуса: Контролирайте къде отива фокусът, когато подсказката се показва и скрива.
- Осигурете достатъчен контраст: Осигурете достатъчен цветови контраст между текста на подсказката и фона.
- Оставете достатъчно време: Дайте на потребителите достатъчно време, за да прочетат съдържанието на подсказката.
- Направете ги затваряеми: Осигурете ясен начин за затваряне на подсказката.
- Избягвайте прекомерната употреба: Използвайте подсказките пестеливо и само когато е необходимо.
Техники за имплементация
1. Използване на посочване и фокус
Най-критичният аспект на достъпните подсказки е да се гарантира, че те са достъпни както за потребителите на мишка, така и за тези на клавиатура. Това означава, че подсказката трябва да се появява както при посочване с мишка, така и когато елементът получи фокус.
HTML:
<a href="#" aria-describedby="tooltip-example">Примерен линк</a>
<div id="tooltip-example" role="tooltip" style="display: none;">Това е примерна подсказка.</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; /* Гарантира, че подсказката е най-отгоре */
}
Обяснение:
aria-describedby
: Този атрибут свързва линка с елемента на подсказката, използвайки неговото ID. Това казва на асистивните технологии, че подсказката предоставя допълнителна информация за линка.role="tooltip"
: Тази ARIA роля идентифицира елемента като подсказка.- CSS използва селектора за съседен елемент (
+
), за да покаже подсказката, когато линкът е посочен с мишка или фокусиран.
JavaScript (Разширен контрол - по избор):
Докато CSS може да се справи с просто показване/скриване, JavaScript позволява по-стабилен контрол, особено когато подсказките се генерират динамично или се нуждаят от по-сложно поведение.
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';
});
2. Използване на ARIA атрибути
ARIA атрибутите са от съществено значение за предоставянето на семантична информация на асистивните технологии. Ето разбивка на ключовите атрибути:
aria-describedby
: Както бе споменато по-рано, този атрибут установява връзката между задействащия елемент и елемента на подсказката.role="tooltip"
: Този атрибут изрично дефинира елемента като подсказка.aria-hidden="true"
/aria-hidden="false"
: Използвайте ги, за да укажете дали подсказката е видима в момента за асистивните технологии. Когато подсказката е скрита, задайтеaria-hidden="true"
. Когато е видима, задайтеaria-hidden="false"
. Това е особено важно, когато използвате JavaScript за контрол на видимостта на подсказката.
Пример:
<button aria-describedby="help-tooltip">Изпрати</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">Кликнете тук, за да изпратите формуляра.</div>
JavaScript (за 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';
});
3. Управление на фокуса
Когато се появи подсказка, тя обикновено *не трябва* да „открадва“ фокуса от задействащия елемент. Фокусът трябва да остане върху елемента, който е задействал подсказката. Това гарантира, че потребителите на клавиатура могат да продължат да навигират в страницата без неочаквани прекъсвания.
Въпреки това, може да има ситуации, в които *искате* да преместите фокуса върху подсказката, особено ако тя съдържа интерактивни елементи (напр. линкове, бутони). В този случай се уверете, че:
- Подсказката е визуално различна, за да покаже, че има фокус.
- Има ясен начин за връщане на фокуса към оригиналния задействащ елемент (напр. бутон за затваряне в подсказката).
В повечето случаи избягването на управлението на фокуса в самата подсказка е за предпочитане за по-голяма простота и използваемост.
4. Осигуряване на достатъчен контраст
Цветовият контраст е от решаващо значение за четливостта. Уверете се, че цветът на текста във вашите подсказки има достатъчен контраст спрямо цвета на фона. Насоките за достъпност на уеб съдържанието (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;
}
5. Осигуряване на достатъчно време
Потребителите се нуждаят от достатъчно време, за да прочетат съдържанието на подсказката. Избягвайте подсказки, които изчезват твърде бързо. Въпреки че няма магическо число, стремете се към минимално време на показване от няколко секунди. Също така, подсказката трябва да остане видима, докато потребителят посочва с мишка или е фокусирал задействащия елемент. Ако трябва да затворите подсказката поради други събития, осигурете индикатор, че тя ще се затвори.
Ако съдържанието на подсказката е дълго, обмислете предоставянето на начин потребителят ръчно да я затвори (напр. бутон за затваряне или натискане на клавиша Escape).
6. Направете ги затваряеми
Въпреки че подсказките често изчезват автоматично, когато потребителят премести мишката си или премахне фокуса, добра практика е да се осигури ясен начин за ръчното им затваряне, особено за дълги подсказки или такива, съдържащи интерактивни елементи.
Методи за затваряне на подсказки:
- Бутон за затваряне: Включете визуално забележим бутон за затваряне в подсказката.
- Клавиш Escape: Позволете на потребителите да затворят подсказката чрез натискане на клавиша Escape.
- Кликване извън: Затворете подсказката, когато потребителят кликне някъде извън нея и задействащия елемент. (Използвайте с повишено внимание, тъй като може да бъде разсейващо).
Пример (бутон за затваряне):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
Това е съдържанието на моята подсказка.
<button onclick="hideTooltip()">Затвори</button>
</div>
Пример (клавиш Escape):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // Заменете с вашата реална функция за скриване на подсказката
}
});
7. Избягване на прекомерна употреба
Подсказките трябва да се използват пестеливо и само когато предоставят наистина полезна информация. Прекомерната им употреба може да претрупа интерфейса, да разсее потребителите и да създаде разочароващо преживяване.
Алтернативи на подсказките:
- Ясни етикети: Използвайте ясни и описателни етикети за полета на формуляри, бутони и линкове.
- Контекстуална помощ: Предоставяйте помощен текст директно в интерфейса, близо до съответните елементи.
- Помощна документация: Предоставяйте връзки към подробна помощна документация за по-сложни функции.
Разширени съображения
Динамично съдържание
Ако съдържанието на вашата подсказка се генерира динамично (напр. заредено от API или актуализирано въз основа на потребителско въвеждане), уверете се, че атрибутът aria-describedby
и видимостта на подсказката се актуализират съответно. Използвайте JavaScript, за да управлявате тези актуализации.
Позициониране
Внимателно обмислете позиционирането на вашите подсказки. Избягвайте да ги поставяте по начин, който закрива важно съдържание или причинява разместване на оформлението. Внимавайте с различните размери и резолюции на екрана и използвайте CSS, за да гарантирате, че подсказките винаги са видими в рамките на прозореца (viewport).
Мобилни устройства
Подсказките традиционно разчитат на взаимодействия с посочване на мишката, които не са налични на устройства със сензорен екран. За мобилни устройства обмислете използването на алтернативни методи за взаимодействие, като например:
- Докосване: Показване на подсказката, когато потребителят докосне елемента.
- Продължително натискане: Показване на подсказката, когато потребителят натисне и задържи елемента.
- Показване при фокус: Показване, когато елементът получи фокус. Това може да се постигне с JavaScript, като се провери за поддръжка на докосване (напр. `('ontouchstart' in window)`) и се промени съответно поведението на показване.
Тестване на вашите подсказки
Тествайте обстойно вашите подсказки, за да сте сигурни, че са достъпни за всички потребители. Използвайте комбинация от ръчно тестване и автоматизирани инструменти за тестване на достъпността.
Методи за тестване:
- Навигация с клавиатура: Проверете дали подсказките са достъпни с помощта на клавиатурата.
- Тестване с екранен четец: Използвайте екранен четец, за да се уверите, че подсказките се обявяват правилно.
- Анализ на цветовия контраст: Използвайте инструмент за проверка на цветовия контраст, за да проверите дали е достатъчен.
- Тестване на мобилни устройства: Тествайте подсказките на различни мобилни устройства и размери на екрана.
- Автоматизирано тестване за достъпност: Използвайте инструменти като axe DevTools, WAVE или Lighthouse, за да идентифицирате потенциални проблеми с достъпността.
Интернационализация (i18n) и локализация (l10n)
Когато разработвате подсказки за глобална аудитория, имайте предвид интернационализацията и локализацията:
- Посока на текста: Поддържайте посоки на текста както отляво надясно (LTR), така и отдясно наляво (RTL). Използвайте логически CSS свойства (напр. `margin-inline-start`, `margin-inline-end`) вместо физически свойства (напр. `margin-left`, `margin-right`) за оформлението.
- Преводи за конкретни езици: Осигурете преводи на съдържанието на подсказките за различни езици.
- Формати на дата и час: Адаптирайте форматите на дата и час към локала на потребителя.
- Числови формати: Използвайте подходящи числови формати за различните региони (напр. десетични разделители, разделители за хиляди).
Заключение
Имплементирането на достъпни подсказки изисква внимателно планиране и внимание към детайла. Като следвате принципите и техниките, описани в това ръководство, можете да създадете подсказки, които са използваеми от всички, независимо от техните способности. Помнете, че достъпността е непрекъснат процес, така че продължавайте да тествате и усъвършенствате вашите подсказки, за да сте сигурни, че отговарят на нуждите на всички ваши потребители.