Témata
Spectro disponuje podporu dvou témat - světlé a tmavé. S barvami je potřeba v obou z nich zacházet odlišně. Tlumené pozadí je ve světlém tématu světlé, v tmavém zase tmavé. Stejně tak barva textů se z principu musí výrazně lišit. Stejně tak v tmavém režimu je vhodné pro lepší dojem mírně snížit saturaci.
Srovnání
Section titled “Srovnání”Níže jsou ukázány často využívané tokeny při stylování aplikace. Všimněte si, že některé povrchy, například Surface Control a Surface Control Variant, mají ve světlém tématu totožnou barvu, ale ve tmavém se již odlišují.
Pevné téma
Section titled “Pevné téma”Komponentu je možné zobrazovat vždy stejně bez ohledu na zvolené téma. Přidejte data-theme atribut s názvem tématu, o vše ostatní se postará CSS.
<FooComponent theme="light" text="I'm shining" /><FooComponent theme="dark" text="The dark side" />const FooComponent = (theme, text) => {
return ( <foo-component data-theme={theme} > {text} </foo-component> )}
export default FooComponent<foo-component data-theme="light">I'm shining</foo-component><foo-component data-theme="dark">The dark side</foo-component>foo-component { --foo-bg: var(--surface-control); --foo-color: var(--text-primary);
background-color: var(--foo-bg); color: var(--foo-color);}html { color: var(--text-primary)}foo-component { --foo-bg: var(--surface-control); /* Chybí definice barvy textu */ /* Po změně tématu komponenty zůstane barva z tématu na <html> */
background-color: var(--foo-bg);}Inverze tématu
Section titled “Inverze tématu”Téma komponenty je možné zcela obrátit. Princip je naprosto totžný jako při volbě pevného tématu, tentokrát stačí nastavit data-theme="inverted".
<FooComponent theme="inverted" text="The rebel" />const FooComponent = (theme, text) => {
return ( <foo-component data-theme={theme} > {text} </foo-component> )}
export default FooComponent<foo-component data-theme="inverted">The rebel</foo-component>foo-component { --foo-bg: var(--surface-control); --foo-color: var(--text-primary);
background-color: var(--foo-bg); color: var(--foo-color);}CSS pod pokličkou
Section titled “CSS pod pokličkou”Nevyužíváme automatického @media (prefers-color-scheme) pravidla, ale spoléháme na data-theme atribut, který je plněn pomocí skriptu. To s sebou nese několik výhod:
- Volitelné přepnutí tématu pomocí tlačítka
- Možnost pevného tématu na komponentě
- Možnost invertovat téma na komponentě
- Úspora řádků v
spectro-theme.css
/* Zapnutí světlého tématu */
:root,[data-theme$="light"]:where(:not(:root)),:where(:root[data-theme$="dark"] [data-theme="inverted"]) { color-scheme: light;}
/* Zapnutí tmavého tématu */
:root[data-theme$="dark"],[data-theme$="dark"]:where(:not(:root)),:where(:root[data-theme$="light"] [data-theme="inverted"]) { color-scheme: dark;}
/* Tokeny */
:root { /* Globální */ --base: 8px; --radius: 6px;
/* Globální reagující na téma */ --_text-blue_light: oklch(49% 0.2 250); --_text-blue_dark: oklch(77% 0.18 250); --text-blue: light-dark(var(--_text-blue_light), var(--_text-blue_dark));
/* Sémantické reagující na téma */ --text-brand-primary: var(--text-blue);}Na první pohled vypadá zápis zřetězených selektorů kompikovaně, ale po rozebrání ne jednotlivé selektory dává logiku. Spíše se však jedná o technickou zajímavost, pro využívání Spectra není potřeba znát selektory do hloubky.
Selektory pro dokument, v HTML se jedná o <html> element:
:root- dokument:root[data-theme$="light"]- dokument ve světlém tématu:root[data-theme$="dark"]- dokument v tmavém tématu
Selektory pro elementy (kompnenty):
[data-theme$="light"]:where(:not(:root))- element ve světlém tématu, který není dokumentem[data-theme$="dark"]:where(:not(:root))- element v tmavém tématu, který není dokumentem:where(:root[data-theme$="dark"] [data-theme="inverted"])- element, který chci na dokumentu s tmavým tématem invertovat:where(:root[data-theme$="light"] [data-theme="inverted"])- element, který chci na dokumentu se světlým tématem invertovat













