続・cssの一箇所を変更してテーマ全体を入れ替える
前の記事の続きです。
やりたいことは変わらずで、cssの指定部分を一つだけ変更してテーマ全体を入れ替えることなんですが、さらに効率良くcssを書きたいということで工夫しました。
今回のバージョンはこちら。
See the Pen [第2弾]cssの一箇所を変更してtheme全体を入れ替えるサンプル by Makoto Ohnami (@zohnami) on CodePen.
前回は以下のような書き方で、テーマごとに各クラスの設定を書いていました。
これでもいいんですが、cssのクラスが増えてくるとメンテが一気にしんどくなります。
cssに書いているクラスや設定の数 x テーマ数 の数だけコードを調整しないといけなくなってしまいます。
実際にサービスでこうしたテーマ切り替えの機能を入れるとなると、cssのクラスが数百になる世界だと思うので、かなり辛い未来が予想されます。
カラーコードは仕方がないと思うのですが、background-colorとか、そういう枠の部分はできればひとつにしておきたい。
.theme-A {
background-color: #e0ebaf;
}
.theme-A .box1 {
background-color: #99ab4e;
}
ということで、この記事でアップしたサンプルはさらに進化しました。変更保守に強い改良版。
まず、.box1
とかそういうクラスごとの設定は一箇所に集約。そしてvar
でcssの変数を読み込むようにしておきます。
.box1 {
background-color: var(--c-box1-bg-color);
}
.box2 {
background-color: var(--c-box2-bg-color);
}
.box3 {
background-color: var(--c-box3-bg-color);
}
.notice {
color: var(--c-notice-color);
font-weight: bold;
}
そして、ポイント。テーマでは変数の設定を変えるだけにします。
これは素晴らしい。一気に保守しやすくなりました!
あとはテーマごとに色の変数のみ変えたものを作ればOK。テーマも増やしやすいし、書きやすい。いいことずくめです。
使っている色の数だけ設定を書けばいいのでかなりスリムに書けると思います。
/* 変数のみをテーマごとでわける。見やすい */
.theme-A {
background-color: #e0ebaf;
--c-box1-bg-color: #99ab4e;
--c-box2-bg-color: #69821b;
--c-box3-bg-color: #b0ca71;
--c-notice-color: #6f4b3e;
}
今回は色のみを扱っていますが、他の数値や画像なんかも同様の方法でいけるはずです!
この記事の環境情報
- Google Chrome 108.0.5359.124
htmlに関する他の記事を読む
- [JavaScript]親要素の表示領域でクリックしているかを判定する方法
- cssの一箇所を変更してテーマ全体を入れ替えるサンプル
- [CSS]背景色を点滅させるアニメーションサンプル
- クリックしたときにCSSで線を引くサンプル
cssに関する他の記事を読む
- [JavaScript]親要素の表示領域でクリックしているかを判定する方法
- nth-childの疑似要素で3番目以降にスタイルを全適用する
- cssの一箇所を変更してテーマ全体を入れ替えるサンプル
- [CSS]背景色を点滅させるアニメーションサンプル
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら