これを実装する方法はたくさんあると思いますが、私は過去に似たようなことを経験していますので、ここに実装します。
ステップ1
あなたのケースmain.css
とtest.css
に、あなたが持っているさまざまなテーマについて複数のCSSの出力ファイルを作成します。たとえば、theme-main.css
とtheme-test.css
のように、名前の前に接頭辞を付けて分かりやすくすることもできます。
リセット、マージン、タイポグラフィなどの一般的なスタイルを1つのファイルに保存することをお勧めします。具体的には、global.css
のようにして、別のファイルにテーマを追加してください。これらのCSSファイルをHTMLの上に重ねてロードします。
メインテーマ:
<link href="global.css" rel="stylesheet" type="text/css">
<link href="theme-main.css" rel="stylesheet" type="text/css">
とテストテーマ:プロジェクトのサスフォルダに
<link href="global.css" rel="stylesheet" type="text/css">
<link href="theme-test.css" rel="stylesheet" type="text/css">
、global.scss
に沿って、theme-main.scss
とtheme-test.scss
を作成します。
ステップ2
異なる部分サスファイルにあなたのテーマカラーを移動し、変数の名前が同じであることを確認してください
。個人的には、プロジェクトのSassフォルダ内に、CSS出力ファイルと一致する名前のフォルダを作成し、そこにこれらのファイルを配置します。
あなたの場合は、Sassフォルダ内に_theme-main
と_theme-test
というフォルダを作成します。各フォルダ内のファイルを作成し、それらを次の内容の両方_variables.scss
に名前を付ける:
_theme-main/_variables.scss
で:
$colors: (
primary: #007991,
secondary: #55D3AE,
tertiary: #D35555,
gradientFirstColour: #007991,
gradientSecondColour: #34EBE9
);
そして_theme-test/_variables.scss
中:
$colors: (
primary: #1abc9c,
secondary: #e67e22,
tertiary: #c0392b,
gradientFirstColour: #2c3e50,
gradientSecondColour: #f1c40f
);
ステップ3
ロードあなたがそれらを必要とするファイルの必要な変数。あなたのファイルtheme-main.scss
で
、置く:
@import '_theme-main/variables';
そして、あなたのファイルtheme-test.scss
で、置く:
@import '_theme-test/variables';
をこれまでのところ、これは別のテーマファイルが別の値で動作することを保証します同じ変数。実際には、変数$colors
は、これら2つのテーマファイルで同じものと呼ばれていますが、実際は同じではありません。
ステップ4
あなたは上のテーマを適用したいスタイルで部分サスファイルを作成します。
我々はすでに_theme-test
フォルダに_theme-main
フォルダ内のtheme-main.scss
の依存関係とtheme-test.scss
の依存関係を入れているので、私は個人的にこのパターンを打破したいとは思わないでしょうので、私はshared
フォルダまたは同様のものを作成し、部分的にサスを置きます複数のSassファイルにインポートされたファイルもちろんこれを省略することもできますが、プロジェクトをより保守性のあるものにするのに役立ちます。
あなたの例では、_styles.scss
という名前の部分的なSassファイルを作成し、shared
フォルダに入れます。
button {
background-color: map-get($colors, primary);
}
div {
background-color: map-get($colors, secondary);
}
そして、この部分ファイルをテーマファイルにインポートするだけで済みます。あなたのファイルで
theme-main.scss
、置く:
@import '_theme-main/variables';
@import 'shared/styles';
そして、あなたのファイルtheme-test.scss
で、置く:
@import '_theme-test/variables';
@import 'shared/styles';
を私はミスをしなかった場合は、お使いの出力CSSファイルは次のようになります。
theme-main.css
:
:
button {
background-color: #1abc9c;
}
div {
background-color: #e67e22;
}
は、あなたがこの便利なやご不明な点や懸念がある場合は見つけた場合、私に教えてください。
このような素晴らしい詳細な回答に感謝します!私はちょうど1つの質問がある、(私は初心者btw)どのように私はそれぞれのテーマをjavascriptを使用してアクティブになるだろうか? – JuliaM
そのような機能も実装する方法はたくさんあります。私は[CodePenの小さなデモ](https://codepen.io/pentzzsolt/pen/MrmoBO)をまとめて見てみましょう!この例では、特定の時間にロードされたテーマCSSファイルが1つだけであることを前提としています。したがって、最初のロード以降でも同様です。また、サイトでユーザーの選択を覚えておきたい場合は、Cookieを使用してその情報を保存し、サイトを再訪したり別のページに移動したりするときに取得する必要があります。 – pentzzsolt