Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
color-scheme: light dark; を完全に理解する
Search
uhyo
February 17, 2025
Programming
8
660
color-scheme: light dark; を完全に理解する
2025-02-21 Browser and UI #1
uhyo
February 17, 2025
Tweet
Share
More Decks by uhyo
See All by uhyo
libsyncrpcってなに?
uhyo
0
300
Next.jsと状態管理のプラクティス
uhyo
7
5.6k
10ヶ月かけてstyled-components v4からv5にアップデートした話
uhyo
5
600
更新系と状態
uhyo
8
3.1k
React 19アップデートのために必要なこと
uhyo
8
2.4k
React 19 + Jotaiを試して気づいた注意点
uhyo
9
3.4k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
3
3.2k
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
8
4.3k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
4.6k
Other Decks in Programming
See All in Programming
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
12
4.4k
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
820
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
530
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
480
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
160
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
790
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
190
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
7.3k
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
760
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
100
Porting a visionOS App to Android XR
akkeylab
0
460
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Done Done
chrislema
184
16k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Gamification - CAS2011
davidbonilla
81
5.4k
A better future with KSS
kneath
238
17k
Code Review Best Practice
trishagee
69
18k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Faster Mobile Websites
deanohume
307
31k
Transcript
color-scheme: light dark; を完全に理解する 2025-02-21 Browser and UI #1 CSS
uhyo
これまでのあらすじ ぼく「適当にReactアプリを作りたいな。 とりあえず npm create viteしよう」 2
おなじみの初期画面 3
CSSを見るとこんな記述が! 4
このCSSはどういう意味? color-scheme: light dark; 5
color-schemeプロパティ 仕様的な解説は以前書いたこの記事を参照(宣伝) でも直観的にどういう意味なのかよくわからない 6
color-schemeプロパティ color-scheme: light; • ライトテーマってこと? color-scheme: dark; • ダークテーマってこと? color-scheme:
light dark; • ??? 7
This Talk color-scheme: light dark; これの意味を完全に理解することを目指して 解説します 8
結論 color-scheme: light dark; これは 「このページはライトテーマも ダークテーマも対応しているよ!」 という宣言です。 9
ライトテーマもダークテーマも 対応してるとは @mediaでprefers-color-schemeなどを使って ライトモード向けとダーク モード向けのスタイルを出 しわけていること。 (Viteの初期実装はdarkをデフォルトにして lightの場合にスタイル上書きする派) 10
color-scheme: light dark; の効果 11
UIのレンダリングが異なる color-scheme: light dark; が適用されている 場合、スクロールバーや、各種コントロールの レンダリングがライトモードとダークモードで 変化する。(画像はWindowsのGoogle Chrome) 12
片方だけにすると…… color-scheme: dark; にすると、 UIは常にダークテーマ向けに描画される。 逆も同じ。 13
併記するのは両対応という意味 color-scheme: light dark; は両対応という 意味。この場合、ユーザーやOSの設定に合わせて 選択される。 (基本的には@media(prefers-color-scheme) と一致 するカラーテーマが選択される)
14
初期値は? 初期値はcolor-scheme: normal;で、 これは基本的にUIの描画に影響しない。 (大抵のブラウザはライトモードと一致したUIになる) これは後方互換性のため。 昔作られたページでブラウザが勝手にダーク テーマ用UIにすると、意図と異なる表示になって しまう。 15
互換性の問題 特にcolor-schemeを使わず、#666背景にブラウザ のデフォルトのボタンを配置した場合の表示 (WindowsのGoogle Chromeの場合) 16
互換性の問題 ブラウザが勝手にダークモード用のUIを適用 すると、ボタンが背景に同化してしまう! 17
color-schemeはオプトインのための機能 ブラウザとしては、ユーザーがダークモードを 希望している場合は各種UIもダークモード向けに したい。 しかし、ページが白基調(ダークモード未対応) なのにUIだけダークモードになったら不自然。 先ほどみたような互換性の問題もある。 18
color-schemeはオプトインのための機能 ページ側から「このページはダークモードUIにも 対応してるよ!」とブラウザに教えてあげるのが color-scheme: light dark; である。 つまり、ブラウザのデフォルトUIの色出し分け 機能にオプトインするということ。 19
オプトインのために必要なこと オプトインするためには、ブラウザがライト モード・ダークモードのどちらのUIでも、 いい感じにページを表示できる必要がある。 (特に色のコントラストとか) そのためにprefers-color-schemeなどの道具を 使う必要がある。 (ほかの道具はシステムカラーなど) 20
余談: @media以外の方法 システムカラー background-color: canvas; color: canvastext; light-dark()関数 color: light-dark(#333b3c,
#efefec); background-color: light-dark(#efedea, #223a2c); 21
color-schemeの他の使い方 逆に、ユーザーの設定とか関係なく常に 黒基調で表示されるページの場合は、 color-scheme: dark; を設定するのが適切。 「このページはダークモードのみなのでダーク モード向けUIで表示してね!」という意味になる。 22
補足 •このトークではページ全体にcolor-schemeを 適用する前提で話しましたが、一部の要素にだけ 適用することもできます。 • color-scheme: only light; などの話は 今日は省略。
23
これだけ覚えて帰ってほしいまとめ @media(prefers-color-scheme)などを使っている ページは、color-scheme: light dark;を 指定できます。指定しよう。 常に黒背景なページはcolor-scheme: dark; を指定しよう。 (常に白背景なページも同じ。実用上あまり意味がないかもしれないが)
24