CSS3 の新しいプロパティーを総動員したら、Photoshopとかで作ったきれいなアクア風(ガラス風)ボタンにどこまで近づけるか? というのを実際にやってみました。
チュートリアル風に、ステップごとに分けて説明していますので、CSS3を使ったリアルな表現のためのテクニックとして、ポイントだけでも覚えておくと、いろんなところで応用できると思います!
こんな感じになりました
何はともあれ↓が出来上がったものです。
今はやりの CSS3ジェネレータ には負けてないと自負しています...
さて、これを作る手順です。
※Chromeで表示して画像にしています。実際のものはこちらから見れます。
作成ステップ
ステップ1 : ベースとなるHTMLを用意
まずは、こんなHTMLを用意しました。このHTMLをベースに、CSS3を総動員していきます。A タグの中に SPAN が入っていますが、こいつらには後で仕事をさせます。
<a href="#" class="button"> <span class="text">ここに好きな文字</span> <span class="highlight"></span> </a>
※ SPAN を使わず、After、Before 擬似要素でもいけるかもしれません
ステップ2 : CSSでボックスを作る
幅と高さを指定してボックスを作ります。position:relative は、中のSPANタグを絶対値でポジショニングするために指定しています。border も付けて外枠を作ります。
※ ベンダープレフィックスは、わかり易くするために付けていません。
.button { display: block; width: 80px; height: 80px; position: relative; border: 1px solid rgba(0,0,0,0.5); }
border の色は、CSS3で追加された rgba指定 で透明度(0.5の部分)を指定しています。透明度を指定することで、背景となじむのでリアルな表現では便利です。
さて、今のところこんな感じです。
ステップ3 : 丸いボタンにする
border-radius を使って丸いボタンにします。border-radius の値に半径以上の値を指定すると円になります。
.button { ... border-radius: 300px; }
border-radius を使うと丸いボタンを作ることができます。ここら辺の記事でも書いていますので、参考にしてください。
ボタンぽくなってきましが、まだ立体感がありませんね。
次は色を入れていきます。
ステップ4 : グラデーションで塗りつぶす
background-image の radial-gradient関数 を使って円形グラデーションで塗りつぶします。グラデーションの中心部分は、少し下側にずらしています。
.button { ... background: radial-gradient(50% 80%, circle, #00D1F2, #0055C1); }
ガラスの表現では、下地となるグラデーションを作る際に、明るい部分を下側にして作ることがあります。
ちょっと楽しくなってきました。
ここから、光の表現を付け加えていきます。
ステップ5 : 影を付ける
立体感と言えば影ですね! box-shadow で影を付けます。
.button { ... box-shadow: 0 2px 6px rgba(0,0,0,0.5); }
きれいな影を作るには、環境光を意識して、ふんわり付けるのがリアリティーを生み出すセオリーです。ここでは、rgba指定 と、ぼかし具合を調整して、ふんわり影を表現しています。
ここまででこんな↓感じです。
だいぶボタンになってきました。
ステップ6 : グローを付ける
box-shadow をさらに重ねて、ガラスが乱反射してできる光を表現してみたいと思います。box-shadow は、カンマで区切りで複数指定できるので、ステップ5の影に追加する形で記述します。
.button { ... box-shadow: 0 2px 6px rgba(0,0,0,0.5), 0 2px 10px rgba(0,100,255, 0.7); }
透明度とぼかしを使ってぼやーとした光を表現しています。
こんな感じです↓うっすら青い光が見えますか?
ステップ7 : ハイライトを作る
ガラスと言えばハイライトですね。予め仕込んでおいた SPAN タグをポジショニングし、background-image の gradient関数 でハイライト部分を作ります。
.button .highlight { position: absolute; border-radius: 100px; width: 100%; height: 100%; background-image: linear-gradient(top, rgba(250, 250, 255, 1) 0%, rgba(250, 250, 255, 0.7) 10%, rgba(250, 250, 255, 0) 100%); z-index: 3; top: -19px; -webkit-transform: scale(0.8, 0.6); }
楕円の光を作るために、border-radius で円を作り、さらにそれを transformで変形させ、楕円を作っています。他にも方法があるかもしれませんね。
rgba指定を使うと、透明度でグラデーションできます。レイヤーモードのないCSS3では、必須のテクニックです。
ここまででこんな感じです。だいぶ最終形に近づいてきました。
ステップ8 : 内側の影を付ける
まだ終わりません。ボタンのふちを、浮き上がったような感じにしたいので、box-shadow (inset) と rgba指定 を使って、ふちの内側に黒い影を混ぜます。
※ ステップ6で設定した box-shadow に追記します。
.button { ... box-shadow: 0 2px 6px rgba(0,0,0,0.5), 0 2px 10px rgba(0,100,255, 0.7), inset 0 0 10px rgba(0,0,150,0.6); }
この表現は、丸いガラスの表現に欠かせません。
円の内側の黒いグローが見えますか?
なんというか、ガラスのふちの丸みが表現できていると思います。
ステップ9. 鏡面反射(おまけ)
Webkitなら、webkit-reflect が使えるので、鏡面反射を表現できます。ただ鏡面反射するだけだと面白くないので、コースティクスのような光を表現してみました。
具体的には、反射をマイナス値でポジショニングして、本体と重ねてうっすら見えるように調整します。
.button { ... -webkit-box-reflect: below -90px -webkit-gradient(linear, right top, left top, from(rgba(0,0,0,0.1)), to(rgba(0,0,0,0))); }
ボタンの下側に、うっすら光の輪のようなものが見えますか?
ちょっと蛇足のような気もしますが...
ステップ10. テキストのグロー
お疲れ様です!、最後にテキストを追加して終わりです。テキストは、text-shadow を使って少し発光しているように、表現しています。
.button .text { display: block; color: rgba(255, 255, 255, 0.9); font-size: 15pt; text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.5) , 0px 0px 4px rgba(255, 255, 255, 1); position: absolute; text-align: center; top: 40px; width: 100px; height: 100px; z-index: 1; }
テキストがガラスの表面なのか、底にあるのかで表現も変わってきますね。具体的には、ガラスの表面の場合は、底にうっすら影を落とします。反対に底にある場合は、ガラスの表面に反射ができます。
完成!
これで完成です。実際のブラウザで見たい方は、こちらを見てください。ソースコードも見れます。
どうでしたか?。今回の内容は、多少マニアックな内容になってしまいましたが、ポイントだけでも覚えておくと、CSSだけでなくグラフィックソフトなどでも、応用が利く内容だと思います。
今回使用したファイルは、ダウンロードもできますので、時間があるときにでも、じっくりと CSS3 と格闘しながら、研究してみてください。
コメント