sashigane

テーマの切り替え

ライトモードとダークモードをどう切り替えるか

既定では OS の設定に従います。prefers-color-scheme を見ているので、 何も書かなくてもライトモードとダークモードが切り替わります。

固定したいとき

<html> に data-theme を付けます。

<html data-theme="dark">

付けなければ OS に従い、付ければその値で固定されます。

next-themes と組み合わせるとき

そのままで動きます。 next-themes は既定で <html> に data-theme を付けるので、 このシステムが見ている属性と一致します。

attribute="class" に変えている場合だけ注意が要ります。class="dark" は 切り替わるのに色が変わりません。 そのときは両方を出してください。

<ThemeProvider attribute={['class', 'data-theme']}>

next-themes は Next.js 専用ではありません。 peerDependencies は React と React DOM だけなので、Vite など他の React 環境でも使えます(README の例は Next.js で書かれています)。

面ごとの深さ

data-theme は明暗を決めるだけです。同じテーマの中の深さは data-sg-surface で宣言します。

<body data-sg-surface="page">
  <article data-sg-surface="surface">…</article>
</body>

深い面では、文字色や境界色が自動で1段深い値を指します。 背景だけを塗る方法は用意していません——塗れてしまうと前景が浅いまま残り、 読みにくい組み合わせができてもエラーになりません。

On this page