ダークモードの 6 つのレベル

2026/04/20 3:36

ダークモードの 6 つのレベル

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

この記事は、暗いモードの実装に関する実用的なフレームワークを提示しており、単純な meta タグから高度な動的セレクターへと段階的に進みます。最も重要な洞察点は、開発者が必要に応じて、基本的なシステム好みに基づく検出か、洗練された手動制御の間のいずれ也可以选择できる点です。初期の手法は標準的な CSS ファルバックと別々のファイルに依存していた一方、最新の技術としては

light-dark()
関数や登場しつつある
:has()
セレクターがあり、これらによりユーザーが特定のクラスを適用することなく、非常に柔軟なデザインを実現することが可能になっています。しかしながら、現在のブラウザのサポートは不均一であり、例えば Safari は暗いモードにおけるアクセシブルなリンクの色で歴史的に困難に遭遇し、印刷プレビューをデフォルトで明けなテーマに戻す傾向があります。さらに、
light-dark()
関数などの機能は執筆当時の時点で普遍的にサポートされておらず、その直後の実現可能性が制限されていました。これからの将来に向けて、CSS Naked Day のようなイニシアチブは、カスタムスタイルを除去して色の干渉なしにサイトの動作をテストすることを促しています。ブラウザの能力が拡大につれ、より高度な実装レベルが標準化され、企業がアクセシビリティの課題を解決するだけでなく、異なるプラットフォームやデバイス間で一貫したユーザーエクスペリエンスを保証できるようになるでしょう。

本文

ダークモードの 6 つのレベル(そしてそれ以上のもの)

骨格のみ · ベーシック · 無害 · ボールド · 二分割的 · バリスティック · Beyond · 誘惑的

今年のカスケード・ネイキッドデイ(CSS Naked Day)の間、私に起こったことは、視覚的に隠された議論への想起だけではありませんでした。私は、私が訪問したほぼすべてのサイトにおいて、スタイルが削除された後、ダークモードがほとんど見られなくなっていることに気づきました。これは、もしかしたらダークモードの 6 つのレベルについて話す時が来たかもしれない、と考えさせるものです。

このブログ記事の少しキャッチーさには欠けるが、より正確なタイトルは「色彩スキーム切替の 6 つのレベル」でした。まあいいでしょう。この記事内の例のコードの多くはダーク側を示しているため、タイトルには意味があります。ただ、逆にすることも可能であることを念頭に置いておいてください。

これ以上言う必要はありません、さっそく始めましょう。

レベル 1:骨格のみ(Barebone)

このレベルは簡単なほうですが、導入部で言及されたサイトでは、基本的なディレクティブが欠けていたようです。単一の行の CSS を使用せずに、ライトモードとダークモードの区別に参加することもでき、これは一般に素晴らしいことですが、特に 4 月 9 日(CSS ネイキッドデイ)には特に関連します。

単にドキュメントの

<head>
に以下のメタタグを追加するだけで、準備が整います。

<meta name="color-scheme" content="light dark">

Web ページがこのタグを含んでいると、ブラウザはユーザーの色スキーム好みに従うべきであると理解します。

content
属性内のエントリの順序は、少なくとも理論的には重要です。色スキームの好みが設定されていないユーザーは、スペース区切りリストの最初に表示されます。しかし、今日のオペレーティングシステムの設定には「選択しない」というオプションがないため、常に OS に合致するものになります。

content
属性に単一のエントリを指定することもできます。これにより、ユーザーの好みを考慮せずに対応するスキームを強制できますが、それはまた別の話です。

ある程度まで、このメタタグは次のレベルにおける HTML の同等物です。

レベル 2:ベーシック(Basic)

次に、ライト/ダークモード区別の CSS を用いた方法に進みましょう。

html {
	color-scheme: light dark;
}

ドキュメントの木(DOM)内にすでにメタタグがある場合、この宣言は必要ありません。HTML に対して制御権がない場合(例えば、コンテンツが CMS から来る場合など)、メタタグの使用を常に推奨します。これにより、ブラウザには

<head>
で色彩スキームディレクティブについて既に情報が与えられ、CSS が解析される前にその情報を得ることができます。

両方の方法は、エージェントのデフォルトスタイルおよびそれに付随するライトモードとダークモードに準拠することを可能にします。次にいくつかの CSS を追加するが、同時に CSS システムカラーの使用のみを限定すれば、既にかなり整ったデザインを実現できます。実は、このサイトのページスタイルスイッチャーには「None」と「Basic」というエントリがあり、それらはレベル 1 とレベル 2 に相当します。

