基本グラデーションを用いたレイアウトの場合、コンテンツ幅や高さが決まっている場合は問題なく実装できるのですが、リキッドデザインの場合等、横幅が可変する場合に実装が非常に困難になります。(特にIEとかIEとかIEとかで画像を使用するので)
そんな場合にどうするか、ちょっと試してみました。
グローバルナビに実装した場合の
こちらがデモになります。
DEMOはこちら
※IE9.jsを使用しています。
HTML
<div id="gNav"> <ul> <li><a>メニュー1</a></li> <li><a>メニュー2</a></li> <li><a>メニュー3</a></li> <li><a>メニュー4</a></li> </ul> </div> <!-- /#gNav -->
CSS
.wrapper #gNav { position: relative; overflow: hidden; background: #f71e1e; } .wrapper #gNav:before { content: ''; display: block; position: absolute; width: 50%; height: 100%; right: 0; background: #680202; z-index: 0; } .wrapper #gNav ul { position: relative; width: 950px; margin: 0 auto; background: url(bgtest.png) repeat-y left top; text-align: center; } .wrapper #gNav ul li { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; width: 200px; -webkit-box-sizing: border-box; box-sizing: border-box; border-right: 1px solid #fff; } .wrapper #gNav ul li:first-child { border-left: 1px solid #fff; } .wrapper #gNav ul li a { display: block; width: 198px; line-height: 30px; color: #fff; } .wrapper #contents { width: 950px; margin: 0 auto; background: #00f; }
解説
まず普通にグローバルナビを中央寄せでマークアップします。
その背景にグラデーションのかかった画像を指定します。
.wrapper #gNav ul { position: relative; width: 950px; margin: 0 auto; background: url(bgtest.png) repeat-y left top; text-align: center; }
↑widthはコンテンツ幅、heightは1pxでOKです。↑
その後その親要素にposition:relative;とoverflow:hidden;を指定し、
背景色にグラデーションの一番左側の色を指定します。
.wrapper #gNav { position: relative; overflow: hidden; background: #f71e1e; }
続いて:beforeを指定し、そこにposition:absolute; width:50%;を指定し、
背景色にグラデーションの一番右側の色を指定した要素を
right:0;で右側に固定します。
.wrapper #gNav:before { content: ''; display: block; position: absolute; width: 50%; height: 100%; right: 0; background: #680202; z-index: 0; }
それぞれを z-index で重なり順を調整すると出来上がりです。
IE7もOK!(IE6はちょっと崩れます(小声))
※IE9.jsを使用しています。
というわけで、今まで悩みの種だった横伸びグラデーションもデザインに取り入れられて表現が広がるのではないでしょうか。
ぜひ使ってみてください。