Thèmes

Les composants Lily ont des crochets de classe stables et zéro CSS — un thème n'est donc qu'une feuille de style. Ce tutoriel va de « liez un fichier » à « laissez l'utilisateur changer de thème à l'exécution, avec persistance ».

Ce que vous allez construire

Une application dont l'utilisateur peut changer tout l'aspect — en partant d'une feuille de style liée et en finissant par un sélecteur de thème persistant à l'exécution — en 15 minutes environ.

Avant de commencer

Terminez d'abord le tutoriel du framework pour votre pile d'abord, afin d'avoir un petit formulaire Lily à thématiser. Tout ici fonctionne dans les sept frameworks ; les exemples de code montrent Svelte et HTML simple.

Étape 1 — Lier un thème prêt à l'emploi

themes/ le répertoire contient 45 feuilles de style autonomes. Copiez-les dans les ressources statiques de votre application et liez-en une :

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

Points forts de l'ensemble :

  • Secteur public — NHS England / Scotland / Wales, chacun en variantes pour les patients et pour les praticiens ; GOV.UK (united-kingdom-government-digital-service) ; USWDS (united-states-web-design-system).
  • Inspirés de fournisseurs — adobe-spectrum, mozilla-protocol.
  • Usage général — light, dark, nord, dracula, wireframe, corporate, synthwave, et bien d'autres.

Vérifiez votre travail : rechargez la page. Le même balisage que vous avez construit dans le tutoriel du framework est maintenant entièrement stylé — boutons, champs, étiquettes, anneaux de focus. Une ligne de HTML a fait cela — chaque composant est resté exactement tel qu'il était.

Étape 2 — Tout remplacer

Les sélecteurs de thème sont enveloppés dans :where(...)qui a une spécificité nulle — donc toute règle que vous écrivez l'emporte, tout simplement :

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

Étape 3 — Changement à l'exécution avec theme-picker

theme-picker l'assistant est un bouton-icône sans tête + liste qui possède tout le cycle de vie du thème : il charge la feuille de style choisie en échangeant un seul <link> géré (seul le thème actif est récupéré), définit data-theme="{slug}" sur le document et persiste facultativement dans localStorage. Svelte est montré ici ; les portages React, Vue, Angular, HTML, Nunjucks et Blazor correspondent contrat par contrat :

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

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

C'est toute l'intégration. Le comportement clavier suit le motif de liste WAI-ARIA APG ; le contrôle lui-même est sans tête (crochet de classe .theme-picker), donc il adopte le thème actif, quel qu'il soit.

Vérifié le 2026-08-29 : cet extrait exact a été compilé contre le paquet 0.1.1 publié, via svelte/server.

Étape 4 — Réagir au thème dans votre propre CSS

Comme l'assistant définit data-theme sur la racine du document, vos propres styles peuvent se ramifier dessus :

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

Remarques sur le rendu côté serveur

L'assistant effectue toutes les écritures dans le DOM dans le cycle de vie mount/effect du framework, il est donc sûr pour le SSR par construction. Pour éviter un flash au premier affichage, rendez côté serveur le <link> et data-theme du thème initial (par exemple depuis un cookie) — le dépôt de l'assistant Svelte inclut un exemple exécutable de cookie SvelteKit, et les autres catalogues documentent le même motif pour leurs piles.

Étapes suivantes

  • Assistants de préférences — le même motif pour la langue, la taille du texte, le partage et la saisie de date/heure.
  • Contribuer un thème — chacun est une feuille de style autonome qui cible les crochets de classe ; voir contribuer.

Des questions en chemin ? La page d'aide regorge de réponses — et si une étape peut être plus claire, dites-le-nous et nous améliorerons volontiers le tutoriel.