Jak přidat tmavý režim na web nebo do aplikace (bez záblesku)
Tmavý režim přidáte tak, že barvy definujete jako pojmenované tokeny (pozadí, text, plocha, ohraničení, akcent) místo pevně zadaných hodnot a pro každý token nastavíte světlou a tmavou hodnotu. Přepínání mezi nimi pak zařídí CSS funkce prefers-color-scheme, takže se web řídí nastavením systému návštěvníka. Pokud chcete i ruční přepínač, uložte volbu v prohlížeči a aplikujte ji malým inline skriptem v hlavičce stránky, aby nebyl bílý záblesk při načtení. Pak zkontrolujte kontrast, obrázky a grafy v obou režimech. V AI nástroji pro tvorbu aplikací zvládne většinu této práce jeden jasný prompt; kvalita se ukáže v kontrole.
Dva přístupy
| Přístup | Jak funguje | Vhodné pro | Kompromisy |
|---|---|---|---|
| Řídit se systémem | CSS funkce prefers-color-scheme vybere světlý nebo tmavý režim | Jednoduché weby, žádné uživatelské rozhraní navíc | Návštěvníci nemohou zvolit něco jiného než nastavení zařízení |
| Přepínač + výchozí systémový režim | Vychází z nastavení systému; přepínač Světlý / Tmavý / Systém jej přepíše a volba se zapamatuje | Aplikace, které lidé často používají | Trochu JavaScriptu a problém s bliknutím při načtení, který je třeba vyřešit |
Většina aplikací nejlépe funguje s druhou variantou: ve výchozím stavu respektovat systém a nechat lidi nastavení přepsat.
Začněte s barevnými tokeny
Tmavý režim je bolestivý, když jsou barvy rozházené v kódu jako white, #333 a gray-100. Je snadný, když každá barva pochází z malé sady pojmenovaných tokenů:
| Token | Světlý | Tmavý |
|---|---|---|
background | téměř bílá | velmi tmavě šedá |
surface (karty, menu) | bílá | o něco světlejší tmavě šedá |
text | téměř černá | bílá s nádechem |
text-muted | střední šedá | světlejší střední šedá |
border | světle šedá | tmavě šedá s mírným kontrastem |
accent | barva vaší značky | často světlejší nebo méně sytá verze |
Každá komponenta používá názvy tokenů. Přepnutí motivu pak znamená vyměnit jednu sadu hodnot, ne upravovat každou komponentu.
Tipy pro tmavou paletu:
- Vyhněte se čisté černé a čisté bílé u velkých ploch; velmi tmavě šedá a bílá s nádechem se lépe čtou.
- Hloubku ukazujte světlejšími plochami, ne stíny; stíny na tmavém pozadí téměř nejsou vidět.
- Mírně odsaťte jasné barvy značky; na tmavém pozadí mohou nepříjemně zářit.
- Udržte čitelný kontrast. Úroveň WCAG AA vyžaduje u běžného textu alespoň poměr 4,5:1. Ztlumený šedý text v tmavých motivech tento limit často nesplní.
S Tailwind CSS
Tailwind je ve spoustě aplikací postavených pomocí AI výchozím nástrojem pro styly. Podle dokumentace Tailwindu k tmavému režimu varianta dark: ve výchozím nastavení používá prefers-color-scheme, takže třídy jako bg-white dark:bg-gray-900 se řídí nastavením systému bez dalšího úsilí.
Pro ruční přepínač v Tailwindu v4 dokumentace ukazuje přepnutí varianty na třídu na nadřazeném prvku:
@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));
Pak aplikace přidá nebo odebere třídu dark na kořenovém prvku. Dokumentace také doporučuje inline skript v hlavičce, který použije uloženou volbu (nebo nastavení systému), než se stránka vykreslí. Právě tím se vyhnete záblesku.
Jak se vyhnout bílému záblesku
Záblesk vzniká tak, že se stránka vykreslí ve světlém režimu, pak se načte JavaScript, přečte uloženou volbu a přepne na tmavý. Oprava:
- Vložte malý inline skript do hlavičky stránky, který přečte uložený motiv a nastaví třídu na kořenovém prvku dřív, než se cokoli vykreslí.
- Nastavte vlastnost CSS
color-schemepro každý motiv, aby části kreslené prohlížečem (posuvníky, formulářové prvky) odpovídaly. - Nastavte stránce explicitní barvu pozadí v obou motivech.
- Pokud je aplikace renderovaná na serveru, zajistěte, aby server a prohlížeč souhlasily s počátečním motivem; jinak může stránka překreslovat a blikat.
Příklady promptů
Kompletní nastavení:
Přidej tmavý režim. Nejdřív nahraď pevně zadané barvy tokeny motivu (pozadí, plocha, text, ztlumený text, ohraničení, akcent) se světlými a tmavými hodnotami. Výchozí nastavení ber podle systému návštěvníka. Do hlavičky přidej přepínač motivu s možnostmi Světlý, Tmavý a Systém, volbu ulož do localStorage a aplikuj ji inline skriptem v hlavičce, aby nebyl bílý záblesk při načtení. Nastav color-scheme pro každý motiv. Zachovej současný světlý design přesně tak, jak je.
Zkontroluj každou stránku v tmavém režimu a oprav: text s nízkým kontrastem (cílit na alespoň 4,5:1), pevně zadaná bílá pozadí, ohraničení, která zmizela, grafy s tmavým textem na tmavém pozadí a loga, která nejsou vidět. Světlý motiv neměň.
Obrázky a grafy:
V tmavém režimu použij světlou verzi loga. Osy, mřížky a popisky grafů ať používají tokeny motivu. U snímků obrazovky v tmavém režimu přidej jemné ohraničení, aby nesplývaly s pozadím.
Postup krok za krokem
- Proveďte audit barev. Najděte pevně zadané barvy a nahraďte je tokeny. To je většina práce.
- Definujte tmavé hodnoty pro každý token.
- Řiďte se systémem pomocí
prefers-color-scheme(nebo výchozí variantydark:v Tailwindu). - Přidejte přepínač, pokud ho chcete: Světlý, Tmavý, Systém. Volbu uložte v prohlížeči; u přihlášených aplikací ji můžete uložit i do profilu uživatele.
- Zabraňte záblesku inline skriptem v hlavičce a
color-scheme. - Zkontrolujte složité části: loga, ikony, obrázky s bílým pozadím, grafy, bloky kódu, mapy, vložené prvky, e-maily.
- Otestujte oba motivy na počítači i na telefonu, se systémem nastaveným na světlý i na tmavý režim a po tvrdém obnovení stránky.
Časté chyby
- Invertování všeho. Filtr, který invertuje barvy, zničí fotografie a barvy značky.
- Zapomenuté pevně zadané barvy. Jedna bílá karta na tmavé stránce hned vynikne.
- Šedý text s nízkým kontrastem. Vypadá stylově, ale špatně se čte.
- Bílý záblesk při načtení. Obzvlášť patrný na telefonech v noci.
- Zapomenuté vložené prvky třetích stran. Mapy, videa a widgety mohou zůstat světlé; zkontrolujte, zda mají tmavou variantu.
- Přepínač jen se dvěma stavy. Jakmile na něj někdo klikne, nemůže se vrátit k řízení podle systému.
- Rozbití světlého motivu. Ve svém promptu výslovně napište, že světlý design má zůstat stejný.
Kontrolní seznam
- Všechny barvy pocházejí z tokenů motivu
- Ve výchozím stavu se řídí nastavením systému
- Volitelný přepínač Světlý, Tmavý a Systém, který si zapamatuje volbu
- Žádný bílý záblesk při načtení nebo obnovení
- Nastavený
color-scheme, aby formulářové prvky a posuvníky odpovídaly - Kontrast textu alespoň 4,5:1 v obou motivech
- Loga, obrázky, grafy a vložené prvky zkontrolované v tmavém režimu
- Světlý motiv beze změny
- Otestováno na počítači i na telefonu
Tmavý režim s Mythexem
Aplikace postavené na Mythexu používají ve výchozím nastavení Vite, React, TypeScript a Tailwind, takže přístup s Tailwindem výše platí přímo: vložte prompt pro kompletní nastavení do chatu, pak zkontrolujte náhled v obou motivech a na šířce telefonu. Doporučení Mythexu pro prompty k designu je pojmenovat, co změnit a co zachovat, a to je tady podstatné; napište, že světlý motiv má zůstat tak, jak je. Viz Design a UI prompty a pokud průchod něco rozbije, vraťte se ke kontrolnímu bodu.
Více o tom, jak dostat správný vzhled, najdete v článku jak navrhnout dobře vypadající aplikaci pomocí AI a jak psát prompty pro AI nástroje pro tvorbu aplikací.
Otázky
Jak nastavit, aby se můj web řídil nastavením tmavého režimu zařízení?
Použijte CSS funkci prefers-color-scheme, která říká, zda má návštěvník v systému nastavený světlý nebo tmavý režim. Varianta dark: v Tailwindu ji používá ve výchozím nastavení.
Proč web před přepnutím na tmavý režim bliká bíle?
Uložený motiv aplikuje JavaScript až poté, co se stránka už vykreslila. Opravte to malým inline skriptem v hlavičce stránky, který nastaví třídu motivu dřív, než se cokoli vykreslí, a pro oba motivy nastavte explicitní barvu pozadí.
Má být tmavý režim čistě černý?
Obvykle ne. Velmi tmavé šedé se lépe čtou při dlouhém čtení a umožňují ukázat hloubku světlejšími plochami. Čistě černá se může hodit u designů zaměřených na OLED nebo u designů s hodně médii.
Potřebuji přepínač tmavého režimu, když se řídím nastavením systému?
Striktně ne. Řídit se systémem je dobrý výchozí stav, ale přepínač s možnostmi Světlý, Tmavý a Systém pomůže lidem, kteří chtějí, aby se váš web lišil od nastavení jejich zařízení.