Gradient
Další možností pro obarvení pozadí prvku je gradient. Formálně se jedná o
variantu obrázku na pozadí, takže se zadává pomocí
vlastnosti background-image
. V definici gradientu zadáte
jednotlivé barvy, které pak více či méně plynule přecházejí jedna v druhou. Na
výběr máte tři odrůdy: lineární, kruhový a kónický.
Lineární gradient
V lineárním gradientu barvy přecházejí od jednoho okraje prvku ke druhému.
Definuje se pomocí funkce linear-gradient()
. Jeho nejjednodušší
podoba je následující:
background-image: linear-gradient(#57C785, #EDDD53);
Uvedete počáteční a koncovou barvu, oddělené čárkou. Počáteční barva (zde zelená) bude nahoře, koncová (žlutá) dole a barvy mezi nimi budou plynule přecházet mezi nimi.
Chcete-li změnit směr přechodu, uveďte jako první parametr úhel, o který se má otočit. Zde gradient otočíme o 90 stupňů:
background-image: linear-gradient(90deg, #57C785, #EDDD53);
Barev samozřejmě může být libovolné množství:
background-image: linear-gradient(#57C785, #EDDD53, #ED5353);
Lze řídit, jakou část jednotlivé barvy zaberou. Implicitně je první barva umístěna na začátku, poslední na konci a mezilehlé barvy jsou v pravidelných rozestupech mezi nimi. To změníte, když za barvou uvedete mezerou oddělenou vzdálenost, ve které má mít gradient tuto barvu.
Řekněme, že bych rád v prvním gradientu přidal více žluté barvy. Proto za ni
přidám mezerou oddělenou hodnotu 70%
, která určuje, že už v 70 %
vzdálenosti má být pozadí žluté:
background-image: linear-gradient(#57C785, #EDDD53 70%);
Pokud posunu i zelenou, zkrátí se úsek, ve kterém barvy přecházejí jedna v druhou:
background-image: linear-gradient(#57C785 40%, #EDDD53 60%);
V extrémním případě lze uvést u dvou po sobě jdoucích barev stejnou hodnotu a vytvořit mezi nimi ostrý přechod:
background-image: linear-gradient(#57C785 40%, #EDDD53 40%);
Zopakováním stejné barvy v různých vzdálenostech vytvoříte jednobarevný pás. Například by se tímto způsobem dala posílit žlutá v našem tříbarevném gradientu:
background-image: linear-gradient(#57C785, #EDDD53 45%, #EDDD53 55%, #ED5353);
Vzdálenost lze zadat i absolutně, v pixelech či jakýchkoli jiných jednotkách:
linear-gradient(45deg, #57C785 1.5rem, #005500 1.5rem, #005500 1.7rem,
#EDDD53 1.7rem, #ED5353 80%)
V gradientu se vlastně míchají barvy a stejně jako u míchání barev si můžete poručit, v jakém barevném prostoru má probíhat:
background-image: linear-gradient(in oklch, #57C785, #EDDD53);
background-image: linear-gradient(in oklch longer hue, #57C785, #EDDD53);
Kruhový gradient
Vytváří se pomocí radial-gradient()
, barevné přechody jsou
v něm uspořádány do kruhu jako na terči. 0% zde představuje střed kruhu, 100%
okraj prvku.
background-image: radial-gradient(#57C785, #EDDD53);
background-image: radial-gradient(#57C785, #EDDD53 80%);
background-image: radial-gradient(#57C785, #57C785 35%, #EDDD53 35%, #EDDD53
40%, #ED5353);
Jak vidíte, trochu jsem kecal, protože výchozím tvarem kruhového gradientu
je ve skutečnosti elipsa, která respektuje poměr stran prvku, jehož pozadí
tvoří. Chcete-li opravdu kruh, poručte si jej klíčovým slovem
circle
na začátku hodnoty:
background-image: radial-gradient(circle, #57C785, #EDDD53);
Existuje i klíčové slovo ellipse
, ale je celkem zbytečné,
protože se jedná o výchozí hodnotu. Kouzelným slůvkem at
nastavíte, kde má být střed:
background-image: radial-gradient(at top left, #57C785, #EDDD53);
Dají se také určit rozměry, tedy v jaké vzdálenosti od středu má být
100%. Můžete používat běžné jednotky, procenta (ale jen pro elipsu, velikost
kruhu se v procentech zadat nedá) i klíčová slova closest-side
(nejbližší hrana prvku), farthest-side
(nejvzdálenější hrana),
closest-corner
(nejbližší roh), farthest-corner
(nejvzdálenější roh). Určujete-li zároveň střed, musí být velikost před
ním:
background-image: radial-gradient(circle closest-side at 25% 25%, #57C785, #EDDD53);
Kónický gradient
Tato varianta gradientu, kterou vytvoříte pomocí
conic-gradient()
, je také kruhová, ale barevný přechod neprobíhá
od středu k okraji, ale kolem dokola. Jako by byl na povrchu kuželu, na který
se díváte shora:
background-image: conic-gradient(#57C785, #EDDD53);
Nejlépe samozřejmě vypadá, když se na konci vrátíte k počáteční barvě, takže není viditelná žádná ostrá hrana a barvy plynule přecházejí jedna do druhé:
background-image: conic-gradient(#57C785, #EDDD53, #57C785);
Stejně jako u kruhového lze pomocí at
předepsat střed:
background-image: conic-gradient(at 75% 30%, #57C785, #EDDD53, #57C785);
Nemá-li gradient začínat na linii kolmo vzhůru, přidejte za začátek
from
následované úhlem, od kterého gradient začíná:
background-image: conic-gradient(from 45deg at 75% 30%, #57C785, #EDDD53, #57C785);
Úhly lze používat i pro pozice jednotlivých barev. Má-li být vpravo červená,
lze ji zapsat jako red 25%
nebo red 90deg
.
Sečteno a podtrženo
Gradienty jsou dost silné. Krátkým kódem v CSS lze dosáhnout zajímavých efektů, zejména když jich navrstvíte několik přes sebe:
background-image:
radial-gradient(circle at 75% 30%, transparent 14%, #ED5353 15%, #ED5353 15%, transparent 22%),
conic-gradient(from 45deg at 75% 30%, #57C785, #EDDD53, #57C785);
Zatím jsme všude předpokládali, že plocha pokrytá gradientem odpovídá ploše
prvku, jehož pozadí definujeme. Tak to ale nemusí být. Jeho rozměry lze upravit
standardní vlastností background-size
a v kombinaci s opakováním
lze dosahovat zajímavých výsledků:
background-image: radial-gradient(circle closest-side at 20% 20%, #57C785, #EDDD53);
background-size: 1rem 1rem;
background-position: 0.3rem 0.3rem;
V CSS3 Patterns Gallery najdete řadu působivých příkladů, které využívají tuto techniku.
Podrobnosti o gradientech najdete na stránkách MDN.
zpět: CSS - barva a pozadí