{%hackmd anYwyN--TziyASUWcqP-Gw %} # Tvořím web A–Z 2: lekce 11 <span>2. 6. 2021 | 18:00 - 20:00 | Praha</span> Lekce 11 - Optimalizace stránek - rychlost, přístupnost Jan Čuma --- # Přístupnost - obecný přehled - přibližně 2% populace mají určitý druh zrakového postižení (tj. jsou slepí nebo mají značné potíže se zrakem i s použitím brýlí) - přibližně 50% populace má nějaký druh klinicky významné refrakční chyby (poškození zraku, které lze korigovat brýlemi, pokud poškození není těžké) - asi 8% mužů a 0,5% žen má nějakou formu nedostatku barevného vidění - dobrá přístupnost je zásadní pro zajištění přístupu všech uživatelů k obsahu vašich stránek a aplikací - díky dobré přístupnosti zajistíte, že váš konečný produkt bude lepší a bude fungovat pro více lidí. --- # Focus - pomáha uživateli lépe se orientovat na stránce a ovládat ji pomocí klávesnice - pořadí elementů, na které lze uplatnit focus, je dáno strukturou DOMu, ale často je nevyhovující z důvodu CSS pozicování - pořadí můžeme měnit pomocí atributu <code>tabindex</code> --- # Tab index & tab order - <code>tabindex="-1"</code> - element není součastí "tab order" (pořadí fokusovatelných elemtů), ale může být dosažitelný pomocí JS metody <code>focus()</code> - <code>tabindex="0"</code> - element je součastí "tab order" a může být dosažitelný pomocí JS metody <code>focus()</code> - focus by měl být přídáván jen interaktivním elemntům (odkazy, formulářové prvky, tlačítka, apod.) - můžeme používat i kladná čísla pro určení pořadí, ale není to doporučený postup ```htmlembedded <div id="search" tabindex="0">Search</div> ``` - "skip-links" - vhodné pro např. přeskočení dlouhých navigací --- # Elementy mimo obrazovku - vyjížděcí menu, modály, dialogová okna, apod. mohou "krást" focus - <code>document.activeElement</code> nám může pomoci najít ztracený focus - pokud nechceme, aby elementy skryté mimo obrazovku "kradli" focus, můžeme použít CSS vlastnosti <code>display: none;</code> nebo <code>visibility: hidden;</code> --- # Sémantické HTML elementy - sémantické elementy jasně popisuje svůj význam jak prohlížeči, tak vývojáři - ne-sémantické elementy nám nic neříkají o svém obsahu - existuje zhruba stovka sémantických elementů - [seznam všech elementů](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) --- ### `<section>` - sekce je tematické seskupení obsahu, obvykle s nadpisem - sekce by měla být označena obvykle zahrnutím nadpisu - pokud element používáme pouze jako obalovač stylingu, volíme raději <code>div</code> ### `<article>` - element určující nezávislý samostatný obsah - měl by fungovat samostatně a být nezávislý na zbytku webu - vhodný pro příspěvek ve fóru, blogu, nebo jako novinový článek --- ### `<header>` - element představující úvodní obsah, obvykle skupinu úvodních nebo navigačních pomůcek - může obsahovat některé prvky záhlaví, ale také logo, vyhledávací formulář, jméno autora a další prvky - stránka může obsahovat více než jeden <code>header</code> ### `<footer>` - element definující zápatí pro dokument nebo sekci - typicky může obsahovat informace o autorství, autorských právech, kontaktní informace, mapu stránek, odkazy na související dokumenty, apod. --- ### `<main>` - prvek představující dominantní obsah dokumentu - skládá se z obsahu, který přímo souvisí nebo rozšiřuje ústřední téma dokumentu - obsah by měl být unikátní v rámci dokumentu ### `<nav>` - element, který definuje sadu navigačních odkazů - primárně určen pro hlavní odkazy --- ### `<aside>` - element reprezentující část dokumentu, jejíž obsah souvisí pouze nepřímo s hlavním obsahem dokumentu - typickým příkladem je postranní panel ### `<h1>-<h6>` - nadpisy mohou být vnořeny jako podsekce, aby odrážely organizaci obsahu stránky - většina čteček obrazovky může také generovat seřazený seznam všech nadpisů na stránce, což uživateli pomůže rychle určit hierarchii obsahu - ideálně použijte pouze jeden `<h1>` element na stránce, který stručně popisuje celkový účel obsahu - nepoužívejte elementy nadpisu ke změně velikosti textu --- ### `<address>` - element zahrnující například fyzickou adresu, URL, e-mailovou adresu, telefonní číslo, popisovač sociálních médií, zeměpisné souřadnice atd --- ### Dělení obsahu - všechny předchozí elementy jsou elementy, které se používají pro členění obsahu - umožňují uspořádat obsah dokumentu na logické části - pomocí těchto elementů můžete vytvořit "osnovu" stránky --- ### `<figure>` & `<figcaption>` - <code>figure</code> specifikuje samostatný obsah, jako jsou ilustrace, diagramy, fotografie, kódu, atd. - <code>figcaption</code> definuje titulek pro element <code>figure</code> - lze jej umístit jako první nebo jako poslední podřízený prvek `<figure>` ### `<time>` - tento element představuje určité časové období - může zahrnovat atribut `datetime`, který překládá data do strojově čitelného formátu --- # ARIA - Accessible Rich Internet Applications (ARIA) - jde sada atributů, které definují způsoby, jak zpřístupnit webový obsah a webové aplikace (zejména ty vyvinuté pomocí JavaScriptu) lidem se zdravotním postižením - vhodná v případech, kdy z nějakého důvodu nemůžeme použit nativní HTML elementy --- ### ARIA - `role` atribut - <code>role</code> atribut popisuje roli prvku v programech, které jej mohou využívat, jako jsou čtečky obrazovky nebo lupy - [Seznam rolí](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques) ### ARIA - `aria-label` atribut - <code>label</code> umožňuje určit řetězec, který se má použít jako štítek (label) --- ### ARIA - `aria-labelledby` atribut - poskytuje rozšířené informace, které může uživatel potřebovat. ### ARIA - `aria-describedby` atribut - umožňuje poskytnout přístupný popis, např. nějaký další vysvětlující text --- # Kontrast - textové prvky na stránce by vždy měly mít dostatečné kontrastní poměry - minimální doporučený poměr je 4.5:1 - [kontrast](https://developer.chrome.com/docs/devtools/accessibility/reference/#contrast) # Lighthouse - auditní nástroj dostupný v Google Chrome vývojářských nástrojích - pomáhá odhalit chyby především v přístupnosti, ale i další nedostatky --- # CSS minifikace - online: https://cssminifier.com/ - pomocí rozšíření ve VS kódu: JS & CSS Minifier (Minify) --- # Konec <span>2. 6. 2021 | 18:00 - 20:00 | Praha</span> Lekce 11 - Optimalizace stránek - rychlost, přístupnost Jan Čuma
{"metaMigratedAt":"2023-06-16T01:24:57.161Z","metaMigratedFrom":"YAML","title":"Lekce 11 | Tvořím web A–Z 2","breaks":false,"lang":"cs","slideOptions":"{\"transition\":\"none\",\"theme\":\"night\",\"margin\":0.05,\"minScale\":0.1,\"maxScale\":5,\"width\":2560,\"height\":1600}","contributors":"[{\"id\":\"0770b77c-5054-4cf7-a577-a646d73ab89a\",\"add\":8130,\"del\":1500}]"}
    221 views