ここですべての 2 つの方法の違いが生じます。常に全体ドキュメントに適用されるメタタグとは異なり、CSS の

color-scheme
宣言はルート要素だけでなくどこでも設定できます。これにより、いくつかの追加の利用シナリオが可能になりますが、私は別のブログ記事でそれらを取り上げます。

レベル 3:無害(Benign)

私たちはベーシックな段階を過ぎましたが、まだ浅い水域にあります。比較的新しく CSS に加えられた、つまり

light-dark()
カラー関数によって、単純なライト/ダークモードの調整が可能になります。

html {
	background-color: light-dark(black, white);
	color: light-dark(white, black);
}

この関数は 2 つの引数をとり、どちらもカラーであるべきです。最初の引数はライトモードで適用され、2 つ目の引数の役割はおそらくご想像の通りでしょう。実際のカラーを単に指定するか、あるいはカスタムプロパティを含めるか、それはあなた次第です。

このブログ記事全体のどの部分においても、執筆時点でのブラウザサポートが特に良くないのは、このレベルのみです。しかし、そこには至ります。

レベル 4:ボールド(Bold)

次に、従来のメディアクエリに進みます。

@media (prefers-color-scheme: dark) {
	html {
		background-color: black;
		color: white;
	}
}

ライトまたはダークのいずれをクエリしても、メディアクエリにより最大のカスタマイズが可能で、単にカラーを変更するだけでなく何でも行うことができます。暗いモードで画像の不飽和化を行うフィルターを使用したいですか?それを実行しましょう。ボックスシャドウを輪郭線に置き換えることも可能ですね。

レベル 5:二分割的(Bisectional)

メディアクエリは HTML でも使用できます。それをメディア属性として追加すると、各スキームのためのスタイルシートを作成できる場合があります。

<link media="screen and (prefers-color-scheme:light)" rel="stylesheet" href="light.css">
<link media="screen and (prefers-color-scheme:dark)" rel="stylesheet" href="dark.css">

大幅なカスタマイズを行う場合、専用ファイルの用意は理にかなっています。ブラウザはクエリに一致しない CSS ファイルを無視する可能性があり、ダウンロードするものが一つ減ります。

レベル 6:バリスティック(Ballistic)

当然のことながら、ここにも JavaScript が役割を果たします。

matchMedia
関数を使用して、他のメディアクエリと同様にライトまたはダークスキームをクエリできます。

const isDarkScheme = window.matchMedia('(prefers-color-scheme:dark)');

そして何をすることも可能です。

現実には、一つの車線にとどまらず、上記のすべてのレベルからの技術を組み合わせることができます。

レベル 7:Beyond(超える)

ユーザーの好みに依存する必要はなく、色彩スキームスイッチャーを構築できます。

そうする場合、注意が必要です。ライトまたはダークモードの好みは真偽値(ブール状態)ではなく、最初はデフォルトで「Automatic」つまり

prefers-color-scheme
に従うのがよいからです。それに基づいてスキームスイッチャーを構築することにより、ユーザーが 3 つのモードの一つを選択できるようにします。

すでに読み取った全てのことを知っていたら、これ以降のものがあります。

レベル 8:誘惑的(Beguiling)

Web デベロッパーがレベル 7 の色彩スキームスイッチャーを作成する場合、通常 HTML 要素に

.dark
というクラスを追加し、時には
data-theme="dark"
というエレガントな属性さえ追加することがあります。 しかし、もはやそれらのいずれ也不需要です。なぜなら、
:has()
を使用して真のものをクエリできるからです。

html:has(meta[name="color-scheme"][content="dark"]) {
	--color-bg: black;
	--color-text: white;
}

それをライブで確認するには、「Color scheme switcher, 2024 edition」という私の companion の作品をご覧ください。


コメントと議論

私は間違いなくそれを含んだ

<head>
を持つサイトをいくつか見ました!
ですが、同意します。最近では利用可能な CSS の力が非常に多いです。新しいスタイルを持つ新しいサイトから始める場合、ライトモードとダークモードを本当に簡単に実装できます。🙂

@sarajw@front-end.social への返信。
喜ばしいことですね。また、異なるサイトを訪問しているようだようです。😅
CSS ネイキッドデイのためのウェブリング(webring)もありでしょうか?🤔

@CSSence@mas.to への返信。
ネイキッドデイのためだけにある少し特有のようです… おう、ナビゲーションバーや iframes などを使えばどうでしょう!旧式ですが…

@sarajw@front-end.social への返信。
フレームセット?いいえ、待ってください、それは逆効果になるかもしれません… adactio.com/journal/17916

@CSSence@mas.to への返信。
CSS ネイキッドリング?素晴らしい!参加します!
通常のリングですが、裸になる必要があることを示す URL パラメータ付きのものでもよいですか?
js-naked day のためにも機能するかもしれません @zachleat@zachleat.com
その通り、私のサイトがネイキッドデイの間にもライト/ダーク好みを正しくサポートしていたことにほとんど確信があります。😉

@villepreux@mastodon.social への返信。
ダーク&ライトの色スキームの好みがまだ尊重されます。

そのようだそうです。😀👍
よくできました!他にも多くのハイブリッドなレベルがあります。変数とカラーチェンジャー JS、隠された自動カラースキーム: gist.github.com/iamdtms/ddc4e556805e60652c21c06281d5b3c2

言及すべきことは、非常に最近まで(おそらく最新のバージョンまで)、Safari はダークモード用のアクセシブルなリンクカラーを持っていませんでした。昨年の CSS ネイキッドデイに、私のウェブサイトでのこの問題を発見し、メタタグを削除してライト色スキームのみを使用することにしました。今年は、古いバージョンの Safari を使用する人々にとってアクセシブルでない体験を生み出す可能性があることを知っていても、メタタグを追加しました。テキストボックスに暗いモードの Safari においては目立つ境界がないことに気づきました。
私は、将来 CSS ネイキッドデイのためにサイトをアクセシブルに保つのに十分なスタイルを含めることになるかもしれないと思うようになりました。なぜならユーザーエージェントスタイルは完全にアクセシブルではないからです(適切で構文的な HTML でも同様)。

@knowler@sunny.garden への返信。
その通り、良い指摘です。一方、そこにある多くのウェブサイトが一年間ずっとアクセシブルでないことに気づくと、4 月 9 日が私たちの最も心配の少ない日になります。

@CSSence@mas.to, @knowler@sunny.garden への返信。
あの日の a11y(アクセシビリティ)の失敗を見るのは、一種の部分のように思えますが、誰もがうまく機能するように尽力することは良いことです。

なぜ

screen and ...
が Bisectional の例にあるのか不思議です。プレフィックスがない場合のデフォルトは
all and ...
であり、印刷機からスタイルを隠さないと限り同様の効果があります。

@pepelsbey@mastodon.social への返信。
はい、印刷機から隠すのがアイデアだったと推測されます。それらはいずれもテーマに依存しないコアスタイルシートまたは専用のプリントスタイルシートで処理されているはずです。
なので、私はおそらく安全のために

screen
を使ったかったのですし、#DarkMode のために印刷機が使ってしまうと大量のインクが浪費されるかもしれませんね。😉

@CSSence@mas.to への返信。
サンプルページをデフォルトのダークモードスタイルを有効化して印刷しましたが、黒い文字だけ白纸になりました。すべてのブラウザが印刷に適用しないようです。

@pepelsbey@mastodon.social への返信。
興味深いです。私もテストを行いました。メディアクエリテストページを開いて、印刷プレビューでは

prefers-color-scheme
は常にライトを報告します。これは当然のことです。そして、あなたの結果の原因でもあると推測されます。知っておくだけで嬉しいです。(私は Firefox と Chromium のみテストできました。)

@CSSence@mas.to への返信。
悲しいことに、黒い紙と白いインクがあるなら、わかりますね。😄

@pepelsbey@mastodon.social への返信。
🤣

@pepelsbey@mastodon.social, @CSSence@mas.to への返信。
ダークモードの印刷機!

ご協力ください

Mastodon でご意見を述べていただいても、または単にこの記事を共有していただいても結構です。

同じ日のほかのニュース

一覧に戻る →

2026/04/19 23:14

**Vercel 2026 年 4 月 セキュリティインシデント**

## 日本語翻訳: 4 月 19 日と 26 日に、「ShinyHunters」と称する脅威アクターが Vercel のシステムへの不正侵入を行いデータを売却した旨を主張したが、Vercel はプラットフォーム上で Google Workspace のサードパーティ OAuth アプリケーションが乗っ取られ、それによる非認証アクセスが発生したことを公表しました。Vercel は自社の主要サービスには影響がないとし、この特定の統合を利用している顧客のうち限られた subset だけが暴露されたとしています。なお、窃取されたとされる資料には、ソースコード、従業員情報、NPM/GitHub トークン、データベース認証情報、内部デプロイメントアクセス鍵が含まれています。攻撃者はユーザー詳細を含む 580 レコードが入ったテキストファイルを公開し、200 万ドルの身代金要求を行いました。しかし、BleepingComputer などの独立研究者は、提供されたデータの真偽やスクリーンショットを検証しておらず、「ShinyHunters」ネットワークに関連する他のグループもこの特定の事件への関与を否定しています。Vercel はセキュリティ専門家と法執行機関と協力していることを確認しており、全てのユーザー(特に Google Workspace 管理者)に対し、潜在的なリスクを低減するため、直ちに機密情報をローテーションし、環境変数を再レビューし、乗っ取られた特定の OAuth ID のアクセス権を取り消すよう緊急性を帯びた警報を出しています。

2026/04/20 2:44

臭素の戦略的 chokepoint

## Japanese Translation: 不安定な停戦協定により、米国・イスラエル・イランが関与する状況が露見し、全球の半導体メモリサプライチェーンにおいて塩素を介した脆弱性が顕在化している。このリスクはヘリウム不足にしばしば覆いかぶさるものである。この依存度は深刻であり、韓国は世界の塩素需要の 97.5% をイスラエルから調達しており、その供給先は Dimima および Arad の戦闘地域からわずか 35 キロ以内にある。この原材料を転写する際に不可欠な水酸化ホウ素に変換するためには、大規模な精製インフラが必要であり、これについてはイスラエル以外では存在せず、既存の非イスラエルの生産者はすべて現在の顧客に割り当てられおり、新たなキャパシティを構築するには数年単位の時間がかかる。さらに、塩素は先端プロセスノードにおいて水酸化ホウ素に代わることはできず、必要なポリシリコン対酸化物選択比 100:1 を達成できず、基準を満たさないためである。 したがって、供給途絶が生じた場合、サムスン電子のような製造業者が高付加価値の AI メモリを優先して消費者向けエレクトロニクスに振り向けることになり、コスト増大を引き起こし、開発途上国における予算不足デバイスの問題(アフリカおよび南アジアにおける RAM の 4GB への downgrade など)や、商用チップに依存する軍事システムが優先順位を下げることに直面することになる。これらのリスクをさらに悪化させているのは、イスラエル港湾での寄港に関する戦争リスク保険料が 0.2% から 1.0% を超えるまで急騰しており、1 回あたりの航路あたり最大で 50 万ドル追加されることである。専門家は即時の原料の前方配置と、戦闘地域外の転写インフラに対する長期的資金調達を強く推奨し、全球のチップ製造における壊滅的なボトルネックを防ぐことを求めている。

2026/04/20 5:25

スイス当局は、Microsoft への依存度を低下させる意向を示している。

## Japanese Translation: スイスは、データセキュリティとデジタル主権を強化するため、Microsoft の製品から戦略的に離脱しています。最も重要な進展は、Microsoft のソフトウェアをオープンソースの代替品に置き換えることが実行可能であるという確認であり、その決定は財政的な必要性と地政学的な懸念の両方によって驱动されています。過去10年間にわたり、スイスの政府機関は Microsoft ライセンスだけで 10 億スイスフラン以上を支出しており、これは変革のための重要な財政的機会を生み出しています。さらに、アメリカの法律(クラウド法など)下におけるデータアクセスリスクや全球情勢の緊張の高まりから、高官たちは米国大手テック企業からの独立を求めるようになりました。 ドイツの成功した取り組み(シュレースヴィヒ=ホルシュタイン州を含む)と一致して、スイスは他の商用ソリューションに依存するのではなく、独自のオープンソースエコシステムを構築することを目指しています。前軍人指導者、元陸軍長官の Thomas Süssli 氏など、内部での代替ソフトウェアに対する過去の抵抗を克服するためにこの移行を加速させることに対して公的に支持を発信しました。この計画は、現在 Microsoft 365 を実行している 5 万 4,000 の行政ワークステーションの既存インフラを対象としています。オープンソースオプションへのシフトにより、コードの透明性と現地での管理が可能となるため、スイスはデータの主権を確保し、外国政府からの要求から守ることができます。その結果、外部の法的圧力に対する脆弱性を削減しつつ、コストを効果的に管理することができるとともに、目的を達成します。

ダークモードの 6 つのレベル | そっか~ニュース