Système de composants thématisé · Nouvelle ressource

Système de design Skeleton.

Comparez les thèmes Cerberus, Mint et Rose réels de Skeleton 5.0.1 dans un espace de lecture complet, avec inspection des tokens en temps réel, associations de surfaces sombres et état local réversible.

Guide OpenDesign8 chapitres40 entrées de référenceGuide de l’application d’origine
01

Aperçu de l’interface du système de design Skeleton

Modifiez le thème et l’apparence tout en conservant un état de lecture enregistré ; inspectez les valeurs calculées.

Inspectez trois thèmes complets SkeletonOuvrir l’exemple complet
Utilitaires CSS et thèmes Skeleton 5.0.1 compilés avec Tailwind 4 ; contrôles JavaScript originaux. · Référence de mise en œuvre
02

Référence de conception du système de design Skeleton

Fichiers de thème Skeleton 5.0.1 épinglés, comportement des utilitaires CSS compilés et choix de composition d’origine explicités.

Valeurs du thème Cerberus

Source
Nom / règleValeur / configurationUtilisation
--spacing0.25remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--radius-base0.5remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-base--font-familysystem-uiDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-heading--font-weightboldDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-100oklch(0.84 0.08 254.62)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-300oklch(0.7 0.15 254.36)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-500oklch(0.57 0.21 258.29)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-700oklch(0.46 0.17 257.78)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-900oklch(0.34 0.11 257.14)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-50oklch(0.99 0 0)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-950oklch(0.18 0 0)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.

Valeurs du thème Mint

