Dark Mode ⚫
Dark Mode
なぜ暗いモードを実装するのですか?
まず,「プログラマ」課題で暗モードを実施する理由を見たが,実際には実現しなかった.それはちょっと恥ずかしいので今回はReactで実現してみました
あなたはどうしますか。
1.変数の宣言
変数を宣言し,その要素colorを変数値とした.$bg-color : var(--bg-color);
$text-color: var(--text-color);
$main-bg-color: var(--main-bg-color);
$main-content-bg-color: var(--main-content-bg-color);
2.$config Map形式
$config:(
dark: (
bg:#252429,
text-color:#FFFFFF,
main-bg-color:#1C1B20,
main-content-bg-color:#252429,
),
light: (
bg:transparent,
text-color:#000,
main-bg-color:#f1f1f1,
main-content-bg-color: #fff,
)
);
3.scssの@functionを使用して$configの属性値を返します。
$objectが暗い場合、$styleがbgの場合、setStyle@functionを使用して「#252429」を返します.@function setStyle($map,$object,$style){
@if map-has-key($map,$object){
@return map-get(map-get($map,$object),$style);
}
@warn "The key `#{$object}` is not available in the map";
@return null;
}
4.変数に@mixinを使用して値を割り当てます。
mixinは関数を回収するために使用されます.
ここで、$keyはdi暗くなり、lightになり、setStyle関数で「--bg-color,--text-color,--main-bg-color,--main-content-bg-color」となり、「dark,light」属性に一致する値を返します.@mixin theme($key) {
--bg-color: #{setStyle($config,$key,bg)};
--text-color: #{setStyle($config,$key,text-color)};
--main-bg-color: #{setStyle($config,$key , main-bg-color)};
--main-content-bg-color : #{setStyle($config,$key ,main-content-bg-color )};
};
5.@eachを使用して、「html-dock-mode,html-light-mode」クラスを作成します。
最後に、@eachを使用して暗いモード、軽いモードのクラスを作成します.@each $theme in dark,light{
html.#{$theme}-mode{
@include theme($theme)
}
}
前述したように、実際のcssは以下のように表示されます.
dark-mode
html.dark-mode {
--bg-color: #252429;
--text-color: #FFFFFF;
--main-bg-color: #1C1B20;
--main-content-bg-color: #252429;
}
light-mode
html.light-mode {
--bg-color: transparent;
--text-color: #000;
--main-bg-color: #f1f1f1;
--main-content-bg-color: #fff;
}
6.結果
最後に,切替を用いてlight/darkモードを実現した.
7.修正
下図に示すように、赤い枠線に重複する内容が表示されます.次は繰り返さないで修正します
Reference
この問題について(Dark Mode ⚫), 我々は、より多くの情報をここで見つけました
https://velog.io/@cdk3509/Dark-Mode
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
$bg-color : var(--bg-color);
$text-color: var(--text-color);
$main-bg-color: var(--main-bg-color);
$main-content-bg-color: var(--main-content-bg-color);
$config:(
dark: (
bg:#252429,
text-color:#FFFFFF,
main-bg-color:#1C1B20,
main-content-bg-color:#252429,
),
light: (
bg:transparent,
text-color:#000,
main-bg-color:#f1f1f1,
main-content-bg-color: #fff,
)
);
@function setStyle($map,$object,$style){
@if map-has-key($map,$object){
@return map-get(map-get($map,$object),$style);
}
@warn "The key `#{$object}` is not available in the map";
@return null;
}
@mixin theme($key) {
--bg-color: #{setStyle($config,$key,bg)};
--text-color: #{setStyle($config,$key,text-color)};
--main-bg-color: #{setStyle($config,$key , main-bg-color)};
--main-content-bg-color : #{setStyle($config,$key ,main-content-bg-color )};
};
@each $theme in dark,light{
html.#{$theme}-mode{
@include theme($theme)
}
}
html.dark-mode {
--bg-color: #252429;
--text-color: #FFFFFF;
--main-bg-color: #1C1B20;
--main-content-bg-color: #252429;
}
html.light-mode {
--bg-color: transparent;
--text-color: #000;
--main-bg-color: #f1f1f1;
--main-content-bg-color: #fff;
}
Reference
この問題について(Dark Mode ⚫), 我々は、より多くの情報をここで見つけました https://velog.io/@cdk3509/Dark-Modeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol