font-family, font-size, font-weight, line-height, letter-spacing, text-transform, text-decoration, text-align, white-space — vše o textu v CSS.
Vždy font stack: preferovaný → záložní → generický. Variable fonts = jeden soubor pro všechny váhy.
Specifikuje font. Vždy dejte font stack — záložní fonty pokud hlavní není dostupný. Generická rodina (sans-serif, serif, monospace) musí být vždy poslední. Variable fonts = jeden soubor pro všechny váhy a styly — výrazně menší stahování.
sans-serif — čistý moderní text
serif — tradiční s patkami
monospace — kód, terminál
system-ui — systémový font
/* Google Fonts */
@import url("https://fonts.googleapis.com/
css2?family=Inter:wght@400;500;700");
body { font-family: 'Inter', sans-serif; }
/* Systémový font stack (doporučeno) */
body {
font-family:
-apple-system,
BlinkMacSystemFont,
'Segoe UI',
Roboto,
'Helvetica Neue',
Arial,
sans-serif;
}
/* Monospace stack pro kód */
code, pre {
font-family:
'JetBrains Mono',
'Fira Code',
Consolas,
'Courier New',
monospace;
}
/* Variable font — jeden soubor */
@font-face {
font-family: 'Inter';
src: url('Inter.woff2') format('woff2');
font-weight: 100 900; /* rozsah vah */
font-style: normal;
font-display: swap; /* zabrání FOIT */
}
/* Víc fontů na jedné stránce */
h1, h2, h3 {
font-family: 'Playfair Display', serif;
}
body {
font-family: 'Source Sans Pro', sans-serif;
}
rem pro přístupnost, em pro komponenty, clamp() pro fluid typography bez media queries.
rem = relativní k root (html) font-size — preferováno pro přístupnost (respektuje user nastavení prohlížeče). em = relativní k rodiči (hnízdí!). px = pevné (přepíše user preference). clamp() = fluid typography bez media queries.
clamp(1rem, 2.5vw, 1.5rem) — mění se s šířkou okna
clamp(1.5rem, 5vw, 3rem) — fluid nadpis
/* REM — doporučeno */
body { font-size: 1rem; } /* 16px */
h1 { font-size: 2.5rem; } /* 40px */
h2 { font-size: 1.875rem; } /* 30px */
small { font-size: 0.875rem; } /* 14px */
/* Fluid typography s clamp */
h1 {
font-size: clamp(1.75rem, 5vw, 3.5rem);
/* min: 28px, preferred: 5vw, max: 56px */
}
p {
font-size: clamp(1rem, 1.2vw, 1.125rem);
/* Jemně roste s viewportem */
}
/* EM pro komponenty (škáluje s rodiče) */
.btn {
font-size: 1rem;
padding: 0.75em 1.5em; /* roste s btn font-size */
}
.btn-large { font-size: 1.25rem; }
/* padding se automaticky přizpůsobí! */
/* Typografická škála s CSS proměnnými */
:root {
--text-xs: clamp(0.75rem, 1vw, 0.875rem);
--text-sm: clamp(0.875rem, 1.2vw, 1rem);
--text-base: clamp(1rem, 1.5vw, 1.125rem);
--text-lg: clamp(1.125rem, 2vw, 1.25rem);
--text-xl: clamp(1.25rem, 2.5vw, 1.5rem);
--text-2xl: clamp(1.5rem, 4vw, 2rem);
--text-3xl: clamp(1.875rem, 5vw, 3rem);
}
100–900 numericky. 400 = normal, 700 = bold. Načtěte jen potřebné váhy z Google Fonts.
Numerické hodnoty 100–900 (krok 100). Klíčová slova: normal (400), bold (700), bolder, lighter. Variable fonts podporují libovolnou hodnotu 1–1000. Načtěte jen váhy které používáte — každá váha = extra HTTP request nebo větší soubor.
300 — Light: lehký text pro doplňkový obsah
400 — Regular: základní čtecí váha
500 — Medium: mírně zdůrazněný
600 — SemiBold: tlačítka, labely
700 — Bold: nadpisy, důležitý text
800 — ExtraBold: display nadpisy
/* Google Fonts — specifikovat váhy */
@import url(".../css2?family=Inter:wght@300;400;500;600;700");
body { font-weight: 400; }
.label { font-weight: 500; }
.btn { font-weight: 600; }
h1, h2 { font-weight: 700; }
.display { font-weight: 800; }
/* Variable font — animovatelné */
@font-face {
font-family: 'Inter';
src: url('Inter-Variable.woff2')
format('woff2');
font-weight: 100 900;
}
/* Hover efekt na font-weight */
.nav-link {
font-weight: 400;
transition: font-weight 0.15s;
}
.nav-link:hover { font-weight: 600; }
/* Pozor: může způsobit layout shift! */
/* Řešení: font-variation-settings nebo */
/* -webkit-text-stroke místo weight */
Bezjednotkové hodnoty jsou nejlepší — dědí se správně. 1.5–1.7 pro text, 1.1–1.2 pro nadpisy.
Bezjednotkové hodnoty (1.5) jsou nejlepší — jsou násobkem font-size a dědí se správně na children. Hodnoty s jednotkami (px, em) jsou fixní a neškálují s font-size children. WCAG doporučuje minimálně 1.5 pro čtecí text.
line-height: 1 — velmi těsné, obtížně čitelné pro delší text
line-height: 1.5 — WCAG minimum, přijatelné pro čtecí text
line-height: 1.7 — pohodlné čtení, vzdušný text pro delší obsah
/* Globální nastavení */
body { line-height: 1.6; }
/* Nadpisy — těsnější */
h1, h2, h3 { line-height: 1.2; }
h4, h5, h6 { line-height: 1.3; }
/* Tlačítka */
.btn { line-height: 1; }
/* Článkový text */
.article-body { line-height: 1.75; }
/* WCAG minimum */
.accessible-text { line-height: 1.5; }
/* ❌ Fixní px — neškáluje */
p { line-height: 24px; }
/* ✅ Bezjednotkové — škáluje */
p { line-height: 1.6; }
Mezery mezi znaky. em hodnoty škálují s font-size. Uppercase textu: +0.05–0.15em.
letter-spacing mění mezery mezi znaky. em hodnoty jsou nejlepší — škálují s font-size. Velká písmena: +0.05–0.15em pro lepší čitelnost. Velké nadpisy: záporné hodnoty (moderní estetika). Nepoužívejte px — nešká luje.
Normal — žádné prostrkání
LABEL — 0.1em uppercase
Tight Heading -0.03em
SPACED · · ·
/* Uppercase label — klasický UI */
.label {
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.75rem;
font-weight: 600;
}
/* Tight heading — moderní */
.hero-title {
font-size: clamp(2rem, 8vw, 6rem);
font-weight: 800;
letter-spacing: -0.03em;
}
/* Display — velký text */
.display-text {
font-size: 4rem;
letter-spacing: -0.05em;
}
/* Monospace kód */
code {
font-family: monospace;
letter-spacing: 0.02em; /* trochu více prostoru */
}
/* word-spacing */
.spaced-words {
word-spacing: 0.3em;
}
uppercase, lowercase, capitalize. Jen vizuální — DOM text se nemění. Screen reader čte originál.
text-transform mění vizuální podobu textu. DOM text zůstává nezměněn — screen reader přečte originální text. capitalize = první písmeno každého slova. fullWidth = proporcionální → monospace (pro CJK písma).
none — Původní text zůstane
UPPERCASE — celé velké
lowercase — celé malé
Capitalize — První Písmeno Každého Slova
/* Uppercase badges a labely */
.badge, .tag {
text-transform: uppercase;
letter-spacing: 0.08em;
font-size: 0.7rem;
font-weight: 700;
}
/* Navigace */
.nav a {
text-transform: uppercase;
font-size: 0.8rem;
letter-spacing: 0.05em;
}
/* Nadpisy jako uppercase */
h6 {
text-transform: uppercase;
letter-spacing: 0.1em;
color: #888;
}
/* Dynamická data zachovají case v DOM */
/* Screen reader: "Jana Nováková" */
/* Vizuálně: "JANA NOVÁKOVÁ" */
.username {
text-transform: uppercase;
}
underline, line-through, overline. Shorthand pro -line, -color, -style, -thickness. text-underline-offset pro mezeru.
text-decoration shorthand pokrývá: -line (underline, line-through, overline), -color (barva nezávislá na color), -style (solid, wavy, dotted, dashed, double), -thickness. text-underline-offset posune podtržení dál od textu.
Wavy žluté podtržení
Přeškrtnutý text (cena) → Nová cena
Dotted podtržení pro zkratky
/* Čistý odkaz */
a {
text-decoration: none;
color: #2563EB;
}
a:hover {
text-decoration: underline;
text-underline-offset: 3px;
}
/* Vlastní stylované podtržení */
.fancy-link {
text-decoration: underline;
text-decoration-color: #F59E0B;
text-decoration-style: wavy;
text-decoration-thickness: 2px;
text-underline-offset: 4px;
}
/* Shorthand */
.link {
text-decoration: underline dotted #888;
}
/* Přeškrtnutá cena */
.old-price {
text-decoration: line-through;
color: #999;
}
/* Zkratka s dotted */
abbr[title] {
text-decoration: underline dotted;
cursor: help;
}
/* Přepsat barvu dekorace */
.highlight {
color: #333;
text-decoration-color: #F59E0B;
text-decoration-line: underline;
}
text-align: left/center/right/justify. white-space: nowrap pro ellipsis, pre-wrap pro zachování mezer.
text-align zarovná text horizontálně. white-space řídí jak se text zalamuje a jak se zachází s bílými znaky. nowrap zabrání zalomení — nutné pro text-overflow: ellipsis. pre-wrap zachová mezery a zalomí na konci.
/* Text zarovnání */
.left { text-align: left; }
.center { text-align: center; }
.right { text-align: right; }
.justify { text-align: justify; }
/* RTL-friendly (moderní) */
.content { text-align: start; }
/* Ellipsis — zkrácení textu */
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 200px;
}
/* Víceřádkový ellipsis */
.clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* Zachovat formátování (komentáře, kód) */
.user-content {
white-space: pre-wrap;
word-break: break-word;
}
/* Nepřerušit text (tagline, nadpis) */
.no-break { white-space: nowrap; }
/* word-break pro dlouhá slova / URL */
.url-display {
word-break: break-all;
overflow-wrap: anywhere;
}
/* === TYPOGRAFICKÝ ZÁKLAD === */
/* 1. Reset a box-sizing */
*, *::before, *::after { box-sizing: border-box; }
/* 2. Globální typografie */
:root {
/* Fonty */
--font-sans: -apple-system, BlinkMacSystemFont,
'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', Consolas, monospace;
/* Fluid velikosti */
--text-sm: clamp(0.875rem, 1vw, 0.9375rem);
--text-base: clamp(1rem, 1.2vw, 1.0625rem);
--text-lg: clamp(1.125rem, 1.5vw, 1.25rem);
--text-xl: clamp(1.25rem, 2vw, 1.5rem);
--text-2xl: clamp(1.5rem, 3vw, 2rem);
--text-3xl: clamp(2rem, 5vw, 3.5rem);
}
/* 3. Base styly */
body {
font-family: var(--font-sans);
font-size: var(--text-base);
line-height: 1.6;
color: #1a1a2e;
-webkit-font-smoothing: antialiased;
}
/* 4. Nadpisy */
h1, h2, h3, h4, h5, h6 {
line-height: 1.2;
font-weight: 700;
letter-spacing: -0.02em;
}
h1 { font-size: var(--text-3xl); }
h2 { font-size: var(--text-2xl); }
h3 { font-size: var(--text-xl); }
h4 { font-size: var(--text-lg); }
/* 5. Odstavce */
p { margin-bottom: 1em; }
p:last-child { margin-bottom: 0; }
/* 6. Kód */
code {
font-family: var(--font-mono);
font-size: 0.875em;
background: #f3f4f6;
padding: 0.1em 0.3em;
border-radius: 3px;
}
/* 7. Utility třídy */
.text-sm { font-size: var(--text-sm); }
.text-lg { font-size: var(--text-lg); }
.font-bold { font-weight: 700; }
.uppercase { text-transform: uppercase; letter-spacing: 0.08em; }
.truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }