Dostępność stron WWW
3 godz. 32 min · HTML i CSS · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerHTML został wynaleziony już w 1989 roku i jest on podstawą tworzenia stron internetowych do dziś. W ciągu ponad 30 lat społeczność programistów tworzących strony internetowe odkrywała coraz to nowe problemy w tworzeniu treści pod unikalne medium jakim jest internet. Jednak na przełomie dekad społeczność zdaje się zapominać o pierwotnych założeniach sieci - treści dostępnych dla każdego. W czasach gdy nowe JavaScriptowe frameworki stawiają... developer experience ponad user experience, paradoksalnie - jest coraz mniej stron internetowych, które są szybkie oraz dostępne dla szerokiej grupy odbiorców.
Dostępność w tym kontekście to tworzenie rozwiązań, z których korzystać może każdy - niezależnie od tego czy zapomniał słuchawek, niedowidzi, zepsuła mu się myszka czy mówi w innym języku. To także troska o użytkownika bez względu na jego potencjalne ograniczenia. Przekłada się to bezpośrednio na ilość osób, które mogą skorzystać z Twojej strony WWW. To właśnie przedstawimy Ci w tym kursie - poznasz techniki tworzenia stron internetowych, które z założenia dbają o użytkownika i pozostawiają kontrolę w jego rękach. Dowiesz się też jaki ma to wpływ dla biznesu czy Ciebie - jako użytkownika sieci.
Troska o użytkownika to dobry User Experience - co z kolei tworzy przywiązanie do produktu. Ale mniej oczywistymi aspektami dostępności jest wpływ na pozycjonowanie stron internetowych. Poprzez korzystanie z semantycznych znaczników i jawne wyrażanie treści poprzez markup możemy - jako przyjemny efekt uboczny - wpłynąć na silniki wyszukiwarek internetowych, by pojawiać się w wynikach wyżej niż dotychczas.
Niestety, łatwo jest tworzyć strony niedostępne - głównie ze względu na niewiedzę. W kursie zrozumiesz najczęściej popełniane błędy dostępności, przez które Twoje treści mogą nie docierać do Twoich potencjalnych użytkowników, oraz dowiesz się jak tworzyć te same rozwiązania w sposób dostępny.
Jesteś znudzony tym, co oferuje Front-End? Każdy framework brzmi jak koło wynajdywane na nowo? Wątek dostępności to zupełnie nowy poziom postrzegania produktu i pracy na rzecz użytkownika. Ilość potencjalnych przypadków do rozwiązania, jeśli chodzi o formę konsumpcji treści przez użytkownika, jest ogromna - możesz ponownie rozpalić swoje zainteresowanie web developmentem!
Aby móc efektywnie skorzystać z tego kursu, potrzebujesz podstawowej wiedzy na temat HTML i CSS. Przyda się również znajomość języka angielskiego, ale nie jest to obowiązkowe, pojedyncze zwroty są tłumaczone na bieżąco.
Cześć wiemy już jak tworzyć treści tylko dla czytników ekranowych
jak tworzyć treści tylko dla użytkowników wizualnych możemy
to oczywiście osiągnąć za pomocą specjalnej klasy visually-hidden czyli tak
zwanego clip patterenu możemy używać aria-hidden ustawiona
na true aby ukrywać treści przed czytnikami ekranowymi natomiast jest
jeszcze jeden feature dostępności powiązany właśnie z atrybutami aria którego
możemy użyć aby zmienić treść którą chcemy zaprezentować jeżeli
przeczytamy sobie tutaj chromevoxem ten nagłówek
no to mamy mystery solved natomiast jeśli chcielibyśmy aby to mówiło
cokolwiek czasami się tak zdarza zwłaszcza jeżeli chcemy zmienić treść linka bądź mamy
ascii arty czyli obrazki stworzone z literek to jest bardzo
istotne w accessibility aby nie udostępniać takich obrazków
bez ich uprzedniej modyfikacji zaraz to zrobimy no to możemy tutaj w
aria-label ustawić hello world powiedzmy
no i mystery solved czyta
się jako hello world no i dlaczego to jest potrzebne no jeżeli byśmy
wjechali na tego ascii arta to zobaczmy jak chromevox nam czyta tego ten
atrybut pre
tak więc
generalnie każda literka czyta się jako osobny znak i nie ma tutaj informacji że jest to detektyw
który ma na sobie cytat i'll be selling in the house and moving family to a condo
w związku z czym użyć aria-label żeby zmienić
treść tego elementu aria-label ja
tutaj mam już przygotowane wcześniej treści które możemy tutaj powiedzieć to jest oczywiście
sama treść tego cytatu zapisujemy to i
teoretycznie jeżeli chcielibyśmy żeby faktycznie to przeczytało
nam się jako to no to możemy użyć do tego aria-label natomiast chromevox
ma z tym jakiś problem o ile mystery solved da się przetłumaczyć i
pisze się jako hello world no to jeżeli wejdziemy w pre no to po
prostu chromevox tego nie łapie ale to jest problem z chromevoxem
więc możemy odpalić do tego voiceovera
generalnie
tutaj mięliśmy przebitkę polskiej wymowy czytnika ekranowego bo zmieniłem
język zaraz dowiemy się czemu ale jak wejdziemy na i'll be selling in the house and
moving family to a condo
więc screen reader voiceover przeczytał nam faktycznie tego ascii arta poprawnie
i aria-label zadziałało z jakiegoś powodu na chromevoxie aria-label
nie działa ze znacznikiem pre podejrzewam że jest to bug i możemy to
zaadresować na różne sposoby możemy albo ukryć
ten element i stworzyć drugi element albo możemy zostawić to jako aria-label
tylko że wtedy użytkownicy chromevoxa będą mieli tutaj buga zanim
przejdziemy do opcji która będzie też działała dla chromevoxa chciałem pokazać jeszcze jeden feature
a mianowicie przetłumaczenie strony na nasz język ojczysty w
tym momencie ustawiłem język na polski strona jest po angielsku
bo tutaj mamy lang na en czyli jeżeli zrobimy translację no
to faktycznie przetłumaczyła nam się zagadka rozwiązana ascii art nam się zepsuł ponieważ
spróbował jakby czytnik ekranowy próbował go przetłumaczyć natomiast zagadka rozwiązana
się przetłumaczyło tylko co w sytuacji kiedy tutaj mamy hello world ustawione
a tutaj jest zagadka rozwiazana czy aria-label się też przetłumaczy zobaczmy
tutaj
przejdziemy to całe na górę generalnie
przeczytało treść tego a nie hello world zobaczmy jak zadziała
voiceover
co ciekawe voiceover
poradził sobie z przetłumaczeniem aria-label natomiast nie wszystkie czytniki ekranowe
to robią jak na przykład właśnie chromevox więc co można zrobić żeby treść
była przetłumaczalna na każdy język oraz żeby
była faktycznie zastępowana w odpowiedni sposób zamiast używać aria-label możemy
to zrobić na inny sposób po pierwsze usuniemy stąd
aria-label i damy translate no
czyli jak już wiemy to powinno teoretycznie zapobiec translacji
natomiast silnik google do tłumaczeń tego nie respektuje trzeba
dać specjalną klasę class notranslate zapisujemy
no i teraz możemy jeszcze raz to przetłumaczyć i faktycznie widzimy że zagadka rozwiązana się
przetłumaczyło natomiast treść samego ascii artu już nie żeby to
było dostępne dla czytników ekranowych możemy dać tutaj
aria-hidden na true ukrywając tego ascii arta
przed użytkownikami no i tworząc osobny element który
będzie ukryty wizualnie dla pozostałych użytkowników czyli class visually-hidden
i tutaj dajemy tą treść którą sobie wcześniej przygotowaliśmy
i w tym momencie nie widać tego oczywiście tutaj ale jeśli odpalimy czytnik
ekranowy
i on przeczytał nam ten konkretnie paragraf nie czytał
faktycznie ascii artu i o to nam chodziło więc mamy jakby substytut
tego aria-label tutaj w ten sposób zrobiony że mamy aria-hidden ustawione na true no
i klasa visually-hidden na osobnym elemencie w którym jest tylko i wyłącznie to
i to jest o tyle też lepsze ponieważ aria-label czasami się nie tłumaczy
więc jezeli teraz zrobimy translację na polski to mamy zagadka
rozwiązana oczywiście to przeczytało nam z angielskim akcentem
ale jezeli przejedziemy niżej
generalnie
można w ten sposób ustalać też elementy nie trzeba zawsze
korzystać z aria-label zwłaszcza że narzędzia tłumaczące czasami
sobie z tym tłumaczeniem nie radzą zostawię wam też linki i źródła do tego
aby musi od tego odnieść ważne jest też aby treści nam się nie duplikowały
czyli jeżeli byśmy nie ukryli tego tutaj przez aria-hidden no to teoretycznie
mogłoby się to 2 razy przeczytać tak bo oczywiście byłby tutaj szum informacyjny
przez te wszystkie o.o. małpa małpa małpa buck-tick buck-tick buck-tick
natomiast jest tutaj ta treść jeżeli byłoby na tym aria-label ustawione
właśnie na tą treść i tutaj mielibyśmy jeszcze drugie visually-hidden no to mielibyśmy dwa
razy tą samą treść na jednej stronie co jest po prostu duplikacją i jest
nieprzyjemne dla użytkownika i jest nie jest optymalne ponieważ te informacje
muszą się wysłać dwa razy do przeglądarki z naszego serwera więc
to co chciałbym żeby zapamiętać z tej lekcji translate no nie zawsze
zadziała dla googlea na przykład trzeba dać klasę no translate i wtedy on to
respektuje jest aria-label natomiast aria-label się nie tłumaczy
lepiej skorzystać albo z osobnego elementu albo wykorzystać
w ogóle atrybut aria-labelledby który działa praktycznie tak samo jak labelki
natywne czyli po prostu możemy podać mu identyfikator elementu
który nam opisuje element czyli tutaj moglibyśmy dać id label
i tutaj aria-labelledby
ustawione na ten label tylko oczywiście wtedy nie możemy
mieć tutaj aria-hidden true bo to się zupełnie wtedy nie przeczyta w kolejnych lekcjach będziemy
mówili więcej o nawigacji klawiaturą i wskaźniku skupienia