0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CSS 変数の使い方(かなりの初歩)

Posted at

ページのテーマ色とかをいろんな要素で使いたい時に便利な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%);
  /* 完全に穂色はきついから、少しずらした色に */
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?