テーマ対応コンポーネントシステム · 新しいリソース

Skeleton デザインシステム.

Skeleton 5.0.1の実際のCerberus、Mint、Roseテーマを、トークンのライブ検査、ダークな背景の組み合わせ、元に戻せるローカル状態を備えた、読書机をイメージした画面で比較します。

OpenDesign ガイド8章40件の参考項目オリジナルアプリケーションガイド
01

Skeleton デザインシステムのインターフェースプレビュー

保存した閲覧状態を維持したまま、テーマと表示を切り替えて、反映された値を確認できます。

Skeletonのテーマ3種類をすべて確認完全な例を開く
Skeleton 5.0.1 CSS Tailwind 4でコンパイルされたユーティリティとテーマ。オリジナルのJavaScriptコントロール。· 実装リファレンス
02

Skeleton デザインシステムのデザインリファレンス

バージョンを固定したSkeleton 5.0.1のテーマファイル、コンパイル済みのCSSユーティリティの動作、明示的に選択したオリジナルの構成。

Cerberusテーマの値

ソース
名前 / ルール値 / 設定用途
--spacing0.25rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--radius-base0.5rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-base--font-familysystem-ui実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-heading--font-weightbold実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-100oklch(0.84 0.08 254.62)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-300oklch(0.7 0.15 254.36)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-500oklch(0.57 0.21 258.29)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-700oklch(0.46 0.17 257.78)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-900oklch(0.34 0.11 257.14)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-50oklch(0.99 0 0)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-950oklch(0.18 0 0)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。

Mintテーマの値

