Temas
Os componentes da Lily têm ganchos de classe estáveis e zero CSS — por isso um tema é apenas uma folha de estilos. Este tutorial vai de «ligue um ficheiro» a «deixe o utilizador mudar de tema em tempo de execução, com persistência».
O que vai construir
Uma aplicação cujo aspeto completo o utilizador pode alterar — começando com uma folha de estilos ligada e acabando num alternador de temas persistente em tempo de execução — em cerca de 15 minutos.
Antes de começar
Conclua primeiro o tutorial do framework da sua stack primeiro, para ter um pequeno formulário Lily a que aplicar o tema. Tudo aqui funciona nos sete frameworks; os exemplos de código mostram Svelte e HTML simples.
Passo 1 — Ligar um tema pronto
themes/ o diretório contém 45 folhas de estilo autónomas. Copie-as para os recursos estáticos da sua aplicação e ligue uma:
<link rel="stylesheet" href="/assets/themes/united-kingdom-national-health-service-england-for-patients.css" />
Destaques do conjunto:
-
Setor público — NHS England / Scotland / Wales, cada um em variantes para doentes e para profissionais; GOV.UK (
united-kingdom-government-digital-service); USWDS (united-states-web-design-system). - Inspirados em fornecedores —
adobe-spectrum,mozilla-protocol. -
Uso geral —
light,dark,nord,dracula,wireframe,corporate,synthwave, e muitos mais.
Verifique o seu trabalho: recarregue a página. A mesma marcação que construiu no tutorial do framework está agora totalmente estilizada — botões, entradas, etiquetas, anéis de foco. Uma linha de HTML fez isso — cada componente ficou exatamente como estava.
Passo 2 — Substituir o que quiser
Os seletores do tema estão envolvidos em :where(...)que tem especificidade zero — pelo que qualquer regra que escreva ganha, simplesmente:
/* After the theme link: your brand button, everything else themed */
.button {
background: #7c3aed;
border-radius: 9999px;
}
Passo 3 — Alternância em tempo de execução com theme-picker
theme-picker o auxiliar é um botão de ícone sem cabeça + caixa de lista que é dono de todo o ciclo de vida do tema: carrega a folha de estilos escolhida trocando um único <link>
gerido (só o tema ativo é obtido), define
data-theme="{slug}" no documento e, opcionalmente, persiste em localStorage. Aqui mostra-se Svelte; as portagens de React, Vue, Angular, HTML, Nunjucks e Blazor correspondem contrato a contrato:
<script>
import ThemePicker from "@lilydesignsystem/svelte-theme-picker";
</script>
<ThemePicker
label="Theme"
themesUrl="/assets/themes/"
themes={["light", "dark", "nord", "wireframe"]}
storageKey="my-app-theme"
/>
Essa é toda a integração. O comportamento de teclado segue o padrão de caixa de lista do WAI-ARIA APG; o controlo em si é sem cabeça (gancho de classe
.theme-picker), pelo que adota o tema que estiver ativo.
Verificado em 2026-08-29: este excerto exato foi compilado contra o pacote 0.1.1 publicado, através de
svelte/server.
Passo 4 — Reagir ao tema no seu próprio CSS
Como o auxiliar define data-theme na raiz do documento, os seus próprios estilos podem ramificar-se a partir dele:
[data-theme="dark"] .site-logo { filter: invert(1); }
Notas sobre renderização no servidor
O auxiliar faz todas as escritas no DOM dentro do ciclo de vida mount/effect do framework, pelo que é seguro para SSR por construção. Para evitar um clarão na primeira pintura, renderize no servidor o <link> e
data-theme do tema inicial (por exemplo, a partir de um cookie) — o repositório do auxiliar Svelte inclui um exemplo executável de cookie para SvelteKit, e os outros catálogos documentam o mesmo padrão para as suas stacks.
Passos seguintes
- Auxiliares de preferências — o mesmo padrão para idioma, tamanho do texto, partilha e introdução de data/hora.
- Contribua com um tema — cada um é uma folha de estilos autónoma que visa os ganchos de classe; veja contribuir.
Dúvidas pelo caminho? A página de ajuda está cheia de respostas — e se algum passo puder ser mais claro, diga-nos e melhoraremos o tutorial com todo o gosto.