Source
Nom / règleValeur / configurationUtilisation
--spacing0.25remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--radius-base0.375remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-base--font-familysystem-ui, sans-serifDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-heading--font-weightnormalDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-100oklch(89.8% 0.08 156.34deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-300oklch(86.28% 0.13 151.76deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-500oklch(83.57% 0.18 148.98deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-700oklch(71.28% 0.15 148.61deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-900oklch(58.17% 0.13 148.16deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-50oklch(89.13% 0.03 155.27deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-950oklch(21.88% 0.02 186.33deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.

Valeurs du thème Rose

Source
Nom / règleValeur / configurationUtilisation
--spacing0.25remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--radius-base0.375remDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-base--font-familySeravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serifDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--typo-heading--font-weightnormalDéclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-100oklch(92.93% 0.03 340.64deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-300oklch(81.16% 0.08 345.32deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-500oklch(69.89% 0.13 348.12deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-700oklch(57.25% 0.1 346.44deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-primary-900oklch(43.55% 0.07 343deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-50oklch(96.76% 0.01 318.08deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.
--color-surface-950oklch(25.82% 0.01 304.87deg)Déclaration réelle du thème. Ces valeurs changent ensemble lorsque data-theme sélectionne ce thème importé ; l’état de lecture d’origine reste inchangé.

Intégration CSS et associations sémantiques

Source
Nom / règleValeur / configurationUtilisation
Foundation import@import "@skeletonlabs/skeleton"À charger après Tailwind afin que les définitions des utilitaires soient compilées.
Theme selectiondata-theme="cerberus" / "mint" / "rose"Seuls les thèmes importés peuvent fournir leurs variables.
Class-based appearance@custom-variant dark (&:where(.dark, .dark *))Permet au bouton d’apparence d’origine d’agir sur la variante sombre réellement compilée.
Surface pairingslight-dark(light value, dark value)Les styles globaux de Skeleton définissent color-scheme ; il ne suffit pas de modifier une classe sans variante correspondante.
Filled actionbtn preset-filled-primary-500Associe la géométrie d’un bouton natif à un préréglage adapté au thème.
Supporting actionbtn preset-tonal-primaryUtilise une association tonale adaptée à l’apparence actuelle.
Disclosuredetails.disclosure > summaryÉtat d’ouverture natif du navigateur avec Skeleton CSS ; aucune initialisation de composant Svelte n’intervient.
03

Guide complet du système de design Skeleton

Un guide pratique pour choisir, appliquer et évaluer ce système dans une interface réelle.

DESIGN-skeleton.md

Des conseils complets, un point de départ pour la mise en œuvre et des liens vers les sources.

Télécharger le guide

Fondations et couches du framework du système de design Skeleton CSS

Choisissez la couche qui s’exécute réellement

Le pupitre de lecture utilise @skeletonlabs/skeleton 5.0.1, ses utilitaires Tailwind CSS et trois thèmes fournis. Il ne charge ni skeleton-svelte ni skeleton-react. Les boutons, le badge, la puce, la carte et la présentation à divulgation progressive reposent sur de véritables utilitaires CSS ; le sélecteur de thème et la logique d’enregistrement de l’état sont propres à JavaScript. Cette séparation permet à l’exemple complet de fonctionner comme une petite page Vite, sans laisser entendre qu’un environnement d’exécution de composants de framework est utilisé.

Extrait de ce guide OpenDesign

Compiler les utilitaires au lieu d’importer le code source brut de CSS dans un navigateur

Le code source de Skeleton contient des directives Tailwind telles que @utility et @variant. La configuration Vite fournie inclut @tailwindcss/vite, et la feuille de style importe Tailwind avant Skeleton et les thèmes choisis. Un lien brut vers le paquet source ne reproduirait pas les styles compilés. Le code source complet de la compilation est inclus afin que l’aperçu ne dépende pas de CSS généré de manière cachée.

  1. Importez Tailwind CSS.
  2. Importez les utilitaires Skeleton.
  3. Importez chaque thème que vous souhaitez sélectionner.
  4. Compilez la feuille de style avec le greffon Tailwind pour Vite.

Sélection du thème et valeurs effectives du système de design Skeleton

Importez explicitement chaque thème disponible

Cerberus, Mint et Rose sont chacun importés depuis le chemin themes du package. Le choix d’un nom modifie l’attribut data-theme sur la racine, qui sélectionne les déclarations de variables correspondantes. La référence répertorie, pour chaque thème, des échantillons réels de la palette principale, les extrêmes des surfaces, l’espacement, le rayon et les déclarations de polices. Ces valeurs sont lues dans les fichiers épinglés, et non générées en remplaçant une seule couleur d’accent.

  • Cerberus est la présentation initiale.
  • Mint et Rose sont des thèmes distincts, importés séparément.
  • La sélection d’un thème modifie data-theme, pas une arborescence de contenu copiée.

Conservez l’intégralité du contenu pendant la comparaison

La carte de lecture, la liste de contrôle et l’état d’enregistrement restent intacts lors d’un changement de thème. Après chaque sélection, le panneau latéral lit les variables calculées à partir de la racine et affiche les valeurs effectivement résolues par le navigateur. La comparaison est ainsi pertinente : la typographie, les formes et la palette peuvent changer, tandis que le lecteur examine le même contenu et le même état.

Apparence sombre et color-scheme du système de design Skeleton

Reliez la variante sombre au contrôle réel

La feuille de style définit une variante sombre basée sur une classe, correspondant à .dark sur la racine ou ses descendants. Les règles globales de Skeleton utilisent cette variante pour définir color-scheme. Le bouton d’apparence modifie donc les conditions utilisées par les associations de surfaces light-dark(). Un bouton qui modifie une classe sans changer la variante par défaut de Tailwind, basée sur le média, peut indiquer le mode sombre alors que les surfaces restent claires.

Utilisez un preset qui reste lisible

L’action d’apparence utilise preset-tonal-primary, et l’action de lecture utilise preset-filled-primary-500. Les presets définissent la relation entre la surface et la couleur de premier plan ; un jeton de couleur seul ne garantit pas un contraste lisible. L’état sombre réellement affiché a été vérifié après le passage à Rose, y compris le texte du contrôle et le contenu dévoilé, plutôt que de supposer qu’un changement de classe réussi garantissait un rendu correct.

Typographie, formes et mise en page du système de design Skeleton

Distinguez les déclarations du thème de la hiérarchie d’origine

Cerberus déclare une police système, tandis que Rose inclut une autre pile de polices de remplacement. Cette étude ne charge aucune police distante ; le navigateur utilise les polices disponibles dans la pile sélectionnée. La mise en page d’origine définit explicitement un titre de page de 36px et un titre de lecture de 28px. Ces choix de composition restent distincts des déclarations de famille et de graisse propres au thème.

Laissez le thème définir le rayon et l’espacement

État de lecture et réinitialisation de la présentation du système de design Skeleton

Gardez l’enregistrement local et réversible

L’action de lecture bascule aria-pressed, modifie son libellé et met à jour un message d’état lisible. Elle n’enregistre qu’une valeur booléenne en mémoire pour cette page. Il n’y a ni compte, ni persistance, ni requête réseau. Le même état reste visible après un changement de thème, ce qui permet aux lecteurs de comparer un état actif entre différentes palettes.

Réinitialisez la présentation sans supprimer l’état de lecture

La réinitialisation de la présentation rétablit Cerberus et l’apparence claire, mais laisse délibérément inchangée la valeur booléenne d’enregistrement. Son libellé précise cette portée. Une action distincte permet de supprimer la carte de lecture du bureau local. Confondre ces deux actions ferait qu’une simple réinitialisation visuelle effacerait de façon inattendue le choix actuel de l’utilisateur.

Élément de divulgation natif et contenu réel du système de design Skeleton

Utilisez un élément details du navigateur

L’explication complémentaire utilise une véritable structure details/summary avec l’utilitaire de divulgation. Le navigateur gère l’ouverture au clavier et au pointeur, tandis que Skeleton en fournit la présentation. Il ne s’agit pas du composant Svelte Accordion de Skeleton, et aucun composant API ni événement n’est inventé. Le paragraphe explique concrètement ce qui change et ce qui reste fixe.

Examinez l’état ouvert après la transition

La feuille de style peut animer le redimensionnement du contenu dévoilé. La vérification visuelle attend la fin de la transition avant de capturer l’état ouvert ; une capture d’écran immédiate peut montrer le contenu en pleine expansion. La validation de la mise en page inclut le paragraphe ouvert et la longue pile de polices calculée, afin que le panneau latéral ne soit pas validé uniquement lorsque son contenu conséquent est masqué.

Inspection responsive des thèmes du système de design Skeleton

Gardez les valeurs lisibles sur les écrans étroits

L’atelier passe à une disposition en colonne sous 720px, et le remplissage extérieur est réduit à 16px. Chaque nom et valeur de jeton calculé occupe sa propre ligne, afin que les longues piles de polices et les chaînes OKLCH puissent revenir à la ligne sans imposer de défilement horizontal. Les cinq échantillons de couleur restent visibles dans une grille compacte, et les contrôles de thème passent sur plusieurs lignes si nécessaire.

Testez différentes combinaisons de thèmes et d’états

Le test du navigateur enregistre la carte de lecture, passe par Mint et Rose, active l’apparence sombre, ouvre le contenu dévoilé, puis réinitialise la présentation. L’état enregistré doit être conservé tout au long de la séquence. Celle-ci a été vérifiée jusqu’à une largeur de 280px : le test couvre donc les valeurs longues réelles et le contenu développé, au lieu de se limiter à une capture de l’unique thème initial.

Sources Vite complètes du système de design Skeleton

Enregistrez les quatre fichiers source

L’exemple comprend index.html, style.css, main.js et vite.config.mjs. Installez les dépendances épinglées de Skeleton, Tailwind et Vite, puis exécutez Vite dans ce répertoire. La directive @source explicite pointe vers le HTML qui contient les classes utilitaires et garantit que le résultat compilé inclut les classes utilisées par l’espace de lecture. Aucun squelette de framework ne manque.

Choisissez séparément les composants du framework selon vos besoins

Exemples de composants du système de design Skeleton

index.html

Contenu de lecture complet, composants natifs CSS et commandes d’origine.

html
<!doctype html><html lang="en" data-theme="cerberus"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Theme reading desk</title></head><body><main><header><div><p class="text-sm font-bold">SKELETON / THEME READING DESK</p><h1>The same content, three themes.</h1><p class="intro">Inspect actual Skeleton 5.0.1 palettes, surface pairings and native CSS components while keeping a complete reading card in view.</p></div><span class="badge preset-tonal-primary">Original OpenDesign study</span></header><div class="controls"><label for="theme">Theme<select id="theme" class="select"><option value="cerberus">Cerberus</option><option value="mint">Mint</option><option value="rose">Rose</option></select></label><button id="mode" class="btn preset-tonal-primary">Use dark appearance</button><button id="reset" class="btn preset-tonal-surface">Reset presentation</button></div><div class="workbench"><article class="card preset-outlined-surface-200-800 reading"><span class="chip preset-tonal-primary">Reading / 4 minutes</span><h2 class="mt-6">Make the next step easier to see</h2><p>A useful interface explains the next action without making every detail compete for attention. Start with a complete piece of content, then inspect how its hierarchy survives a change of theme.</p><ul><li>Keep the heading clear in both appearances.</li><li>Use a supporting surface to group related information.</li><li>Repeat an important state in text, not color alone.</li></ul><button id="bookmark" class="btn preset-filled-primary-500 bookmark" aria-pressed="false">Save to this reading desk</button><p id="message" role="status">This reading card is not saved.</p></article><aside class="card preset-tonal-surface side"><h2 class="text-xl font-bold">Current theme values</h2><div class="palette" aria-label="Primary palette samples"><div class="swatch" style="background:var(--color-primary-100)"></div><div class="swatch" style="background:var(--color-primary-300)"></div><div class="swatch" style="background:var(--color-primary-500)"></div><div class="swatch" style="background:var(--color-primary-700)"></div><div class="swatch" style="background:var(--color-primary-900)"></div></div><dl class="tokens" id="tokens"></dl><details class="disclosure mt-6"><summary class="preset-tonal-primary">What changes with the theme?</summary><p>The imported theme changes palette, typography declarations and shape variables. The reading text and local saved state stay the same. Dark appearance changes surface pairings; it is not a second copy of the content.</p></details></aside></div><p class="scope">Uses Skeleton’s actual Tailwind CSS utilities and three shipped themes. The page logic is original plain JavaScript; no Skeleton Svelte or React component runtime is loaded. Saving changes this page only and sends nothing.</p></main><script type="module" src="./main.js"></script></body></html>

Référence du code

  • Conservez les quatre fichiers source dans un même répertoire de projet.

style.css

Imports de thèmes, variante sombre fondée sur les classes et composition adaptative.

css
@import 'tailwindcss';
@import '@skeletonlabs/skeleton';
@import '@skeletonlabs/skeleton/themes/cerberus';
@import '@skeletonlabs/skeleton/themes/mint';
@import '@skeletonlabs/skeleton/themes/rose';
@source './index.html';
@custom-variant dark (&:where(.dark, .dark *));
body{margin:0}*{box-sizing:border-box}main{max-width:1080px;margin:auto;padding:32px}header{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap;align-items:flex-start}h1{font-size:36px;line-height:1.15;font-weight:700;margin:16px 0}.intro{max-width:66ch;line-height:1.6}.controls{display:flex;gap:16px;align-items:end;flex-wrap:wrap;margin:32px 0}.controls label{display:grid;gap:8px}.workbench{display:grid;grid-template-columns:1.25fr 1fr;gap:24px}.reading{padding:32px}.reading h2{font-size:28px;line-height:1.25;font-weight:700}.reading p{line-height:1.7;margin:24px 0}.reading ul{list-style:disc;padding-left:24px}.reading li{margin:12px 0}.palette{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:24px 0}.swatch{height:72px;border-radius:var(--radius-base)}.tokens{display:grid;gap:12px;font-size:13px}.tokens div{display:grid;gap:8px;padding-bottom:12px;border-bottom:1px solid currentColor}.tokens dd{overflow-wrap:anywhere}.side{padding:24px}.disclosure p{padding:16px;line-height:1.6}.scope{font-size:13px;line-height:1.6;margin-top:32px}.bookmark{margin-top:24px}#message{font-size:14px;margin-top:16px}:focus-visible{outline:3px solid var(--color-primary-500);outline-offset:3px}@media(max-width:720px){main{padding:16px}.workbench{grid-template-columns:1fr}.reading{padding:24px}.palette{gap:4px}.swatch{height:56px}}

.workbench>*{min-width:0}.bookmark{max-width:100%;white-space:normal;height:auto;min-height:2rem;text-align:center}.disclosure summary{white-space:normal}

Référence du code

  • Conservez les quatre fichiers source dans un même répertoire de projet.

main.js

Inspection des jetons calculés et états de lecture et de présentation indépendants.

javascript
import './style.css';
const root=document.documentElement;let saved=false;function inspect(){const style=getComputedStyle(root);const keys=['--color-primary-500','--radius-base','--spacing','--typo-base--font-family'];document.querySelector('#tokens').replaceChildren(...keys.map(key=>{const row=document.createElement('div'),dt=document.createElement('dt'),dd=document.createElement('dd');dt.textContent=key;dd.textContent=style.getPropertyValue(key).trim();row.append(dt,dd);return row}));}document.querySelector('#theme').addEventListener('change',e=>{root.dataset.theme=e.target.value;inspect()});document.querySelector('#mode').addEventListener('click',e=>{let dark=root.classList.toggle('dark');e.currentTarget.textContent=dark?'Use light appearance':'Use dark appearance';inspect()});document.querySelector('#bookmark').addEventListener('click',e=>{saved=!saved;e.currentTarget.setAttribute('aria-pressed',String(saved));e.currentTarget.textContent=saved?'Remove from this reading desk':'Save to this reading desk';document.querySelector('#message').textContent=saved?'Saved in this preview only.':'This reading card is not saved.'});document.querySelector('#reset').addEventListener('click',()=>{root.dataset.theme='cerberus';root.classList.remove('dark');document.querySelector('#theme').value='cerberus';document.querySelector('#mode').textContent='Use dark appearance';inspect()});inspect();

Référence du code

  • Conservez les quatre fichiers source dans un même répertoire de projet.

vite.config.mjs

Intégration réelle du compilateur Tailwind.

javascript
import{defineConfig}from'vite';import tailwindcss from'@tailwindcss/vite';export default defineConfig({plugins:[tailwindcss()],base:'./',build:{cssCodeSplit:false}});

Référence du code

  • Conservez les quatre fichiers source dans un même répertoire de projet.
04

Configuration de l’agent du système de design Skeleton

Point de départ de l’implémentation

Enregistrez d’abord les quatre fichiers fournis. Il s’agit de la couche utilitaire CSS, qui ne nécessite ni Svelte ni environnement d’exécution React.

sh
npm init -y
npm install @skeletonlabs/[email protected]
npm install --save-dev [email protected] @tailwindcss/[email protected] [email protected]
npx vite --host 127.0.0.1

Un prompt pour votre projet

Prompt pour l’agent IA
Implémentez l’espace de lecture complet Skeleton 5.0.1 à l’aide de ses véritables classes utilitaires CSS et des imports de thèmes Cerberus/Mint/Rose. Préservez le mode sombre fondé sur les classes, des lignes de jetons calculés faciles à lire, le contenu complet, l’état local d’enregistrement et la réinitialisation de la présentation sans suppression de cet état. Distinguez la couche CSS des API de composants des frameworks.
05

Sources et périmètre du système de design Skeleton

Véritables classes utilitaires CSS Tailwind Skeleton et thèmes fournis, avec le comportement d’origine d’une page JavaScript native. Aucun environnement d’exécution Svelte Skeleton ou React n’est chargé.