CSSのみでボーダーに綺麗なグラデーションを掛ける方法+α
近未来的なデザインのWebサイト等で使えそうな、グラデーションの掛かったボーダーの作り方を紹介します。(調べてないけど多分)ほぼ全てのブラウザで動作するので、かなり実用的です。
目次
ボーダー部分にlinear-gradientを適用させる
本来border-color
にはlinear-gradient
を指定できませんが、background-image
を上手く使えばボーダーに対して擬似的にグラデーションを掛けることが可能になります。
とりあえずサンプルを見てみましょう。
まずは完成品
See the Pen Grad_border_0 by Leo_8192 (@Leo_8192) on CodePen.
こんな感じです。左上から右下に掛けて、綺麗な赤→青のグラデーションが掛かっています。
HTML・CSS
<div class="container"> <div class="item">😇</div> </div>
.item { box-sizing: border-box; border: 4px solid transparent; /* ボーダーの太さ */ background-image: linear-gradient(#000,#000), /* ボーダーの内側(パディングボックス)の色 */ linear-gradient(135deg, #f00, #00f); /* ボーダーの色 */ background-origin: border-box; background-clip: padding-box,border-box; /* 幅や高さは省略 */ }
HTMLは至ってシンプル。装飾用のdiv
等は使わずに、.item
という要素に対して直でグラデーションボーダーを適用しています。
CSSはちょっと長めですが、一つ一つ見ていきましょう。
CSSの解説
background-image: linear-gradient(#000,#000), linear-gradient(135deg, #f00, #00f);
background-image
を使うことで背景をレイヤー化させます。linear-gradient(#000,#000)
というのがかなーり気持ち悪いですが、background-image
で単色を指定するにはこうするしかないんで諦めましょう…background-origin: border-box;
background-clip: padding-box,border-box;
padding-box
なのでボーダーの内側(パディングボックス)のみが塗りつぶされますが、グラデーション部分はborder-box
なのでボーダー領域まで塗りつぶされます。ざっくり言うと「ボーダーボックスまで広がったグラデーションレイヤーの上に、パディングボックスまでしか広がっていない単色のレイヤーを重ねている」ってことです。
ボックスモデルの違いについてはMDNで詳しく解説されているので、気になる人は見てみましょう。
応用編
それではさっきのテクニックを使って遊んでみます。
分かりやすくするためにボーダーの太さと色は極端な指定をしているので、実用するならそこらへんの調整はお忘れなく。
レインボーのボーダー(その1)
See the Pen Grad_border_1 by Leo_8192 (@Leo_8192) on CodePen.
background-image: linear-gradient(#000,#001), linear-gradient(135deg, red, orange, yellow, green, aqua, blue, purple);
赤から紫まで変化させるパターン。
レインボーのボーダー(その2)
See the Pen Grad_border_2 by Leo_8192 (@Leo_8192) on CodePen.
background-image: linear-gradient(#000,#001), repeating-linear-gradient(135deg, red, orange, yellow, green, aqua, blue, purple, red 50%);
repeating-linear-gradient
でレインボーを「red→red」までを繰り返させるパターン。
radial-gradientを使う
See the Pen Grad_border_3 by Leo_8192 (@Leo_8192) on CodePen.
background-image: linear-gradient(#002,#005), radial-gradient(circle at top center, #fff,#000);
background-image
に使えるものなら何でもいけるので、radial-gradient
でももちろんOKです。使い道は無さそうですが…
repeating-conic-gradientを使う(その1)
See the Pen Grad_border_4 by Leo_8192 (@Leo_8192) on CodePen.
background-image: linear-gradient(#555,#555), repeating-conic-gradient(#fff 0%, #fff 25%, #000 25%, #000 50%);
conic-gradient
なら中心点を基準にぐるっと回るようなグラデーションが作れるので、こんな不思議なボーダーも簡単に作れます。
repeating-conic-gradientを使う(その2)
See the Pen Grad_border_5 by Leo_8192 (@Leo_8192) on CodePen.
background-image: linear-gradient(#555,#555), repeating-conic-gradient(#fff 0%, #fff 25%, #000 25%, #000 50%); background-size: auto, 16px 16px;
background-size
と組み合わせれば市松模様も作れます。使わんけど。
以上、CSSのみでボーダーにグラデーションを掛ける方法でした。装飾用のdiv
要素なども使わずにすぐ実装できるので、Webサイトのアクセント等に取り入れてみてはいかがでしょうか?
ただ、使いすぎて「しつこい」「くどい」「色が散らかっている」…みたいなデザインにならないようにお気を付けて。