このページはGitLabのダークモードの開発者についてのページです。ダークモードを有効にする方法については、シンタックスハイライトのテーマを変更するをご覧ください。
ダークモードの仕組み
短いバージョンです:カラーパレットを逆にして、いくつかのBootstrap変数を上書きします。
以下に注意してください。
- ダークモードパレットは
app/assets/stylesheets/themes/_dark.scss
で定義されています。これをapplication.scssの_前に_読み込んでapplication_dark.css
-
_dark.scss
で2種類の変数を定義しています:- SCSS 変数は、フレームワーク、コンポーネント、ユーティリティクラスで使用されます。
- CSS 変数は、
app/assets/stylesheets/page_bundles
ディレクトリ内のすべての色に使用されます。
-
-
app/views/layouts/_head.html.haml
その後、ユーザーのテーマ設定に基づいてapplication
またはapplication_dark
を読み込みます。
すべてのpage_bundle
ファイルの_dark.css
バリアントを個別に生成したくないので、フォールバックとして CSS 変数と SCSS 変数を使用しています。これは、page_bundles
CSS を生成するときに、_variables.scss
から変数値を取得するため、SCSS 変数がライトモードの値を持つからです。
_dark.scss
で定義された CSS 変数はブラウザで利用できるため、ダークモード用の正しい色を持っています。
color: var(--gray-500, $gray-500);
ユーティリティクラス
ユーティリティ・クラスには、反転された値を含む別のutilities_dark.css
ファイルを生成します。そのため、gl-text-white
のようなクラスは、ダークモードでは#333
のテキスト色を指定します。これは、色を追加したいたびに複数のクラスを追加する必要がないことを意味します。
現在のところ、ダークモードでのみユーティリティクラスを設定することはできません。近いうちにこのイシューに対応したいと思います。
ライトモードとダークモードで異なる値を使用
ほとんどの場合、ライトモードとダークモードで同じ値を使うことができます。それが不可能な場合は、ダークモードがbody
に追加する.gl-dark
クラスを使用してオーバーライドを追加できます:
color: $gray-700;
.gl-dark & {
color: var(--gray-500);
}
// avoid where possible
// --gray-500 (#999) in dark mode
// $gray-700 (#525252) in light mode
color: var(--gray-500, $gray-700);
ライトモードに CSS 変数を追加する予定です。そうなれば、SCSS フォールバックに異なる値を指定しても機能しなくなります。
SCSS変数を使用するタイミング
SCSS では CSS では(簡単に)できないことがいくつかあります:
lighten
darken
-
color-yiq
(色のコントラスト)
これらが必要な場合は、SCSS変数を使うべきです。