CSS – odvozené barvy
Na stránkách se docela často vyskytují barvy odvozené od určité základní. Typický příklad: organizace má ve své vizuální identitě definovánu „firemní barvu“ a na webu se vyskytuje také její tmavší a světlejší variace, případně barva doplňková.
Toho se dá dosáhnout několika způsoby. Jednotlivé barvy lze samozřejmě nastavovat ručně, smíchat s černou či bílou, nebo lze vytvořit CSS proměnné pro jednotlivé barevné složky, z nich barvy skládat a příslušnou složku vždy vhodně upravit. Zde se podívejme na jednu z novějších schopností CSS, která je pro tento účel přímo určena: relativní barvy.
Dělají přesně to, co potřebujeme. Když definujete relativní barvu, určíte
výchozí barvu a způsob, jakým mají být upraveny její barevné kanály. Úprava
probíhá v určitém barevném prostoru, který lze určit dvěma způsoby: Buď
použijete barevnou funkci pro daný prostor, nebo použijete obecnou funkci
color
a barevný prostor uvedete za výchozí barvou. Například
odvození v prostoru RGB zajistí jedna z následujících možností:
rgb(from
výchozí_barvakanálR
kanálG
kanálB
)
color(from
výchozí_barvargb
kanálRkanálG
kanálB
)
Odvozovat lze v libovolném barevném prostoru, který je v CSS podporován. Řekněme si otevřeně, že RGB není pro tento účel ideální. Vhodnější jsou prostory, které pracují s odstínem, sytostí a světlostí barvy, protože právě s nimi obvykle chceme pracovat. Nejčastěji se proto odvozuje v prostorech HSL nebo LCH.
Při definici kanálů máte k dispozici písmena, která odpovídají barevným
kanálům daného prostoru. Představují hodnotu příslušného kanálu výchozí barvy.
Odvozujete-li v prostoru RGB, máte tedy k dispozici r
pro
intenzitu červené složky původní barvy, g
pro zelenou a
b
pro modrou. Analogicky v prostoru HSL přistupujete ke kanálům
h
, s
a l
pro odstín, sytost a světlost.
V následující skupině příkladů ještě zůstanu u prostoru RGB, který sice není ideální, ale je dobře známý. Budu experimentovat s naší univerzitní fialovou barvou #5948ad. V prvním příkladu jsem barevné kanály ponechal beze změny, takže dostanu původní barvu. Ve druhém jsem červený kanál přepsal konstantou na maximální možnou hodnotu 255, ve třetím prohodil zelený a modrý kanál, ve čtvrtém nastavil všem kanálům stejnou intenzitu podle původního červeného a v pátém zmenšil červený kanál původní barvy na polovinu:
rgb(from #5948ad r g b) |
|
rgb(from #5948ad 255 g b) |
|
rgb(from #5948ad r b g) |
|
rgb(from #5948ad r r r) |
|
rgb(from #5948ad calc(0.5 * r) g b) |
Právě kombinace funkce calc()
s barevným prostorem typu HSL
nebo LCH představuje ideální nástroj pro vytváření variací původní barvy.
Vrátím se k naší univerzitní fialové (všimněte si, že nijak nevadí, když
výchozí barvu zadám v RGB, ale odvozování provádím v HSL) a vytvořím její
tmavší, světlejší, rozjásanější a inverzní odvozeninu.
hsl(from #5948ad h s l) |
|
hsl(from #5948ad h s calc(l - 20)) |
|
hsl(from #5948ad h s calc(l + 15)) |
|
hsl(from #5948ad h calc(s + 40) calc(l + 8)) |
|
hsl(from #5948ad calc(h + 180) s l) |
Do hry lze vždy zapojit ještě průhlednost. Uvádí se za kanály a odděluje od
nich lomítkem. Hodnotou může být reálné číslo od 0 (zcela průhledná) do 1
(zcela neprůhledná), nebo procenta. Není-li průhlednost definována, převezme se
z výchozí barvy. Na původní průhlednost se lze odkázat jako na kanál
alpha
.
V následujících příkladech naší výchozí fialové upravím průhlednost na 60% nejprve konstantou a následně výpočtem z původního alfa kanálu, jehož hodnotou je 100%. V dalších třech příkladech jsem 60% průhlednost zařadil již do výchozí barvy. Nejprve ji zachovám, následně změním na 100% a v posledním příkladu vypočtu 60% z 60%, čili hodnotou bude 36% a barva je velmi průhledná:
hsl(from #5948ad h s l) |
|
hsl(from #5948ad h s l / 60%) |
|
hsl(from #5948ad h s l / calc(alpha * 0.6)) |
|
hsl(from #5948ad99 h s l) |
|
hsl(from #5948ad99 h s l / 100%) |
|
hsl(from #5948ad99 h s l / calc(alpha * 0.6)) |
zpět: CSS - barva a pozadí