ページのテーマ色とかをいろんな要素で使いたい時に便利なCSS変数。
例えば、ページのテーマ色がオレンジだった場合、全ての箇所にオレンジと記載してもいいが、変更となった場合は全ての箇所を修正する必要が出てくる。
しかし、CSS変数を使うと1箇所直すだけで、その変数が割り当てられているところに反映される。
以下、サンプルコード
/*宣言方法は以下のように'--'で始める*/
/*使い方はvar()の()ないに入れ込む*/
h1{
--my-color: orange;
color: var(--my-color);
}
/*これでh1にオレンジが割り当てられる。
また、何も設定がないときの指定もできる*/
h1{
color: var(--my-color,blue);
}
/*これは何も設定がされていなかったらblueを割り当てて、と言うこと*/
ただ、<h1>
で宣言した変数を<p>
では使えない。
つまり
h1{
--my-color: orange;
color: var(--my-color);
}
p{
color: var(--my-color);
}
としても<p>
にはオレンジが割り当てられない。
どうすれば共通して使えるかと言うと、
方法は2つある。
①共通の親要素で宣言する。
②文書全体のhtmlで宣言する。
①の場合は、htmlが以下のようになっていた場合、
<body>
<h1>タイトル</h1>
<p>本文</p>
</body>
共通する親要素である<body>
で宣言すれば両方ともに共通する変数を使える。
body{
--my-color: orange;
}
としておくと、<body>
の中にある要素には、--my-colorが使える。
②の方法はCSSファイル内で
:root{
--my-color: orange;
}
と言うように宣言すると、<body>
,<h1>
,<p>
の全てというか、htmlにある全ての要素に--my-colorが使える。
また変数はプロパティの値に使えるのであって、プロパティ名には使えない
。
例えば、
--my-margin-top: margin-top;
はできず、
--my-margin-top: 40px;
margin-top: var(--my-margin-top);
こういう使い方をしなければならないということ。
以下、まとめサンプルコード
:root{
--my-hue: 200;
}
body{
background: hsl(var(--my-hue), 40%, 95%);
}
h1,p{
color: hsl(var(--my-hue), 35%, 55%);
}
.btn{
color: white;
width: 100px;
padding: 8px;
border-radius: 4px;
text-align: center;
background: hsl(var(--my-hue), 50%, 50%);
background: hsl(calc(var(--my-hue) + 180), 50%, 50%);
/* 180°変えて補色の関係にし、見やすいように。 */
background: hsl(calc(var(--my-hue) + 60), 50%, 50%);
/* 完全に穂色はきついから、少しずらした色に */
}