Barvy a pozadí

Doba čtení: cca 3 min

Barvy jsou jednou z nejviditelnějších součástí CSS – ale zároveň jednou z těch, kde se nejčastěji dělají chyby. Ne designové, ale přístupnostní. Špatný kontrast dokáže web znepřístupnit pro miliony lidí. Tato lekce tě provede tím, jak barvy v CSS definovat a jak je používat správně.

Způsoby zápisu barev

CSS nabízí několik způsobů, jak barvu zapsat. Všechny jsou rovnocenné – použij ten, který ti nejvíce vyhovuje.

Jménem (keyword)

CSS zná přes 140 pojmenovaných barev. Hodí se pro rychlé prototypování nebo jednoduchý kód:

color: red;
color: navy;
color: goldenrod;
color: transparent;

Hexadecimální kód (HEX)

Nejběžnější způsob zápisu barvy ve webdesignu. Mřížka následovaná šesti znaky – každé dva znaky popisují složku červené, zelené a modré (RGB):

color: #ff0000;   /* červená */
color: #000000;   /* černá */
color: #ffffff;   /* bílá */
color: #333333;   /* tmavě šedá */

Pokud se každé dvojice opakují, lze je zkrátit na tři znaky: #333333#333.

RGB a RGBA

Barva definovaná složkami červené, zelené a modré (0–255). RGBA přidává alfa kanál pro průhlednost (0 = zcela průhledná, 1 = zcela neprůhledná):

color: rgb(51, 51, 51);
background-color: rgba(0, 0, 0, 0.5);   /* černá s 50% průhledností */

HSL a HSLA

Barva definovaná odstínem (0–360°), sytostí a světlostí. Intuitivnější pro ruční úpravy než HEX:

color: hsl(220, 70%, 30%);
background-color: hsla(220, 70%, 30%, 0.8);

Vlastnosti pro barvy a pozadí

color

Barva textu prvku a jeho potomků:

p {
  color: #333333;
}

background-color

Barva pozadí prvku:

header {
  background-color: #1a1a2e;
}

background-image

Obrázek jako pozadí. Lze použít také CSS přechody (gradienty):

/* Obrázek */
body {
  background-image: url('pozadi.jpg');
  background-size: cover;
  background-position: center;
}

/* Gradient */
header {
  background-image: linear-gradient(135deg, #1a1a2e, #16213e);
}

background-repeat

Určuje, zda se obrázek opakuje. Výchozí hodnota je repeat; pro nedekorativní obrázky se hodí no-repeat.

Kontrast a přístupnost

Výběr barev není jen estetická záležitost. Nedostatečný kontrast mezi textem a pozadím je jedním z nejčastějších přístupnostních problémů na webu.

Standard WCAG AA požaduje:

  • Kontrast alespoň 4,5 : 1 pro normální text.
  • Kontrast alespoň 3 : 1 pro velký text (18px tučně nebo 24px normálně).
  • Kontrast alespoň 3 : 1 pro grafické prvky a ikony nesoucí informaci.

Kontrast svých barev lze zkontrolovat například nástrojem WebAIM Contrast Checker (webaim.org/resources/contrastchecker).

Důležité: barva nesmí být jediným způsobem, jak se přenáší informace. Například chyba ve formuláři označená jen červenou barvou (bez textu „Toto pole je povinné“) je nepřístupná pro barvoslepé uživatele.

CSS proměnné pro barvy

Pokud používáš stejnou barvu na více místech, vyplatí se definovat ji jako CSS proměnnou. Změna barvy pak stačí provést na jednom místě:

:root {
  --barva-primerni: #daa520;
  --barva-text: #222222;
  --barva-pozadi: #ffffff;
}

body {
  color: var(--barva-text);
  background-color: var(--barva-pozadi);
}

.btn-gold {
  background-color: var(--barva-primerni);
}

Tip od Zdeňka

Zdeněk radí: Kontrast vždy zkontroluj nástrojem, nespoléhej na odhad od oka. Barvy, které na monitoru vypadají čitelně, mohou mít kontrast 2 : 1 – a to nestačí. Na tomto webu používám CSS proměnné pro všechny klíčové barvy. Díky tomu funguje tmavý i světlý režim: stačí přepnout hodnoty proměnných a celý web se přizpůsobí automaticky.