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ść w tej lekcji opowiem ci jak czytniki ekranowe działają domyślnie
to znaczy jak czytają strony internetowe co wpływa na to że
treść na czytniku ekranowym jest czytana no i w kolejnych lekcjach dowiesz
się też jak tworzyć treści tylko i wyłącznie do czytników ekranowych bądź tylko i wyłącznie
dla użytkowników wizualnych no i tutaj mamy przykład bazujący
taki na kryminale na jakiejś zagadce no i możemy odpalić sobie chromevox
czyli control command a a na macu
tak więc generalnie screen reader zaczął czytać od góry do dołu no
i przeczytał nam detektywa nasze zdjęcie w ten sposób
to bardzo ciekawe
ponieważ jakby tutaj nie mamy podanego alta dlatego wychodzi na to
że chromevox jakoś w mądry sposób pozbył się rozszerzenia obrazka
oraz przedrostka w katalogu no i przeczytał
to jako detective image to bardzo ciekawe generalnie różne czytniki ekranowe
działają różnie niektóre przeczytają całą ścieżkę niektóre
będą ignorowały w ogóle source i nie zaanonsują
zupełnie informacji do przeglądarki generalnie jeżeli
chcielibyśmy się pozbyć w ogóle tego anonsa zawsze no to tak jak wspominaliśmy możemy
zrobić jako alt dekoracyjny i czytając dalej
no jakaś tajemnica heading poziomu pierwszego nagłówek
poprzedniej nocy coś dziwnego stało
się w mieście codu ktoś próbował dokonać zamachu na
dostępność swojej strony internetowej
kto mógł zrobić taką rzecz
emoji twarz krzycząca w strachu możesz zapytać
czy to był ogrodnik
twarz myśląca emoji
aby odkryć tą tajemnicę
będziesz musiał okazać swoją odwagę więc generalnie emoji
też się czytają jak już wcześniej o tym poruszyliśmy więc jeżeli chcielibyśmy się ich pozbyć
moglibyśmy tutaj w pewien sposób je ukryć jak
ukrywać elementy dowiesz się w następnej lekcji natomiast co chciałem powiedzieć w
tym konkretnym przykładzie generalnie jest tutaj pewna tajemnica no którą trzeba odkryć
jeżeli jesteśmy użytkownikami wizualnymi
no to możemy tak naprawdę poruszać coś myszką najechać na ten obrazek no i tu się
okazuje że jest secret na nim jest na nim secret no i gdy go klikniemy
pojawia się it's someone who didn't understand the case czyli
to jest ktoś kto nie zrozumiał problemu faktycznie spróbował
dokonać zamachu na dostępność strony internetowej czemu to jest
zły przykład ponieważ jeżeli wejdziemy sobie tutaj teraz w style no
to widzimy że element game czyli tak naprawdę tutaj jest taki niewidzialny
box na hover targetuje
cta czyli call to action i ustawia mu display flex czy w momencie kiedy przejdziemy
do pliku tutaj zobaczymy ze taki mamy kontener
game wewnątrz niego jest obrazek o klasie cover no i tu
jest dopiero div o kasie call-to-action już wspomnieliśmy o tym że generalnie buttony
i inne elementy powinny używać semantycznych znaczników czy
jeżeli chcemy żeby to był przycisk który aktywuje nam alert no to powinien to być button
a nie div natomiast tutaj jest to divem no i jaki
jest z tym problem po najechaniu na hover call to action się pokazuje jak
display flex a domyślnie jest na display none i dlatego czytnik
ekranowy nam tego nie czyta ponieważ cokolwiek ma disney none nie jest widoczne dla użytkownika
wizualnego i też będzie schowane przez czytnik ekranowy jeżeli
natomiast najechalibyśmy na to myszką i włączyli screen reader
było detective image secret
czyli tutaj coś nam się alt usunął jeszcze
raz alta ustawimy
więc ten tutaj secret nam się przeczytał
dlatego ponieważ mieliśmy tutaj hover na tym jeżeli byśmy nie mieli tutaj myszki
no to czytnik ekranowy by tego nie mógł przeczytać w związku z czym to
rozwiązanie jest zupełnie dostępne ponieważ użytkownicy czytników ekranowych
nie korzystają często z myszki korzystają przede wszystkim z klawiatury oczywiście
można klawiaturą też myszkę poruszać natomiast jeżeli nie wiadomo gdzie mamy tą myszkę umiejscowić
no to nie zaaktywujemy tego hovera a nawet
jeżeli już mamy tutaj jakimś cudem hover ustawiony no to screen reader
nie przeczyta że to jest przycisk który należy kliknąć no i użytkownik może się do tego
nie dostać cokolwiek schowamy za pomocą display none nie będzie
czytelne dla czytników ekranowych ponieważ nie będzie dostępne w drzewie dostępności
i display none nie jest jedyną właściwością która sprawia że treść jest niedostępna
dla czytników ekranowych display none visibility hiden
czyli coś takiego jak display none tylko że zachowuje nam rozmiar
elementu docelowy jeżeli wpiszemy sobie tutaj visibility hidden no to
faktycznie jakby nie ma za dużej różnicy tylko musimy teraz to visibility
zmienić w tym miejscu z powrotem na visibility
visible no i w momencie gdy hoverujemy no style
nam się troszkę zmieniły natomiast tak samo na hover się pokazuje i
jeśli będziemy aktywować screen readera
tak nie było tego
anonsa najeżdżam na secret
i secret jest czytelne ponieważ
jest visibility visible czyli visibility hiden display
none ukrywają nam elementy w drzewie dostępności i tak samo
się dzieje co jest już nie oczywiste jeżeli zrobimy opacity na 0 opacity
na 1 zapisujemy
wyłączymy no i teraz gdy najeżdżamy na
ten element no to oczywiście on się pokazuje możemy tak naprawdę zrobić tutaj display flex to wtedy
to już będzie nam działać z powrotem tak jak wcześniej włączamy czytnik ekranowy
nie przeczytało nam secretu
najeżdżamy na secret na naszą grę
i znowu się czyta w związku z czym jak można ukrywać
rzeczy w taki sposób by były czytelne dla czytników ekranowych
na pewno nie używając tych trzech właściwości możemy przesunąć je poza viewport możemy je
uciąć możemy zmienić ich rozmiar ale o tym konkretnie
dowiesz się w następnej lekcji
Kod na poczatek lekcji · 1 min
:root {
--black: #181C25;
--black-lighter: rgb(46, 52, 66);
--black-darker: rgb(17, 19, 26);
--orange: orange;
--green: rgb(54, 138, 54);
--yellow: yellow;
--blue: aqua;
--purple: rebeccapurple;
--white: white;
}
body {
font-family: 'Helvetica', 'Arial', sans-serif;
width: 80vw;
margin: 0 auto;
min-height: 100vh;
background: var(--black);
color: var(--white);
display: flex;
flex-direction: column;
justify-content: center;
font-size: 1rem;
line-height: 1.4rem;
}
img {
max-width: 100%;
}
.cover {
background-color: rgba(255, 0, 0, 0.637);
width: 100%;
}
.cta {
border: none;
font-size: 2rem;
padding: 1rem;
cursor: pointer;
align-self: center;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: none;
justify-content: center;
align-items: center;
margin: 0;
padding: 0;
}
.game {
position: relative;
}
.game:hover .cta {
display: flex;
}Kod pod koniec lekcji · 6 min
:root {
--black: #181C25;
--black-lighter: rgb(46, 52, 66);
--black-darker: rgb(17, 19, 26);
--orange: orange;
--green: rgb(54, 138, 54);
--yellow: yellow;
--blue: aqua;
--purple: rebeccapurple;
--white: white;
}
body {
font-family: 'Helvetica', 'Arial', sans-serif;
width: 80vw;
margin: 0 auto;
min-height: 100vh;
background: var(--black);
color: var(--white);
display: flex;
flex-direction: column;
justify-content: center;
font-size: 1rem;
line-height: 1.4rem;
}
img {
max-width: 100%;
}
.cover {
background-color: rgba(255, 0, 0, 0.637);
width: 100%;
}
.cta {
border: none;
font-size: 2rem;
padding: 1rem;
cursor: pointer;
align-self: center;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
justify-content: center;
align-items: center;
margin: 0;
padding: 0;
display: flex;
}
.game {
position: relative;
}
.game:hover .cta {
opacity: 1;
}