枠を装飾するborder-image-source
を使えば、linear-gradient
を指定することで枠がグラデーションになったボタンを作ることができますが、欠点として角を丸くすることができません。
なんで…?と思いますが、わかりません。とにかくできません。
でもデザイナーはそんなことはお構いなしにデータを送ってきますので、「できません」と返信する前に角丸になったグラデーションのボタンをちょっと考えて作ってみましょう。
CONTENTS
サンプル
サンプルを見てみましょう。
See the Pen
枠がグラデーションになったボタン by イロイロデザインラボラトリ (@iroirodesignlab)
on CodePen.
枠がグラデーションになった角丸ボタンです。
HTML
HTMLはこんな感じです。
<div class="button"> <a href="#"><span>BUTTON</span></a> </div>
<a>要素を直接使うと後々トラブルになりそうなので、<div>で囲んでおきます。
CSS
CSSはSCSSを使っています。
.button { a { background: linear-gradient(90deg, #56c6f2 0%, #ff7c9c 100%); display: inline-block; padding: 0.25rem 0.25rem; border-radius: 2rem; text-decoration: none; span { font-weight: bold; letter-spacing: 0.2rem; display: block; background: #ffffff; padding: 0.75rem 2.5rem; border-radius: 2rem; color: #56c6f2; transition: all 0.1s linear; } &:hover { span { background: transparent; color: #ffffff; } } } }
複雑に見えますが作り自体は単純です。
まず、見た目はこうなっています。
これを分解するとこうなります。白色が<span>要素、グラデーションが<a>要素です。
この2つの要素をサイズ違いで組み合わせることで、擬似的に背景色を枠に見せることができます。
background: linear-gradient
ボタンの基礎になる<a>にグラデーションをかけておきます。これが枠のグラデーションになります。
padding: 0.25rem 0.25rem;
<a>にある0.25rem = 4pxのpaddingを入れてあります。これが<a>から<span>までの余白 = 枠の太さになります。
border-radius: 2rem;
<a>要素の角を丸くします。
display: block;
<span>要素を<a>要素ピッタリの大きさにするため、display: block;にしておきます。ブロックレベルの<div>要素とかを使ってもだいじょうぶです。
background: #ffffff;
<span>要素の背景を指定します。今回は白色です。これを入れて<a>に<span>が重なることで擬似的に<a>のbackground: linear-gradient
を枠のように見せています。
border-radius: 2rem;
<span>にも<a>と同じ値を入れておきます。
制作のヒント
テキストにもグラデーションをかけることで、よりリッチなボタンを作ることができます。テキストにグラデーションをかける方法は下記の記事で紹介していますので、ひと手間を加えてみましょう。