本文へスキップ
md-book

テーマ#

md-book の公開テーマ API は、名前空間付きの CSS カスタムプロパティ群です。テーマとは、それらを 再定義する 1 枚の .css ファイルで、style.css の 後 に読み込みます。

<link rel="stylesheet" href="@ibitsuki0296/md-book/style.css" />
<link rel="stylesheet" href="/my-theme.css" />

トークン一覧#

:root {
  /* 色 */
  --md-book-color-bg: #ffffff;
  --md-book-color-fg: #18181c;
  --md-book-color-fg-muted: #6f6f7b;
  --md-book-color-surface: #fafafa;
  --md-book-color-border: #e7e7ea;
  --md-book-color-accent: #4f46e5;
  --md-book-color-accent-fg: #ffffff;
  --md-book-color-code-bg: #fafafa;

  /* シンタックスハイライト */
  --md-book-color-tok-keyword: #7c3aed;
  --md-book-color-tok-string: #047857;
  --md-book-color-tok-function: #2563eb;

  /* タイポグラフィ */
  --md-book-font-body: "Inter", ui-sans-serif, system-ui, sans-serif;
  --md-book-font-mono: "JetBrains Mono", ui-monospace, Menlo, monospace;
  --md-book-leading: 1.7;

  /* レイアウト */
  --md-book-measure: 46rem;       /* 本文の幅 */
  --md-book-sidebar-width: 16rem;
  --md-book-toc-width: 14rem;
  --md-book-radius: 0.75rem;
}

パッケージの themes/default.css に全トークンと既定値が載っているので、出発点としてコピーしてください。 基本パレット(--md-book-gray-*、--md-book-brand-*)も上書きできるので、1 か所で配色を変えることもできます。

フォント#

md-book 自身はフォントをダウンロードしません。既定のスタックは Inter と JetBrains Mono を先頭に 並べているので、それらを読み込めば(Google Fonts への <link> か、セルフホストの @font-face) 十分です。読み込まなければ OS の UI フォントが使われます。

シンタックスハイライト#

js/ts、json、css、html、bash、yaml、python、diff のコードブロックは、描画時に小さな組み込み トークナイザで色分けされ、--md-book-color-tok-* トークンで着色されます。それ以外の言語は無着色です。 完全な文法のハイライトが必要なら mount() に highlight: (code, lang) => html(Shiki や highlight.js など)を 渡すか、renderMarkdown() で highlight: false を指定して組み込み版を止めます。

ダークモード#

[data-theme="dark"] のブロックを用意します。ランタイムは <html> に data-theme を設定します。 テーマファイルがなければ prefers-color-scheme からもダークが適用されます。

:root[data-theme="dark"] {
  --md-book-color-bg: #0a0a0d;
  --md-book-color-fg: #f4f4f5;
  --md-book-color-border: #26262d;
  --md-book-color-accent: #818cf8;
}

themeInitScript()(または同等のインラインスニペット)を <head> に貼ると、保存済みのテーマが 最初の描画前に適用されます。

構造の上書き#

同梱のルールは @layer md-book.tokens, .base, .layout, .content, .components に入っています。 レイヤーなし で書いたルールはそのすべてに勝つので、詳細度の競り合いなしに構造を変えられます。

.md-book-header { position: static; }   /* レイヤー内の `position: sticky` に勝つ */

構造の上書きに色を直接書かず、トークン経由にしてください。ライトとダークが揃ったままになります。 同梱スタイルについては npm run validate:tokens が検査します。