ソース
名前 / ルール値 / 設定用途
--spacing0.25rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--radius-base0.375rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-base--font-familysystem-ui, sans-serif実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-heading--font-weightnormal実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-100oklch(89.8% 0.08 156.34deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-300oklch(86.28% 0.13 151.76deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-500oklch(83.57% 0.18 148.98deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-700oklch(71.28% 0.15 148.61deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-900oklch(58.17% 0.13 148.16deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-50oklch(89.13% 0.03 155.27deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-950oklch(21.88% 0.02 186.33deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。

Roseテーマの値

ソース
名前 / ルール値 / 設定用途
--spacing0.25rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--radius-base0.375rem実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-base--font-familySeravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--typo-heading--font-weightnormal実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-100oklch(92.93% 0.03 340.64deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-300oklch(81.16% 0.08 345.32deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-500oklch(69.89% 0.13 348.12deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-700oklch(57.25% 0.1 346.44deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-primary-900oklch(43.55% 0.07 343deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-50oklch(96.76% 0.01 318.08deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。
--color-surface-950oklch(25.82% 0.01 304.87deg)実際のテーマ定義。data-themeでこのインポート済みテーマを選ぶと、これらの値がまとめて切り替わります。オリジナルの閲覧状態は変わりません。

CSSの連携とセマンティックな色の組み合わせ

ソース
名前 / ルール値 / 設定用途
Foundation import@import "@skeletonlabs/skeleton"ユーティリティ定義がコンパイルされるよう、Tailwindの後に読み込みます。
Theme selectiondata-theme="cerberus" / "mint" / "rose"変数を提供できるのは、インポートされたテーマだけです。
Class-based appearance@custom-variant dark (&:where(.dark, .dark *))オリジナルの表示切り替えボタンで、コンパイル済みのダークバリアントを実際に切り替えられるようにします。
Surface pairingslight-dark(light value, dark value)Skeletonのグローバル設定はcolor-schemeを指定します。対応するバリアントなしでクラスだけを切り替えても不十分です。
Filled actionbtn preset-filled-primary-500ネイティブボタンの形状と、テーマに応じて変化するプリセットを組み合わせます。
Supporting actionbtn preset-tonal-primary現在の表示に合ったトーンの組み合わせを使用します。
Disclosuredetails.disclosure > summarySkeleton CSSを使ったネイティブブラウザーの開閉状態です。Svelteコンポーネントの初期化は行われません。
03

Skeleton デザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

DESIGN-skeleton.md

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

ガイドをダウンロード

Skeleton デザインシステム CSS 基盤とフレームワークのレイヤー

実際に動作するレイヤーを選ぶ

この閲覧デスクでは、@skeletonlabs/skeleton 5.0.1、そのTailwind CSSユーティリティ、同梱された3種類のテーマを使用しています。skeleton-svelteやskeleton-reactは読み込みません。ボタン、バッジ、チップ、カード、開閉表示には実際のCSSユーティリティを使用し、テーマセレクターと保存状態のロジックはオリジナルのJavaScriptです。この境界を明確にすることで、フレームワークのコンポーネントランタイムがあるかのように見せずに、小規模なViteページとして完全な例を実行できます。

この OpenDesign ガイドから

生のCSSをブラウザーに読み込むのではなく、ユーティリティをコンパイルする

Skeletonのソースには、@utilityや@variantなどのTailwindディレクティブが含まれています。付属のVite設定では@tailwindcss/viteを読み込み、スタイルシートではTailwindを読み込んだ後にSkeletonと選択したテーマをインポートします。ソースパッケージへのリンクだけでは、コンパイル済みスタイルを再現できません。プレビューが隠れた生成済みのCSSに依存しないよう、ビルド用ソース一式を含めています。

  1. Tailwind CSSをインポートします。
  2. Skeletonのユーティリティをインポートします。
  3. 選択するテーマをそれぞれインポートします。
  4. Tailwind Viteプラグインでスタイルシートをコンパイルします。

Skeletonデザインシステムのテーマ選択と実際の値

利用可能な各テーマを明示的にインポートする

Cerberus、Mint、Roseは、それぞれパッケージのthemesパスからインポートします。名前を選択するとルートのdata-themeが変更され、対応する変数宣言が適用されます。リファレンスには、各テーマの実際のプライマリパレットのサンプル、サーフェスの両端の値、スペーシング、角丸、フォント宣言が記載されています。これらの値は、アクセントカラーを入れ替えて生成したものではなく、固定されたファイルから読み取っています。

  • 初期表示はCerberusです。
  • MintとRoseは、それぞれ個別にインポートする実際のテーマです。
  • テーマの選択ではdata-themeが変更され、コンテンツツリーは複製されません。

比較中も同じコンテンツ全体を保つ

テーマを切り替えても、読書カード、チェックリスト、保存状態はそのまま維持されます。サイドパネルは選択のたびにルートから計算済みの変数を読み取り、ブラウザーで実際に解決された値を表示します。同じコンテンツと状態を見ながら、タイポグラフィ、形状、配色を比較できるため、実用的な比較になります。

Skeletonデザインシステムのダーク表示とcolor-scheme

ダークバリアントを実際のコントロールに連動させる

スタイルシートでは、ルートまたはその子孫にある.darkに対応する、クラスベースのダークバリアントを定義しています。Skeletonのグローバルルールは、このバリアントを使ってcolor-schemeを設定します。そのため、表示切り替えボタンによってlight-dark()のサーフェスの組み合わせに適用される条件も変わります。クラスだけを変更し、Tailwindのデフォルトのメディアクエリベースのバリアントをそのままにすると、実際のサーフェスはライト表示のままなのに、表示上はダークとされる場合があります。

読みやすさを保つプリセットを使う

表示切り替えにはpreset-tonal-primary、読書操作にはpreset-filled-primary-500を使用します。プリセットはサーフェスと前景色の関係を定めます。色トークンだけでは、読みやすいコントラストは確保されません。Roseに切り替えた後、コントロールのテキストや開示部分も含め、実際のダーク表示を確認しました。クラスの切り替えに成功しただけで、見た目も正しいと判断したわけではありません。

Skeletonデザインシステムのタイポグラフィ、形状、レイアウト

テーマの宣言と元の階層構造を分けて考える

Cerberusではシステムフォントが宣言され、Roseでは異なるフォールバックスタックが指定されています。この検証では外部フォントを取得せず、選択したスタック内で利用可能なフォントをブラウザーが使用します。元のレイアウトでは、ページ見出しに36px、読書見出しに28pxを明示的に指定しています。こうした構成上の選択は、テーマ独自のフォントファミリーやウェイトの宣言とは別のものです。

角丸とスペーシングはテーマの値を使う

Skeletonデザインシステムの読書状態と表示のリセット

保存状態をローカルに保ち、元に戻せるようにする

読書操作ではaria-pressedを切り替え、ラベルを変更し、読みやすいステータスメッセージを更新します。このページ内のメモリに真偽値を保存するだけで、アカウントや永続化、ネットワークリクエストはありません。テーマを変更しても同じ状態が表示されるため、配色を変えながら有効状態を比較できます。

読書状態を消さずに表示をリセットする

表示のリセットではCerberusとライト表示に戻しますが、保存済みの真偽値は意図的に維持します。ラベルもこの動作範囲を示しています。読書カードをローカルのデスクから削除する操作は別に用意できます。この2つの操作を混同すると、見た目をリセットしただけなのに、ユーザーの現在の選択まで予期せず破棄してしまいます。

Skeletonデザインシステムのネイティブな開示要素と実際のコンテンツ

ブラウザーのdetails要素を使う

補足説明には、開示ユーティリティを適用したdetails/summary構造を使用しています。開閉操作はブラウザーがキーボードとポインターの両方に対応し、表示はSkeletonが担います。これはSkeletonのSvelte Accordionコンポーネントではなく、コンポーネントAPIやイベントを捏造していません。段落には、何が変わり、何が維持されるのかを具体的に説明しています。

遷移後の開いた状態を確認する

スタイルシートでは、開示部分のサイズをアニメーションできます。開いた状態を撮影する前に遷移が終わるまで待機します。すぐにスクリーンショットを撮ると、コンテンツが展開途中の状態になることがあります。レイアウトの検証では、開いた段落と長い計算済みフォントスタックも確認し、内容の大部分を隠した状態でしかサイドパネルが正しく表示されない、といったことがないようにします。

Skeletonデザインシステムのレスポンシブなテーマ検証

狭い画面でも値を読みやすく保つ

720px未満ではワークベンチを縦に並べ、外側のパディングを16pxに縮小します。計算済みのトークン名と値は1行ずつ配置します。これにより、長いフォントスタックやOKLCH文字列も折り返され、横スクロールが発生しません。5つのカラーサンプルはコンパクトなグリッド内に表示し、テーマのコントロールは複数行に折り返します。

テーマと状態の組み合わせをテストする

ブラウザーテストでは、読書カードを保存し、MintとRoseを順に切り替え、ダーク表示を有効にして、開示部分を開いた後、表示をリセットします。この一連の操作を通して、保存状態が維持される必要があります。280px幅まで確認済みのため、初期テーマのスクリーンショットだけでなく、実際の長い値や展開されたコンテンツも検証しています。

Skeletonデザインシステムの完全なViteソース

4つのソースファイルをすべて保存する

この例にはindex.html、style.css、main.js、vite.config.mjsが含まれています。固定バージョンのSkeleton、Tailwind、Viteの依存関係をインストールし、そのディレクトリでViteを実行します。明示的な@sourceは、ユーティリティクラスを含むHTMLを指定しているため、読書デスクで使うクラスがコンパイル済みの出力に含まれます。フレームワークのひな形に不足はありません。

必要に応じてフレームワークのコンポーネントを個別に選択する

Skeletonデザインシステムのコンポーネント例

index.html

本文全体、ネイティブなCSSコンポーネント、オリジナルのコントロール。

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>

コードリファレンス

  • 4つのソースファイルをすべて同じプロジェクトディレクトリに配置します。

style.css

テーマのインポート、クラスベースのダークバリアント、レスポンシブな構成。

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}

コードリファレンス

  • 4つのソースファイルをすべて同じプロジェクトディレクトリに配置します。

main.js

トークン値の確認と、読み取り・表示状態の個別管理。

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();

コードリファレンス

  • 4つのソースファイルをすべて同じプロジェクトディレクトリに配置します。

vite.config.mjs

実際のTailwindコンパイラーとの連携。

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

コードリファレンス

  • 4つのソースファイルをすべて同じプロジェクトディレクトリに配置します。
04

Skeletonデザインシステムのエージェント向けセットアップ

実装の出発点

まず、提供された4つのファイルを保存します。これはCSSユーティリティレイヤーであり、SvelteやReactのランタイムは必要ありません。

シェル
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

あなたのプロジェクト向けプロンプト

AI エージェント用プロンプト
実際のCSSユーティリティとCerberus/Mint/Roseテーマのインポートを使い、Skeleton 5.0.1の読書デスクを完全に実装します。クラスベースのダークカラースキーム、読みやすいトークン値の一覧、コンテンツ全体、ローカルの保存状態、およびその状態を削除しない表示リセットを維持してください。CSSレイヤーとフレームワークのコンポーネントAPIは明確に区別してください。
05

Skeletonデザインシステムのソースと適用範囲

実際のSkeleton Tailwind CSSユーティリティと同梱テーマを使用し、ページの動作はオリジナルのプレーンなJavaScriptで実装しています。Skeleton SvelteやReactのランタイムは読み込んでいません。