グラデーションの枠(border)をCSS4行で作ってみた

laptop-3174729_1280

背景

figmaで作ったグラデーションの枠を作るのに簡単な方法で実装したいと思い、調べてみて試したところcss4行でできたので備忘録として残しておきます。border-image-sourceを使いますが、img画像は不要です。なおfigmaで作ったグラデーションの枠を使うことを想定して手順を記します。最終的には以下のようなグラデージョンがcss4行でできます。

border見本

figmaでborder-image-source(画像不要)を取得

figmaのgradation1

figmaである必要はないのですが、これが視覚的に一番簡単に作れるのでfigmaを採用しています。
figmaで四角形を作り、以下のように設定してください.。グラデーションの具合は画像の点を動かせば調整できます。

  • Fill:#fff
  • Stroke : Linear
  • 任意の色でグラデーションを作り、角度を設定。
figmaのgradation2


その後InspectからBordersのCopyを押せば準備は完了です。ペーストしてみると以下のようなコードが表示されます。(角度や色の値は設定した値によって違います)
これで準備はひとまずOKです。あとはcss4行で実装できます。

border: 5px solid;
border-image-source: linear-gradient(112.88deg, #FFD6FB 0%, #FFFFFF 100%);

cssを追加

以下の4行をstyle.cssに追加すればOKです。
重要なのはborder-image-slice: 1;です。値はなんでもいいのですが、これがないとボーダーが出現しません。本来sliceはborder-image-sourceの分割に使用しますが、今回は”実体化”のようなイメージで使用していると考えていただければ良いと思います。

.border{/*borderクラスの枠をグラデーションカラーに*/
border: 5px solid;
border-image-source: linear-gradient(112.88deg, #FFD6FB 0%, #FFFFFF 100%);
border-image-slice: 1;/*borderを実体化*/
border-image-width: 10px;/* 任意 borderの太さ*/
}

念の為htmlも書いておきます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./style.css">
    <title>枠(border)のグラデーション</title>
</head>
<body>
    <div class="border">このブロックのボーダーをグラデーション</div>
</body>
</html>

まとめ

めんどくさそうなboderデコレーションの枠がfigma×css4行で実装できます。