// csstahak/ · 05 z 10

Barvy & Pozadí

color, background, gradient, opacity, filter, mix-blend-mode — všechny formáty barev, gradientech a vizuálních efektech v CSS.

Formáty barev

hex, rgb, hsl, oklch, currentColor

oklch = nejmodernější, perceptuálně rovnoměrný. currentColor dědí barvu rodičovského elementu.

CSS podporuje mnoho formátů barev. hex je nejrozšířenější. hsl je lidsky intuitivní (hue, saturation, lightness). oklch je nejmodernější — perceptuálně rovnoměrný, ideální pro design systémy. currentColor dědí barvu text color.

// Proč oklch?HSL: stejné L neznamená stejnou vnímanou světlost (modrá 50% L vypadá tmavší než žlutá 50% L). OKLCH: skutečně perceptuálně rovnoměrný. Barvy generované s oklch jsou konzistentnější pro design systémy. Podpora: všechny moderní prohlížeče.
Živá ukázka — stejná barva různě
#F75B9E
rgb(247,91,158)
hsl(333,91%,66%)
oklch(67%…)
Průhlednost — alpha kanál
alpha 1.0
alpha 0.7
alpha 0.4
alpha 0.15
  • hex 8 znaků = #RRGGBBAA (průhlednost)
  • hsl = intuitivní pro ladění barev ručně
  • oklch = pro design systémy a CSS proměnné
  • currentColor = zdědí color rodiče (pro ikony!)
Přehled formátů
CSS
/* HEX */
color: #F75B9E;       /* 6 znaků */
color: #F75B9E80;     /* 8 znaků = +alpha 50% */
color: #F59;          /* 3 znaky = zkratka */

/* RGB */
color: rgb(247, 91, 158);
color: rgb(247 91 158);         /* nová syntaxe */
color: rgb(247 91 158 / 0.5);   /* + alpha */
color: rgba(247, 91, 158, 0.5); /* starý způsob */

/* HSL (Hue, Saturation, Lightness) */
color: hsl(333, 91%, 66%);
color: hsl(333deg 91% 66%);         /* s deg */
color: hsl(333 91% 66% / 0.5);      /* + alpha */
color: hsla(333, 91%, 66%, 0.5);    /* starý */

/* OKLCH — nejmodernější */
color: oklch(67% 0.22 340deg);
/* lightness%, chroma, hue */

/* Klíčová slova */
color: red;
color: transparent;
color: currentColor; /* zdědí color */

/* Systémové barvy */
color: Canvas;      /* pozadí systému */
color: CanvasText;  /* text systému */

/* currentColor — ideální pro SVG ikony */
.icon svg {
  fill: currentColor; /* barva dle textu */
}
.btn { color: blue; }
/* ikona uvnitř .btn bude automaticky modrá */
color

Barva textu

Dědí se (inherit). WCAG: min. kontrast 4.5:1 pro normální text, 3:1 pro velký. Nastavte na body.

inherit

color nastavuje barvu textu a je klíčovou vlastností pro přístupnost. WCAG AA: minimální kontrast 4.5:1 (normální text), 3:1 (velký text 18px+ nebo 14px+ bold). Nástroje: Chrome DevTools, Colour Contrast Analyser.

// color vs opacity pro průhlednostcolor: rgba(0,0,0,0.5) = poloprůhledný text. opacity: 0.5 = celý element poloprůhledný (text i pozadí). Pokud chcete jen průhledný text, použijte rgba/hsla, nikoli opacity.
Kontrastní poměry WCAG
Nedostatečný kontrast ❌

Světle šedý text

kontrast ~2.3:1

Dostatečný kontrast ✅

Tmavý text na bílé

kontrast ~12.6:1

  • WCAG AA: 4.5:1 (text), 3:1 (velký text)
  • WCAG AAA: 7:1 (text), 4.5:1 (velký text)
  • Zkontrolujte: webaim.org/resources/contrastchecker
  • color-scheme: light dark; pro dark mode
