Autor Zpráva
jirka2
Profil
Ahoj, mám takový drobný problém. Dostanu nějakou barvu a tu potřebuji zesvětlit. Zde je příklad, první div je to vybarven zadanou barvou a ten pod nim je vybarven světlejší.
<div style='background:green;'>Ahoj</div>
<div style='background:green;filter:brightness(150%);'>Světlé ahoj</div>
To funguje. Ale když zadám barvu lime (#00FF00), tak už ji takto nedokážu zesvětlit, viz příklad, obě barvy divů jsou stejné:
<div style='background:lime;'>Ahoj</div>
<div style='background:lime;filter:brightness(150%);'>Světlé ahoj</div>
Protože výstup je generovaný PHP obešel jsem to zatím tím, že zadanou barvu převedu na barevný model HSL. V případě barvy lime dostanu hsl(120,100%,50%) a pak už to lehce zesvětlím.
<div style='background:hsl(120,100%,50%);'>Ahoj</div>
<div style='background:hsl(120,100%,90%);'>Světlé ahoj</div>
A funguje to, ale nedělám to zbytečně komplikovaně? Nepřehlédl jsem něco? Prostě dostanu libovolnou barvu a tu potřebuji zesvětlit a nejlépe jen pomocí stylů.

Díky za inspiraci, Jirka
ttttttttt
Profil *
Pojem "zesvětlit" není jednoznačně definovaný.

Brightness CSS filtr jen přenásobí RGB složky zadanou konstantou. Se složkami, které jsou nulové nebo na maximu neudělá nic. Lightness v HSL je rozdíl mezi nejvyšší složkou a průměrem nejvyšší a nejnižší RGB složky. To lze zvyšovat i když je některá ze složek na maximu. Jsou i další modely, např. luma. Pak ještě narazíš na to, že vnímání není lineární, změna o 10 % v hodnotách barev, je v tmavých odstínech pro člověka výraznější než změna o 10 % ve světlejších.

Ve výsledku záleží na tom,co vnímáš pod "zesvětlit", kterou interpretaci si vybereš. CSS na přímou modifikaci L nemá filtr, v SASS je lighten.
jirka2
Profil
ttttttttt:
Díky za reakci. Původní problém byl tento:
V PHP generuji jednoduchý čtvereček zadané barvy. A pak jsem chtěl přidat 3D efekt rámečku outset, tedy levý a horní pás světlejší a na opačné straně zase tmavší. To jsem udělal tak, že daným polygonům jsem přidal tu správnou class. To fungovalo do té doby, než jsem zadal barvu lime.
Tak jsem to obešel výše popsaným způsobem. Malá komplikovanost nastane, pokud se barva zadá jako název (a nikoliv RRGGBB), ale databáze barev pomohla.
Nic jednoduššího pro takovýto SVG efekt jsem nenašel...
jirka2
Profil
Ještě se k tomu vrátím, nakonec jsem to obešel následovně: kde to má být světlejší, tam nakreslím polygon s atributy:
fill='white' opacity='0.5'
a kde tmavší
fill='black' opacity='0.2
Takto se vyhnu přepočítávaní barev. A je to.
Tomáš123
Profil
jirka2:
Ak ide iba o border, tak existuje border-style: outset, ktorý robí presne to, čo potrebuješ iba v CSS - funguje ale tak, že stmavuje dolnú a pravú stranu, nie zosvetľuje hornú a ľavú.
jirka2
Profil
Tomáš123:
Ten efekt dělám v SVG.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0