Motywy

Komponenty Lily mają stabilne haczyki klas i zero CSS — więc motyw to po prostu arkusz stylów. Ten samouczek prowadzi od „podlinkuj jeden plik” do „pozwól użytkownikowi przełączać motyw w czasie działania, z zapamiętywaniem”.

Co zbudujesz

Aplikacja, której cały wygląd użytkownik może zmienić — zaczynając od jednego podlinkowanego arkusza stylów, a kończąc na trwałym przełączniku motywu w czasie działania — w około 15 minut.

Zanim zaczniesz

Najpierw ukończ samouczek frameworka dla swojego stosu najpierw, żebyś miał mały formularz Lily do nałożenia motywu. Wszystko tutaj działa we wszystkich siedmiu frameworkach; przykłady kodu pokazują Svelte i czysty HTML.

Krok 1 — Podlinkuj gotowy motyw

themes/ katalog zawiera 45 samodzielnych arkuszy stylów. Skopiuj je do statycznych zasobów aplikacji i podlinkuj jeden:

<link rel="stylesheet" href="/assets/themes/united-kingdom-national-health-service-england-for-patients.css" />

Najważniejsze z zestawu:

  • Sektor publiczny — NHS England / Scotland / Wales, każdy w wariantach dla pacjentów i dla praktyków; GOV.UK (united-kingdom-government-digital-service); USWDS (united-states-web-design-system).
  • Inspirowane dostawcami — adobe-spectrum, mozilla-protocol.
  • Ogólnego przeznaczenia — light, dark, nord, dracula, wireframe, corporate, synthwavei wiele innych.

Sprawdź swoją pracę: odśwież stronę. Ten sam znacznik, który zbudowałeś w samouczku frameworka, jest teraz w pełni ostylowany — przyciski, pola, etykiety, pierścienie fokusu. Zrobił to jeden wiersz HTML — każdy komponent pozostał dokładnie taki, jaki był.

Krok 2 — Nadpisz cokolwiek

Selektory motywów są opakowane w :where(...)które ma zerową swoistość — więc każda reguła, którą napiszesz, wygrywa, po prostu:

/* After the theme link: your brand button, everything else themed */
.button {
  background: #7c3aed;
  border-radius: 9999px;
}

Krok 3 — Przełączanie w czasie działania przez theme-picker

theme-picker pomocnik to bezstylowy przycisk-ikona z listboksem, który posiada cały cykl życia motywu: ładuje wybrany arkusz stylów, podmieniając jeden zarządzany <link> (pobierany jest tylko aktywny motyw), ustawia data-theme="{slug}" na dokumencie i opcjonalnie zapisuje w localStorage. Tu pokazano Svelte; porty dla Reacta, Vue, Angulara, HTML, Nunjucks i Blazora odpowiadają mu kontrakt po kontrakcie:

<script>
  import ThemePicker from "@lilydesignsystem/svelte-theme-picker";
</script>

<ThemePicker
  label="Theme"
  themesUrl="/assets/themes/"
  themes={["light", "dark", "nord", "wireframe"]}
  storageKey="my-app-theme"
/>

To cała integracja. Działanie klawiatury podąża za wzorcem listboksa WAI-ARIA APG; sama kontrolka jest bezstylowa (haczyk klasy .theme-picker), więc przejmuje dowolny aktywny motyw.

Zweryfikowano 2026-08-29: dokładnie ten fragment został skompilowany względem opublikowanego pakietu 0.1.1 przez svelte/server.

Krok 4 — Reaguj na motyw we własnym CSS

Ponieważ pomocnik ustawia data-theme na korzeniu dokumentu, twoje własne style mogą się według tego rozgałęziać:

[data-theme="dark"] .site-logo { filter: invert(1); }

Uwagi dotyczące renderowania po stronie serwera

Pomocnik wykonuje wszystkie zapisy do DOM w cyklu życia mount/effect frameworka, więc jest bezpieczny dla SSR z założenia. Aby uniknąć błysku przy pierwszym malowaniu, wyrenderuj <link> i data-theme motywu początkowego na serwerze (na przykład z ciasteczka) — repozytorium pomocnika Svelte zawiera uruchamialny przykład ciasteczek SvelteKit, a pozostałe katalogi dokumentują ten sam wzorzec dla swoich stosów.

Następne kroki

  • Pomocniki preferencji — ten sam wzorzec dla języka, rozmiaru tekstu, udostępniania i wprowadzania daty/godziny.
  • Wnieś motyw — każdy to jeden samodzielny arkusz stylów celujący w haczyki klas; zobacz współtworzenie.

Pytania po drodze? Strona pomocy jest pełna odpowiedzi — a jeśli jakiś krok mógłby być jaśniejszy, daj nam znać a chętnie ulepszymy samouczek.