もう当たり前に、使えている人は便利に使っていると思いますが、
これって一体なんなんだろうとか、どういう時に便利なの?
と、いまさら聞けないCSSの変数(カスタムプロパティ)について、
何がどうなっているかは知っておきたい。とこっそり思っておられる方のために、
「見たことある」から「知ってる!使ったことある!」ぐらいになるよう説明しておきます。
カスタムプロパティとも呼ばれる、CSSの変数は、文書全体で再利用が可能な特定の値をあらかじめ定義していく方法のことです。
「??」となった人のために簡単にお伝えすると
サイト全体で、使いたい色が3色(#000,#FF0,#EEE)があった時に、その都度指定するのではなく、
色①は「#000」、色②は「#FF0」、色③は「#EEE」をはじめに指定しておき、それぞれの要素には「色①」や「色②」を呼び出す形で指定していきます。
例えば、下記サンプルのCSSでは、ブロックのボーダー・h3タイトル・擬似要素のアイコンで、同じ色が3回指定されています。
「この青色をピンクに変えてよ〜」って言われた時、3箇所変更しなくてはいけません。
3箇所なら大目に見てられますが、これが大規模サイトだったりしたら、ザワザワして白目になるのは確定です。
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...
<div class="sample01">
<h3>記事タイトル</h3>
<p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...</p>
</div>
.sample01 {
border: 2px solid #0056f7;
}
.sample01 h3 {
color: #0056f7;
}
.sample01 h3::before {
content: '';
display: inline-block;
width: 0.8em;
height: 0.8em;
background: #0056f7;
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
「検索して、置換すりゃええやん。」っていうのもありますが、ここでCSSの変数を使うことでもっと簡単になるのです。
先ほどのサンプルを改めて、変数を使って書いてみましょう。
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...
<div class="sample02">
<h3>記事タイトル</h3>
<p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...</p>
</div>
:root {
--color01:#0056f7;
}
.sample02 {
border: 2px solid var(--color01);
}
.sample02 h3 {
color: var(--color01);
}
.sample02 h3::before {
content: '';
display: inline-block;
width: 0.8em;
height: 0.8em;
background: var(--color01);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
「:root」で定義したものはグローバル変数なので、全体に継承されますが、
特定のクラスでのみ色を変えたい場合もあるでしょう。その場合、通常のCSS通り上書きが可能です。
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...
吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...
<div class="sample03">
<h3>デフォルトのタイトル</h3>
<p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...</p>
</div>
<div class="sample04">
<h3>カラーを上書きされたタイトル</h3>
<p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た...</p>
/* グローバル変数 */
:root {
--color01:#0056f7;
}
/* デフォルトのh3カラーとアイコン */
h3 {
color: var(--color01);
}
h3::before {
content: '';
display: inline-block;
width: 0.8em;
height: 0.8em;
background: var(--color01);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
/* タイトルのカラーの上書き */
.sample04 h3 {
--color01:#ffa07a;
color: var(--color01);
}
これは、CSS変数で使用できる機能で、なんらかの理由で変数が定義されていない場合に代替値を採用します。
呼び出しの際に、「var(–color01, #222);」と指定します。
色を指定するのは、もっとも想像しやすものかと思いますが、それ以外には何に使えるの?ということでわかりやすい使い方をご紹介します。
サイトを作っていると、ボタンのサイズなどはあらかじめ3サイズぐらい用意することが多いと思います。
それらをあらかじめcssの変数で準備しておくと非常に便利です。
関数「calc()」と組み合わせて使うことも使えます。
<button class="button btn_small">smallボタン</button>
<button class="button">normalボタン</button>
<button class="button btn_large">largeボタン</button>
.button {
/*ボタンの基本設定*/
display: block;
border: none;
border-radius: 5px;
margin-bottom: 1em;
color: #fff;
transition: all .5s;
cursor: pointer;
background: #fd9765;
/*ボタンのpaddingとfont-sizeをあらかじめ設定*/
--unit: 1rem;
font-size: var(--unit);
padding: calc( var(--unit) / 2 ) var(--unit);/*上下paddingは1/2として設定*/
}
.btn_small {
--unit: 0.8rem;
}
.btn_large {
--unit: 1.3rem;
padding: calc( var(--unit) / 2 ) calc( var(--unit) * 2 );/*上下paddingは1/2、左右は2倍に設定*/
}
<button class="button btn_small">smallボタン</button>
<button class="button">normalボタン</button>
<button class="button btn_large">largeボタン</button>
.button {
/*ボタンの基本設定*/
display: block;
border: none;
border-radius: 5px;
margin-bottom: 1em;
color: #fff;
transition: all .5s;
cursor: pointer;
/*色をあらかじめ設定*/
--colo_h: 194;
--colo_s: 86%;
--colo_b: 54%;
/*ボタンのpaddingとfont-sizeをあらかじめ設定*/
--unit: 1rem;
font-size: var(--unit);
padding: calc( var(--unit) / 2 ) var(--unit);/*上下paddingは1/2として設定*/
background: hsl(var(--colo_h), var(--colo_s), var(--colo_b));
}
.btn_small {
--unit: 0.8rem;
background: hsl(var(--colo_h), var(--colo_s), var(--colo_b));
}
.btn_large {
--unit: 1.3rem;
padding: calc( var(--unit) / 2 ) calc( var(--unit) * 2 );/*上下paddingは1/2、左右は2倍に設定*/
background: hsl(var(--colo_h), var(--colo_s), var(--colo_b));
}
.button:hover {
--colo_b: 28%;
}
これ以外にも、ダークモード用のカラーセットや、アイコンサイズ、メディアクエリで指定するスペースをあらかじめ定義する、
フォントをいくつか指定しておきブロックによって切り替えるなど、アイデア次第でとても便利に使用できると思います。
CSS3などで新たに追加された要素・装飾方法など、日々コードを書いていないと忘れてしまったり、ささっとプロトタイプを作る時などちょっとしたことに時間をかけている暇はない。そんな時に「あ〜、あれストックしときゃよかったなぁ」って困った自分用のストックブログです。カスタマイズなどがしやすいよう、昨今のweb制作に取り入れられる一般的なコードを中心に掲載しています。
@CopypetJp More Info