Jako voda

O čem to je

Tentýž web otevřeš na mobilu, tabletu i na velkém monitoru. Na mobilu má být menu schované a text v jednom sloupci. Na monitoru se vejdou tři sloupce vedle sebe.

Dělat tři různé weby by bylo drahé. Proto se dělá jeden, který se přizpůsobí šířce obrazovky. Tomu se říká responzivní design. Většina lidí dnes na web chodí z mobilu, takže bez toho se neobejdeš.

Nové pojmy

Responzivní designZpůsob tvorby webu, kdy se rozvržení samo přizpůsobí šířce okna nebo zařízení.Na mobilu jeden sloupec, na monitoru tři.
ViewportViditelná plocha okna prohlížeče, ve které se stránka zobrazuje.Na mobilu má viewport šířku kolem 360–430 CSS pixelů.

Buď jako voda

Voda nemá svůj tvar. Nalij ji do sklenice a má tvar sklenice. Responzivní web taky nemá pevnou šířku. Vyplní okno, které dostane. K tomu slouží tři nástroje.

1. Meta viewport

Mobilní prohlížeče kdysi předstíraly široký displej a stránku zmenšily. Tenhle řádek do <head> jim řekne: „Použij skutečnou šířku zařízení.“

Jak zní řádek meta viewport?
<meta name="viewport" content="width=device-width, initial-scale=1">. Bez něj se na mobilu zobrazí zmenšená „desktopová“ stránka a media queries nebudou fungovat, jak čekáš.

2. Pružné jednotky

Relativní jednotkaVelikost vyjádřená vůči něčemu jinému, ne v pevných pixelech.% = procento rodiče, rem = násobek velikosti písma kořenového elementu, vw = procento šířky viewportu.
JednotkaVůči čemuPříklad
%rozměr rodičewidth: 50%
emvelikost písma (u font-size písma rodiče)padding: 1em
remvelikost písma kořenového elementu html (v prohlížečích obvykle 16 px)font-size: 1.5rem = 24 px při 16 px
vw / vh1 % šířky / výšky viewportuwidth: 100vw

Obrázek, který nesmí přetéct z úzkého displeje: img { max-width: 100%; height: auto; }.

3. Media queries

Media queryPodmínka v CSS: „tato pravidla použij, jen když…“ (např. je viewport aspoň tak široký).@media (min-width: 768px) { … }
Breakpoint (zlomový bod)Šířka, při které se rozvržení mění. Volí se podle obsahu (kdy se rozvržení začne rozpadat), ne podle konkrétního modelu telefonu.Např. 600 px a 1000 px.
Karty mají být na mobilu pod sebou a od šířky 768 px ve třech sloupcích. Napiš CSS.
.karty { display: grid; gap: 16px; } platí pro všechny. @media (min-width: 768px) { .karty { grid-template-columns: repeat(3, 1fr); } } přidá sloupce jen na širších displejích.

Roztřiď jednotky. Ptej se: mění se velikost, když se změní okno nebo písmo?

✗Responzivní web = pro mobil udělám zvláštní web m.skola.cz.
✓Responzivní web je jeden web s jedním HTML, jehož CSS se přizpůsobí šířce.

Dva weby znamenají dvojí práci a obsah se rozchází. Responzivní design řeší všechny šířky jedním kódem.

Responzivní web se přizpůsobí šířce: meta viewport, pružné jednotky (%, rem, vw, max-width: 100%) a media queries, které při breakpointech mění rozvržení.

Mobile first

O čem to je

Máš navrhnout web pro pekárnu. Zákazníci ho otevírají hlavně na mobilu cestou do práce. Začneš tedy u malé obrazovky a teprve pak přidáváš pro větší. Tomuto postupu se říká mobile first.

Nové pojmy

Viewport a meta viewportViewport je viditelná plocha prohlížeče. Meta viewport v <head> řekne mobilu, ať použije skutečnou šířku zařízení.<meta name="viewport" content="width=device-width, initial-scale=1">
Media queryBlok @media (podmínka) { … }. Pravidla uvnitř platí jen, když je podmínka splněná.@media (min-width: 900px) { … } – jen pro viewport široký aspoň 900 px.
BreakpointŠířka, při které se rozvržení mění.Při 600 px se karty seřadí do dvou sloupců.
Mobile firstNejdřív napíšeš styly pro nejmenší displej, bez media query. Pro větší displeje je přidáváš pomocí min-width.Opak, desktop first, začíná širokým displejem a pro menší ubírá pomocí max-width.

Postup

Do <head> dej meta viewport.
Napiš základní CSS pro mobil: jeden sloupec, čitelné písmo, velká tlačítka.
Obrázkům nastav max-width: 100%, ať nepřetékají.
Zvětšuj okno, dokud rozvržení nezačne vypadat špatně. Tam je breakpoint.
Přidej @media (min-width: …) a v něm jen to, co se mění.
Opakuj pro další šířky a otestuj na skutečném telefonu i v nástrojích pro vývojáře.
Menu pekárny: na mobilu odkazy pod sebou, od 600 px vedle sebe. Napiš CSS stylem mobile first.
nav { display: flex; flex-direction: column; } – základ pro mobil. @media (min-width: 600px) { nav { flex-direction: row; } } – na větších displejích vedle sebe.
Kořenový element má písmo 16 px. Kolik pixelů je 2.5rem a kolik 50vw na displeji širokém 400 px?
2.5rem = 2,5 · 16 = 40 px. 50vw = 50 % ze 400 px = 200 px.

Proč zrovna min-width

Při mobile first se pravidla jen přidávají. Mobil stáhne a použije nejjednodušší styly a nic se nepřepisuje tam a zpátky. Zároveň tě to nutí rozmyslet, co je na stránce opravdu důležité.

Doplň mezery a ověř si, že rozumíš principu.

✗Breakpointy nastavím přesně na šířky iPhonu a Samsungu, které znám.
✓Breakpointy dej tam, kde se rozvržení tvého obsahu začne rozpadat.

Zařízení jsou stovky a každý rok přibývají nová. Rozvržení navázané na obsah funguje na všech.

Mobile first: základní CSS pro mobil, pro větší displeje přidávat pravidla v @media (min-width: …). Nezapomeň na meta viewport, pružné jednotky a breakpointy podle obsahu.