CSSチームが運営するHTML5・CSS3情報サイト

HTML5 GOGO

ボーズ・オンラインストア

Deguchi

CSSだけで実現した見出しデザイン

by Deguchi on

HTML5GOGOをプチリニューアルしました!

今回は、その一環で対応した見出しのデザイン変更を、画像を使わずに実現することに成功したので、ご紹介したいと思います!必見です!

※IE7以前では対応が出来ません

見出しサンプルです!

見出しは全体的に変更してありますが、一番苦労したh2の見出しについてご説明します。

デザイン

HTML

</p>
<h2 class="sample">見出しサンプルです!</h2>
<p>

CSS

<br />
.sample {<br />
 position:relative;<br />
 margin:2.5em 0 0.5em 0;<br />
 padding:3px 0 3px 23px;<br /> <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://totalcooling.pt/online-fatish-sex-videos-8fl/">online fatish sex videos</a> 
 <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://simplementgen.com/yugioh-gladiators-assault-singles-pos/">http://simplementgen.com/yugioh-gladiators-assault-singles-pos/</a>  background-image:-moz-linear-gradient(top, #2E3430, <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://bollybodybling.com/best-sex-download-sites-wa/">jewish teen singles</a>  #313733);<br />
 background-image:-o-linear-gradient(top, #2E3430, #313733);<br />
 background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #2E3430), color-stop(1, #313733));<br />
 background-image:-webkit-linear-gradient(#2E3430, #313733);<br />
 <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://tonyandpenny.com/z0dr-ratemybody-dating">ratemybody dating</a>  font-size:150%;<br />
 font-weight:bold;<br />
 color:#D8DCD9;<br />
 z-index:0;<br />
}<br />
.sample:before {<br /> <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://ruthdente.com/m8-jamestown-north-dakota-singles/">http://ruthdente.com/m8-jamestown-north-dakota-singles/</a> 
 content:"";<br />
 position:absolute;<br />
 top:2px;<br />
 right:2px;<br />
 bottom:2px;<br />
 left:2px;<br />
 height:50%;<br />
 background-image:-moz-linear-gradient(top, #49534C, #323934);<br />
 background-image:-o-linear-gradient(top, #49534C, #323934);<br />
 background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #49534C), color-stop(1, #323934));<br />
 background-image:-webkit-linear-gradient(#49534C, #323934);<br />
 z-index:-1;<br />
}<br />
.sample:after {<br />
 content:"";<br />
 position:absolute;<br />
 top:8px;<br />
 bottom:7px;<br />
 left:8px;<br /> <a style="text-decoration: none; color: inherit; cursor: default; outline: none;" href="http://newparac.co.uk/6l-free-sex-clips-online/">http://newparac.co.uk/6l-free-sex-clips-online/</a> 
 width:4px;<br />
 background-image:-moz-linear-gradient(top, #CB3C34, #CB3C34, #CC0000);<br />
 background-image:-o-linear-gradient(top, #CB3C34, #CB3C34, #CC0000);<br />
 background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #CB3C34), color-stop(0.5, #CB3C34), color-stop(1, #CC0000));<br />
 background-image:-webkit-linear-gradient(#CB3C34, #CB3C34, #CC0000);<br />
}<br />

はじめは少し画像を使う必要があるかな?と思って制作を開始しましたが、画像なしでも出来るかな?とチャレンジしてみたところ、ちょっと時間はかかりましたが実現出来ました!
:before、:afterの擬似要素、z-indexの使い方、position関連がキモです。

解説

:before、:afterの擬似要素

これによって、不要なタグを追加することなくタグ2つ分のスタイルを設定することが出来ます。
普段は:afterをclearfixで利用しますが、スタイルを設定出来る1要素として利用します。

z-index

z-indexを上手く設定することで、見出し、:before、:afterの要素の順序を調整しています。

position関連

top, right, bottom, leftプロパティの使い方が重要でした。

よく使うのは、topとright、bottomとrightなど、二つのプロパティのみを指定して、表示位置を調整するパターンだと思いますが
topとbottom、leftとrightを一緒に指定すると、それぞれの値が有効になり、widthを指定しなくても要素を伸ばすことが出来ます。

イメージ

言葉だけではわかりにくそうだったので、イメージを作ってみました。

要素の伸縮イメージ

http://ludwickandshirman.com/m6-specific-dating-sites/

①、①’が、よくあるtopとright、bottomとrightなど、二つのプロパティだけ指定しているパターン。
①は、widthが指定されていない、①’はheightが指定されていない為、背景の青が描画されません。
(テキストなどがあればその分は表示されますが、今回は何もテキストがない場合を想定しています。)

②、②’が、topとbottom、leftとrightが指定されているパターン。
②は、widthが指定されていませんが、leftとrightが同時に指定されているため、要素が伸びています。
②’は、heightが指定されていませんが、topとbottomが同時に指定されているため、要素が伸びています。
厳密には違いますが、②はwidht:100%;、②’はheight:100%;が指定されているのと同じ効果があると言えます。

③が、縦横いっぱいに伸ばす指定です。
top、right、bottom、leftの全てを0にしました。
これはwidthとheightをそれぞれ100%を指定すればtopとleftを0にするだけで実現出来るのですが
widthとheightに頼らなかったのには理由があります。

widthとheightに頼らなかった理由

サンプルの見出しでは、:beforeが上から2px、下から2px、左から2px、右から2pxという指定になっています。
これは、上下左右2pxずつ空けた状態で、端から端まで伸ばしたかった為です。
widthとheightをpxで指定すれば簡単ですが「Responsive Web Design」のことも考えると出来れば%で指定をしたい。
widthとheightを%で指定すると、widthやheightをどれぐらい伸ばせばいいのか、2px分伸びるように計算するのが難しい。
ということで、top、right、bottom、leftで指定した方が確実と考えて、widthやheightに頼らないことになりました。

グラデーション

グラデーションについては、以前の記事が参考になります。
※少し前の記事で情報が若干古いのでご注意ください。

今回は簡単な縦のグラデーションしか使っていません。

まとめ

「擬似要素」「z-index」「top, right, bottom, left」「グラデーション」
以上のテクニックを組み合わせて見出しが完成しました。
画像を使わずにここまで出来る!CSS3は素晴らしいですね!

ただしIE7以前では、:afterや:beforeの擬似要素が使えない為、上記のままでは利用出来ません。
IE7以前に対応する場合は、擬似要素ではなく、空要素のタグを追加する必要がありそうです。

Subscribe:
pagetop