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.
Hej w tej lekcji powiem ci jak faktycznie ukrywać
treści w ten sposób by były dostępne dla czytników ekranowych generalnie
to co trzeba zrobić no to jakby zduplikować tą
treść niekoniecznie tutaj ten secret bo to nie to jest
treścią której nam chodzi to jest jakby podpowiedź dla użytkownika że tu
jest jakiś secret natomiast chodzi nam o samą tą treść więc co musimy
zrobić to wyjąć to z tego alerta możemy
stworzyć tutaj paragraf no i jak to zapiszemy no
to oczywiście tutaj to będzie widoczne a to nie o to chodzi ponieważ to jest tajemnica musimy ją odkryć
wiec to nie powinno być widoczne dla użytkowników wizualnych ale dla użytkowników
czytników ekranowych już owszem i żeby nie duplikować sobie tutaj tej treści możemy zrobić
taki trik po prostu mamy tutaj klasę hidden
secret no i po tej klasie hidden secret możemy wziąć
dokument queryselector hidden
secret no i wziąć
innertext z tego jako alert więc jak zapiszemy no
to po kliknięciu tylko secretu faktycznie będzie ta sama treść no i nie piszemy jej dwa razy więc
to fajnie natomiast to jest rozwiązanie tylko
javaskryptowe więc jak komuś nie będzie działało javascript to niestety nawet
użytkownik wizualny nie zobaczy tego ale no to pozostaje nam jeszcze ukryć tą treść
wizualnie więc to co się robi to z reguły używa się takiej gotowej
klasy visually-hidden to jest tak zwany
clip pattern no i jak to wkleimy taką gotową klasę
którą możecie znaleźć na accessibility project bardzo wiele stron internetowych o tym mówi
nie wiem szczerze mówiąc kto stworzył ten pattern kto wyszedł z
tą inicjatywą to jest ciekawa rzeczy żeby się tego dowiedzieć na własną
rękę natomiast o co tutaj chodzi no to po prostu zamiast ustawiać display none
opacity 0 czy visibility-hidden na elemencie który chcemy ukryć no to możemy
ustawić mu pozycję absolutną tak aby wyskoczył on z normalnego flow i
nie zajmował w ogóle żadnej przestrzeni w swoim kontenerze zmienić mu rozmiar
żeby zajmował tylko jeden piksel usunąć mu cały overflow czyli cały
nadmiarowy tekst który tam by się znalazł będzie niewidzialny no i można jeszcze
tutaj sclipować ten jeden piksel żeby to po prostu było zupełnie niewidzialne tutaj
jest jeszcze taki syntax dla starszych wersji przeglądarek dla ie6 i
ie7 jeżeli nie korzystacie z tych przeglądarek w waszej
pracy to znaczy wasi klienci nie korzystają z tych przeglądarek nie ma ruchu z
tych konkretnych wersji no to możecie tak naprawdę to usunąć są to dosyć stare wersję przeglądarek
więc też wydaje mi się że nie ma z tym problemu no i po zapisaniu faktycznie to nam zniknęło
ta też nie możemy nawet tutaj nawet jej zaznaczyć nie ma jej po prostu na stronie no i jeżeli
puścimy to screen readerem to zobaczmy co się stanie
tak polecimy już dalej żeby tego nie przedłużać
tak no i tutaj nie widać generalnie żadnej treści która jest dalej dla użytkownika
wizualnego natomiast jeżeli pojedziemy dalej w treści używając po
prostu normalnego skrót klawiszowy na następny element w czytniku ekranowym
to widzimy że ten
element no tutaj chromevox jakoś nam spróbował to podświetlić to generalnie jest wypozycjonowane
w ten sposób że no ciężko określić gdzie to się teraz znajduje chromevox ustalił
że jest to tam ale sama treść została przeczytana jeszcze raz
aby odkryć tą tajemnicę musisz
pokazać swoją odwagę no i tutaj za chwilę pokazujemy swoją odwagę
odkrywając ten secret
czyli nie ma sytuacji że użytkownik czytnika ekranowego jest wykluczony
z dostępu do treści może jest inny experience bo jakby
nie trzeba nic kliknąć żeby dowiedzieć sie jaki to jest secret wystarczy
po prostu dalej przeczytać natomiast lepsze jest nawet zaserwowanie innego
jakby doświadczenia niż wyłączenie go zupełnie moglibyśmy
tutaj oczywiście zrobić jakiś button który też będzie niewidzialny i który po kliknięciu
zostanie zaanonsowany w ten sam sposób też poprzez alerta natomiast
to nie chcę tego robić w tej lekcji ponieważ zajmie to więcej czasu ale używając
klasy visually-hidden możemy zrobić naprawdę wiele rzeczy możemy ukryć
właśnie w ten sposób buttony dodatkowe linki jeżeli nie chcemy z jakiegoś powodu pokazywać
linków wizualnie możemy ukrywać różne semantyczne elementy które
są przydatne generalnie dla różnych parserów silników które bazują
na markupie czytników ekranowych ale niekoniecznie chcemy je pokazywać użytkownikowi
wizualnemu bo to może być po prostu szum informacyjny w niektórych przypadkach jeśli
chodzi o kasę visually hidden to możecie ją zapamiętać nie jest aż takie długie position
absolute height i width na 1 pikseli i clip rect też na jeden piksel całość
chowamy overflowem no i jeszce ewentualnie white-space nowrap żeby to było w jednej
linii natomiast ja najczęściej po prostu wchodzę na accessibility project
i sobie stamtąd to kopiuję bądź po prostu biorę to z mojej listy snippetów które
uważam za przydatne w codziennej pracy ważne jest też że jeżeli nie trzeba duplikować
z tego kontentu na przykład w ten sposób no to możemy go pobrać sobie za
pomocą javascryptu jeśli zakładamy że aby skorzystać z tej gry tak
czy siak będzie potrzebny javascript wtedy możemy to spokojnie zrobić no i będzie to teoretycznie
mniej troszkę bajtów przesłanych do przeglądarki zakładając że nie gzipujemy
naszych requestów czyli nie nakładamy żadnego mechanizmu kompresji danych
jeżeli byśmy to zrobili być może lepiej byłoby nawet tą treść tutaj zduplikować
to wszystko w tej lekcji w kolejnej lekcji powiem jak ukrywać elementy
przed czytnikami ekranowymi ale zostawiać je
widoczne wizualne co jest bardzo często potrzebne
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%;
opacity: 0;
justify-content: center;
align-items: center;
margin: 0;
padding: 0;
display: flex;
}
.game {
position: relative;
}
.game:hover .cta {
opacity: 1;
}