最近はCSS3でグラデーションが使えるようになったためグラデーションを使うサイトが増えてきました。
サイトの見栄えをよくしたり、ちょっとしたアクセントになるのでグラデーションは効果的です。
そこでここではそのようなアニメーションの1つグラデーションを使って枠線や区切り線などの線系の要素にグラデーションをかける方法を解説します。
グラデーションのさせ方
従来までの方法だと背景などをグラデーションさせるには背景画像などを設定しなければなりませんでしたが、CSS3ではグラデーションがサポートされるようになりました。
グラデーションには線形や円形などの種類がありますがここで使用するのは方向が一定の線形グラデーション(linear-gradient)です。
linear-gradient関数について
線形グラデーションを背景などに適用する場合は画像をとれるプロパティに次のようにlinear-gradient関数を渡します。
background-image: linear-gradient(90deg, red, green);
linear-gradient関数はbackground-imageプロパティ、list-style-imageプロパティ、border-imageプロパティなど画像をサポートするほとんどのプロパティで使用できます。
linear-gradientは次のようにグラデーションの方向と開始色、途中色、終了色を引数にとります。
linear-gradient(方向, 開始色, [途中色]... , 終了色);
1つめの引数にはグラデーションの向きを指定するのですが次の2つの指定方法があります。
- 角度
単位(deg)のついたグラデーションの方向です。0degを指定すると上から下にグラデーションされます。
- to [方向キーワード]
toの後に方向を表すキーワード(right, left, top, bottom)を指定するとその方向に向かってグラデーションします。(例) 左から右の場合は : to right
例えば次のCSSを見てください。
background: linear-gradient(to right, red, blue);
このCSSを適用したdiv要素は次のように左から右に赤から青でグラデーションされます。
そしてそれ以降の引数にはカラーを渡していきます。開始色と終了色の間には好きなだけ途中色を置くことが可能です。また%を指定することでその場所にカラーストップも置くことができます。
linear-gradient(to right, red, green 30%, blue);
この例では方向は左から右で、赤から始まり、30%のところで緑になり、最後は青色で終わります。実際にdiv要素に適用すると次のようなグラデーションになります。
ベンダープリフィックスについて
線形グラデーションにはlinear-gradientが使われますが、古いブラウザにも対応させるために一応ベンダープリフィックス(接頭字)はつけておいた方が良いです。次のように「-webkit-」「-moz-」「-o-」「-ms-」などを関数名の前に書いて複数定義します。
background: -moz-linear-gradient(to right, red, blue);
background: -webkit-linear-gradient(to right, red, blue);
background: -o-linear-gradient(to right, red, blue);
background: linear-gradient(to right, red, blue);
ただし見やすさの観点からこれらのプリフィックスは省略します。以下で解説する枠線や区切り線のグラデーションにはこれらのプリフィックスがついているものとして読んでください。
区切り線へのグラデーションのかけかた
区切り線要素(hr)にグラデーションをかけるには次のようにbackground-imageプロパティにグラデーションを指定します。
hr
{
background-image: linear-gradient(to right, red, green);
height: 10px;
}
この区切り線はブラウザでは次のように表示されます。
他にも方向や色を変えると次のような区切り線が作れます。
See the Pen MQRZaw by kaz1503 (@kaz1503) on CodePen.dark
ボーダーの枠線のグラデーション
次は要素を囲むボーダーの枠線にグラデーションをかける方法を紹介します。
ボーダーにグラデーションをかける場合、1つの手としてborder-imageプロパティにグラデーションを渡す方法があります。例えば次のようなコードです。
border-image: linear-gradient(to left, red, blue);
これでも枠線がグラデーションしますが、次のような問題点があります。
- 左右はグラデーションするが、上下には適用されない
- border-radiusで枠線の角を丸められない
上下にはグラデーションがかからないので疑似要素の::afterや::beforeを使って疑似的に枠を追加することになるのですが、あまりにも手間がかかりすぎます。また枠線を丸めることもできません。
なのでここではborder-imageは使いません。代わりにある要素に::afterで疑似的な子要素を追加してその要素を親要素より大きくすることで疑似的に枠を再現します。次がそのコード例です。
HTMLコード
<div id="box">
グラデーションする枠線
</div>
CSSコード
#box
{
position: relative;
background-color:rgba(255, 255, 200, 1);
padding: 12px;
}
#box::after
{
position: absolute;
top: -5px; bottom: -5px;
left: -5px; right: -5px;
background: linear-gradient(to left, red, blue );
content: '';
z-index: -1;
}
このコードで重要なのは親要素(div#box)にposition:rerativeを設定し、その中の疑似的な子要素(div#box::after)にposition:absoluteを指定していることです。こうすることで親要素の中で相対的な位置を決めることができます。
そして子要素のtop,left,bottom,rightにそれぞれ-5pxを指定することで親要素の大きさに対して5pxだけ大きくなるので、z-indexに-1を指定すれば子要素が親要素の背後に来て子要素が親要素で隠されるので枠線のように機能します。
以下はコード付きの実行例です。
See the Pen aqxPww by kaz1503 (@kaz1503) on CodePen.dark
またこの方法を使うとborder-radiusプロパティを親要素と子要素の両方に指定すれば次のように角を丸めることも可能です。
See the Pen paBqrj by kaz1503 (@kaz1503) on CodePen.dark
親要素のborder-radiusプロパティの値が枠線内側の丸め半径、子要素のborder-radiusプロパティの値が枠線外側の丸め半径になります。内側より外側の方が値が大きいと見栄えがいいように見えます。そこはいろいろ値を変えて試してみてください。
以上linear-gradientを使って枠線と区切り線をグラデーションさせる方法について解説しました。
フク郎
最新記事 by フク郎 (全て見る)
- 最大5,000円報酬をもらうために、招待を受入れていただけませんか? - 8月 27, 2024