Moderní tvorba webových aplikací

O webu

CSS funkce random()

Jak v CSS generovat náhodné hodnoty pomocí random() a kdy ji použít.

6 minut

random(min, max, step) je nová CSS funkce, která vrací náhodnou hodnotu v zadaném rozsahu a jednotkách. Lze generovat náhodné rozměry, úhly, barvy i pozice bez JavaScriptu. Volitelný step určuje krok (jde tak generovat např. jen sudá čísla).

Podpora: Funkce se aktivně vyvíjí. Aktuálně funguje v Safari Technology Preview .

Pokud se následující tvar po každém načtení zobrazí jinak velký, váš prohlížeč random podporuje:

Základní použití

.procenta {
  top: random(0%, 100%);
  left: random(0%, 100%);
}

.pixely {
  width: random(100px, 200px);
}

.stupne {
  filter: hue-rotate(random(0deg, 360deg));
}

Sdílení náhodnosti

Stejnou náhodnou hodnotu lze sdílet pomocí identifikátoru (začíná --) nebo speciálního klíčového slova element-shared.

Jde tak vygenerovat třeba náhodný čtverec (výška i šířka budou náhodně stejné číslo):

.square {
  width: random(--side, 100px, 200px);
  height: random(--side, 100px, 200px);
}

Klíčové slovo element-shared zajistí, že všechny prvky s danou třídou budou stejně náhodně velké:

.rectangles {
  width: random(element-shared, 100px, 200px);
  height: random(element-shared, 80px, 160px);
}

Kombinace identifikátoru s element-shared vygeneruje jednu společnou náhodnou hodnotu pro všechny prvky i deklarace, kde se použije. V tomto příkladu tedy všechny .global-square budou stejně velké čtverce (šířka = výška) se stejnou náhodnou stranou v rozsahu 120–240 px.

.global-square {
  width: random(--g element-shared, 120px, 240px);
  height: random(--g element-shared, 120px, 240px);
}

Animace a interakce

@keyframes spin {
  from { rotate: 0deg; }
  to {
    rotate: 5turn;
    rotate: random(1turn, 5turn);
  }
}

V podporovaných prohlížečích by se měl po každém načtení stránky kruh zastavit na jiném místě.

Najeď myší

Kdy se hodnota mění

Hodnota se generuje při výpočtu stylů. Mění se při přepočtu stylů elementu (změna tříd, stavů, media queries apod.).

Progressive enhancement

Pro nepodporované prohlížeče jde buď použít klasicky @supports, nebo využít toho, že neznámou hodnotu prohlížeče ignorují:

/* Fallback-první deklarace – starší prohlížeče použijí první hodnotu */
.badge { opacity: 0.8; opacity: random(0.6, 1); }

/* Alternativně explicitně přes @supports */
@supports (opacity: random(0, 1)) {
  .badge { opacity: random(0.6, 1); }
}

@supports not (opacity: random(0, 1)) {
  .badge { opacity: 0.8; }
}

Příklady

Je otázka, k čemu se generování náhodného čísla v CSS hodí.

Určitě by tak šel po desetiletích konečně udělat starý dobrý efekt sněžení na stránce čistě pomocí CSS.

Generátor náhodného čísla 0–10

V podporovaných prohlížečích se po každém načtení zobrazí jiné číslo.

Bohužel nejde random vypsat pomocí content.

Sněžení bez JS

Ale představit si dokážu i drobné transformace UI.

Bez random

CSS random jde snadno nahradit běžným generování náhodného čísla, které se může nastavit jako CSS proměnná, a fungovat s tím velmi podobně.

Odkazy jinam

Související články

Možnosti stylování <iframe>

Co lze a nelze u <iframe> ovlivnit pomocí CSS a jak na změnu textu nebo barev.

10 minut

Zvýraznění aktivní sekce při rolování

Moderní způsoby zvýraznění aktivní položky navigace podle aktuální sekce – CSS i IntersectionObserver.

5 minut

Vložení CSS do stránky

Jakými všemi způsoby připojit CSS do stránky.

9 minut

Jak „focusovat“ správně díky :focus-visible

Jak správně řešit označený (:focus) stav formulářových prvků.

4 minuty

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025