Příklady
CSS
/* Základ na body */
body { color: #1a1a2e; }

/* Muted text */
.muted { color: #6b7280; }
.placeholder { color: #9ca3af; }

/* Průhledný text */
.overlay-text {
  color: rgba(255, 255, 255, 0.8);
}

/* Barevný text */
.primary { color: #2563EB; }
.success { color: #16a34a; }
.danger  { color: #dc2626; }
.warning { color: #d97706; }

/* Dark mode */
@media (prefers-color-scheme: dark) {
  body { color: #f3f4f6; }
  .muted { color: #9ca3af; }
}

/* currentColor pro ikony */
.btn {
  color: #2563EB;
}
.btn svg {
  fill: currentColor;
  width: 1em;
  height: 1em;
}
background

Pozadí elementu

Shorthand: barva, obrázek, pozice, velikost, repeat. Víc pozadí najednou. background-clip pro text efekty.

animatable

background shorthand zahrnuje: barvu, obrázek, pozici, velikost, opakování, origin, clip. Více pozadí najednou oddělených čárkou — první je nahoře. background-clip: text umožňuje gradient text efekt.

Longhand vlastnosti
background-color
background-image
background-position
background-size
background-repeat
background-origin
background-clip
background-attachment
background-size hodnoty
auto cover ← vyplnit celé contain ← celý viditelný px / %
  • background-size: cover + position: center = hero obrázek
  • background-clip: text = gradient text efekt
  • background-attachment: fixed = parallax efekt
  • Více pozadí: první v pořadí je nahoře
Příklady
CSS
/* Barva */
.box { background: #f3f4f6; }
.box { background-color: #f3f4f6; }

/* Hero obrázek */
.hero {
  background-image: url('hero.jpg');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

/* Shorthand */
.hero {
  background: url('hero.jpg')
    center/cover no-repeat;
}

/* Více pozadí */
.multi {
  background:
    url('overlay.png') center/cover,
    url('texture.jpg') repeat,
    #1a1a2e;
}

/* Gradient text efekt */
.gradient-text {
  background: linear-gradient(
    135deg, #667eea, #764ba2
  );
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}

/* Parallax */
.parallax {
  background-attachment: fixed;
  background-size: cover;
}

/* CSS pattern (čtverce) */
.pattern {
  background-color: #f5f5f5;
  background-image:
    linear-gradient(45deg, #ddd 25%, transparent 25%),
    linear-gradient(-45deg, #ddd 25%, transparent 25%);
  background-size: 20px 20px;
}
gradient

Přechody barev

linear-gradient, radial-gradient, conic-gradient. Lze skládat. Nejedná se o barvu ale o obrázek (background-image).

Gradienty jsou hodnoty background-image, ne background-color. Lze kombinovat více gradientů i s obrázky. linear-gradient = přímočarý přechod. radial-gradient = kruhovitý. conic-gradient = kuželový (jako koláčový graf).

// Transparentní v gradientuVyvarujte se transparent klíčového slova v CSS gradientech — je to ve skutečnosti rgba(0,0,0,0) = průhledná ČERNÁ. To způsobuje šedé/černé pruhy. Místo toho: rgba(barva, 0) nebo hsla(barva, 0%).
Živá ukázka
linear →
135deg
radial
conic
overlay
repeat
  • transparent = rgba(0,0,0,0) — černá mezera!
  • Použijte rgba(barva, 0) pro průhlednou bez pruhu
  • conic-gradient pro koláčový graf (CSS only)
  • repeating-linear-gradient pro CSS vzory
Příklady
CSS
/* Linear gradient */
background: linear-gradient(
  to right, #667eea, #764ba2
);
background: linear-gradient(
  135deg, #f093fb 0%, #f5576c 100%
);

/* Více zastávek */
background: linear-gradient(
  to bottom,
  #667eea 0%,
  #764ba2 50%,
  #f5576c 100%
);

/* ✅ Průhledný bez černého pruhu */
background: linear-gradient(
  to bottom,
  rgba(0, 0, 0, 0.8),
  rgba(0, 0, 0, 0) /* ne: transparent! */
);

/* Radial gradient */
background: radial-gradient(
  circle at center,
  #667eea 0%, #764ba2 100%
);
background: radial-gradient(
  ellipse 80% 60% at 50% 50%,
  #667eea, #764ba2
);

/* Conic gradient */
background: conic-gradient(
  #f75b9e 0%,
  #5bf7a2 33%,
  #5b9ef7 66%,
  #f75b9e 100%
);

/* Koláčový graf (25% / 75%) */
.pie {
  background: conic-gradient(
    #f75b9e 90deg,
    #5b9ef7 90deg
  );
  border-radius: 50%;
  width: 100px;
  height: 100px;
}

/* CSS pattern přes gradient */
.stripe {
  background: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 10px,
    rgba(0,0,0,0.05) 10px,
    rgba(0,0,0,0.05) 20px
  );
}
opacity

Průhlednost celého elementu

0 = neviditelný, 1 = plně viditelný. Ovlivní celý element i children. Pro samotnou barvu použijte rgba/hsla.

animatable

opacity nastaví průhlednost celého elementu včetně všech children a pozadí. Jinak než rgba/hsla — opacity 0.5 udělá poloprůhledné vše (text, border, background). opacity: 0 je neviditelné ale stále v DOM a klikatelné (na rozdíl od display: none).

// opacity 0 vs visibility: hidden vs display: noneopacity: 0 = neviditelné, klikatelné, v DOM, animovatelné. visibility: hidden = neviditelné, neklikatelné, zabírá místo. display: none = odstraněno z layoutu, neklikatelné. Pro fade animaci: opacity 0→1 + visibility hidden→visible.
Hodnoty
0 (neviditelné) 0.5 (50%) 1 (plné) 0–1
Živá ukázka
1.0
0.75
0.5
0.25
0.1
  • opacity 0 = neviditelné ale stále klikatelné!
  • Pro animace fade: opacity + visibility kombinovat
  • rgba() = průhledná jen barva, ne celý element
  • Disabled prvky: opacity: 0.5 + pointer-events: none
Příklady
CSS
/* Disabled stav */
.btn:disabled {
  opacity: 0.5;
  pointer-events: none;
  cursor: not-allowed;
}

/* Hover efekt */
.card { opacity: 1; transition: opacity 0.2s; }
.card:hover { opacity: 0.85; }

/* Fade in animace */
.modal {
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s, visibility 0.3s;
}
.modal.open {
  opacity: 1;
  visibility: visible;
}

/* Overlay */
.overlay {
  background: rgba(0, 0, 0, 0.5);
  /* Ne: opacity: 0.5 na overlay divisi
     → text uvnitř by byl taky průhledný */
}

/* rgba vs opacity */
.box-rgba {
  background: rgba(247, 91, 158, 0.2);
  color: #F75B9E; /* text plně viditelný */
}
.box-opacity {
  background: #F75B9E;
  opacity: 0.2; /* text i pozadí průhledné */
}
filter & backdrop-filter

Vizuální filtry

blur, brightness, contrast, grayscale, saturate, drop-shadow. backdrop-filter = efekt skla (glassmorphism).

animatable

filter aplikuje vizuální efekty na element (+ jeho children). backdrop-filter aplikuje efekty na obsah ZA elementem — základ pro glassmorphism. drop-shadow na filter respektuje tvar elementu (funguje s PNG průhledností), na rozdíl od box-shadow.

// backdrop-filter: glassmorphismbackdrop-filter: blur(10px) na průhledném elementu = efekt matného skla. Populární moderní UI vzor. Potřebuje: background s průhledností (rgba nebo transparent) + backdrop-filter: blur(). Bez průhledného pozadí nevidíte efekt za elementem.
filter funkce
blur(px) brightness(%) contrast(%) grayscale(%) saturate(%) sepia(%) invert(%) hue-rotate(deg) drop-shadow()
Živá ukázka
none
blur(3px)
bright 150%
grayscale
saturate 200%
hue-rot 90°
sepia 80%
invert
  • backdrop-filter vyžaduje průhledné pozadí
  • filter: drop-shadow respektuje PNG tvar
  • Kombinovat: filter: blur(2px) brightness(0.8)
  • filter vytváří nový stacking context
Příklady
CSS
/* Hover efekty na obrázky */
.img-card img {
  transition: filter 0.3s;
}
.img-card:hover img {
  filter: brightness(1.1) saturate(1.2);
}

/* Grayscale → color na hover */
.portrait {
  filter: grayscale(100%);
  transition: filter 0.4s;
}
.portrait:hover { filter: grayscale(0%); }

/* Drop-shadow respektuje tvar PNG */
.icon-png {
  filter: drop-shadow(2px 4px 6px rgba(0,0,0,0.3));
  /* Stín sleduje tvar průhledného PNG */
}

/* Blur pozadí stránky při modalu */
.page-content.blurred {
  filter: blur(4px);
  pointer-events: none;
}

/* ✅ Glassmorphism */
.glass {
  background: rgba(255, 255, 255, 0.1);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 12px;
}

/* Dark glass */
.dark-glass {
  background: rgba(0, 0, 0, 0.3);
  backdrop-filter: blur(8px) saturate(180%);
  border: 1px solid rgba(255,255,255,0.1);
}

/* Loading skeleton blur efekt */
.skeleton {
  filter: blur(4px);
  pointer-events: none;
}
mix-blend-mode

Míchání barev vrstev

Jak se element vizuálně prolíná s pozadím. multiply, screen, overlay, difference — jako vrstvy ve Photoshopu.

mix-blend-mode definuje jak se barvy elementu míchají s vrstvami za ním — stejný princip jako blend modes ve Photoshopu nebo Figmě. multiply = ztmaví (bílá průhledná). screen = zesvětlí (černá průhledná). overlay = zvýší kontrast.

Hodnoty
normal multiply screen overlay darken lighten color-dodge color-burn difference exclusion hue saturation color luminosity
  • multiply: tmavé barvy se prolínají, bílá zmizí
  • screen: světlé se prolínají, černá zmizí
  • overlay: kombinace multiply + screen
  • difference: invertuje na základě rozdílu
Příklady
CSS
/* Barevný overlay na obrázku */
.img-wrapper { position: relative; }
.img-wrapper img { display: block; }
.img-wrapper::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(247, 91, 158, 0.5);
  mix-blend-mode: multiply;
}

/* Text prolínající se s pozadím */
.hero-title {
  color: white;
  mix-blend-mode: overlay;
  /* Text se promicha s obrázkem za */
}

/* Efekt duotone */
.duotone {
  position: relative;
}
.duotone img { filter: grayscale(100%); }
.duotone::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to right, #F75B9E, #5B9EF7
  );
  mix-blend-mode: color;
}

/* isolation: isolate zabrání mix-blend-mode
   prolínat se přes hranice kontejneru */
.card {
  isolation: isolate;
}
← 04 Typografie 05 / 10 — Barvy & Pozadí 06 Layout →