Lekce 2.1

UX/UI principy

Typografie, barva, mezery, hierarchie a zarovnání jako stavební kameny rozhraní. Na závěr oprava stránky, která funguje, ale nevypadá.

Typografie

Většina webu je text. Než začneme řešit barvy a obrázky, naučme se text sázet tak, aby se dobře četl a aby na první pohled bylo jasné, co je nadpis a co ne. Pomůžou nám k tomu tři věci: škála velikostí, řádkování a rozumný výběr písem.

Nejdřív dva pojmy, které se často pletou. UI (user interface) je rozhraní, tedy to, co na obrazovce vidíme: písmo, barvy, tlačítka. UX (user experience) je zkušenost, tedy jak se nám s tím rozhraním pracuje. Hezké UI se špatným UX existuje a obráceně taky. V téhle lekci se budeme věnovat UI, na UX dojde v příští.

Typografická škála

Velikosti písma si nevymýšlíme pro každý nadpis zvlášť. Zvolíme základní velikost a poměr a další stupně z nich spočítáme násobením:

css
:root {
  /* základ 16 px, poměr 1,25 */
  --text-s: 0.8rem;    /* 12,8 px */
  --text-m: 1rem;      /* 16 px */
  --text-l: 1.25rem;   /* 20 px */
  --text-xl: 1.563rem; /* 25 px */
  --text-2xl: 1.953rem; /* 31,25 px */
  --text-3xl: 2.441rem; /* 39 px */
}

Každý stupeň je o čtvrtinu větší než předchozí. Takové škále se říká modulární (modular scale) a poměr 1,25 se jmenuje velká tercie, protože si názvy půjčuje z hudby. Menší poměr (1,2) dává klidnější stránku, větší (1,333 nebo 1,5) dramatičtější nadpisy.

Dva sloupce s ukázkou nadpisu, podnadpisu a odstavce. Vlevo mají velikosti 18, 17 a 16 pixelů a vypadají skoro stejně, takže nadpis se mezi textem ztrácí. Vpravo stojí škála s poměrem 1,25: nadpis 31 pixelů, podnadpis 20 pixelů a odstavec 16 pixelů, takže je hned vidět, co je nadpis.

Škála má dvě výhody. Velikosti k sobě ladí, protože vznikly ze stejného poměru. A je jich málo, takže se nestane, že na stránce máme písmo 15, 16, 17 a 18 pixelů a nikdo neví proč.

Skutečnou škálu najdeme třeba v Design systému gov.cz, podle kterého se staví weby české státní správy. Má základ 16 px a nadpisy 18, 20, 24, 32 a 40 px. Není přesně modulární, ale stupňů je pár a jsou pevně dané.

Proč v rem

Jako rychlé opáčko z lekce o relativních jednotkách: rem je násobek velikosti písma kořenového prvku html. Ta je ve výchozím stavu 16 px, takže 1rem je 16 px a 1.25rem je 20 px.

css
/* chyba, nastavení prohlížeče se neprojeví */
h2 { font-size: 20px; }

/* správně, s nastavením prohlížeče se zvětší */
h2 { font-size: 1.25rem; }

Výchozí velikost písma si dá každý nastavit v prohlížeči, a lidé se slabším zrakem to opravdu dělají. Písmo v rem se s tím nastavením zvětší, písmo v px zůstane drobné. Proto velikosti písma píšeme v rem a pixely v komentářích u škály slouží jen pro představu.

Škála na mobilu

Nadpis o velikosti 39 px vypadá na monitoru akorát, ale na telefonu se do řádku vejdou dvě slova. Největší stupně škály proto necháme růst s šířkou okna. Fluidní typografii přes clamp() už znáte, tady ji jen zapojíme do škály:

css
:root {
  /* nejméně 25 px, nejvíc 39 px, mezi tím podle šířky okna */
  --text-3xl: clamp(1.563rem, 1rem + 2.5vw, 2.441rem);
}

Nadpis se drží mezi 25 a 39 px a mezi tím roste s šířkou okna. Díky 1rem v prostřední hodnotě nezapomene ani na velikost písma nastavenou v prohlížeči. Zmenšovat se vyplatí jen velké stupně, běžný text zůstává na 1rem všude.

Řádkování

Řádkování (line-height) je výška řádku vzhledem k velikosti písma. Pro odstavce se hodí zhruba 1,5, pro nadpisy méně:

css
body {
  line-height: 1.5;
}

h1,
h2,
h3 {
  /* velké písmo potřebuje menší řádkování, jinak se nadpis rozpadne */
  line-height: 1.2;
}

Hodnotu píšeme bez jednotky. Číslo 1.5 se pak přepočítá pro každý prvek podle jeho vlastní velikosti písma, kdežto 24px by zdědil i nadpis o velikosti 40 px a řádky by se mu překrývaly.

S řádkováním souvisí délka řádku. Oko se na konci dlouhého řádku těžko trefuje na začátek dalšího, proto se odstavce omezují na 45 až 75 znaků. V CSS na to máme jednotku ch, což je šířka znaku nula:

css
p {
  max-width: 65ch;
}

Párování písem

Na jednu stránku stačí jedna rodina písma, nanejvýš dvě. Jedna rodina s několika řezy (regular, medium, bold) zvládne nadpisy i text a nic nepokazí.

Když chceme dvě, mají se od sebe zřetelně lišit. Klasická dvojice je patkové písmo (serif) na nadpisy a bezpatkové (sans-serif) na text, nebo obráceně. Dvě podobná bezpatková písma vedle sebe působí jako chyba, ne jako záměr.

css
:root {
  --font-heading: "Merriweather", Georgia, serif;
  --font-body: "Inter", system-ui, sans-serif;
}

Za názvem písma vždy stojí náhradní písma pro případ, že se webové písmo nenačte. Pozor taky na češtinu: písmo musí mít háčky a čárky, jinak se ř a ů vysází jiným písmem a v textu svítí jako záplata. Na Google Fonts se dá vyhledávání omezit na písma s podporou jazyka.

Bonus

Škálu nemusíte počítat ručně. Nástroj Typescale ukáže, jak vypadá text v různých poměrech, a vygeneruje k nim CSS. Zkuste si v něm porovnat poměr 1,2 a 1,5.