[CSS]見出しの両端に水平ラインを天地中央に配置するテクニック
Post on:2011年11月4日
紙媒体でよく見かける、見出しの両端に水平ラインを天地中央に配置するスタイルシートのテクニックを紹介します。
Centered Heading Overlaying a Horizontal Line with CSS
[ad#ad-2]
下記は各ポイントを意訳したものです。
実装のポイント
実装するにあたり、下記の点に留意します。
- 画像は使用しない。
- 余分なHTMLは使用しない。
- Scalable: フォントのサイズを大きくしても調整される。
- Fluid: 可変。
- JavaScriptは使用しない。
Method 1: 疑似要素
見出しの疑似要素で水平線を配置し、spanタグを内側に配置し水平線が中央に重なるようにします。
CSS
h1:before { content: ""; display: block; border-top: solid 1px black; width: 100%; height: 1px; position: absolute; top: 50%; z-index: 1; } h1 span { background: #fff; padding: 0 20px; position: relative; z-index: 5; }
デモ
欠点
疑似要素を使用しているため、IE6/7では機能しません。また、装飾用にspanタグを使用しており、これは良くない方法です。
Method 2: 隣接兄弟セレクタ
見出し要素の後にp要素を配置するものとして、「h1+p」で水平線を配置します。ポイントはネガティブマージンとパディングを同じ値にすることです。
見出しの後の要素が不明な時はユニーバルセレクタを使い、「h1+*」と指定します。
CSS
h1+p { border-top: solid 1px black; padding-top: 40px; margin-top: -40px; }
デモ
欠点
このセレクタはIE6では動作しません。そして、この方法でもまだ余分のspanタグを必要とします。
IE6への対応、セマンティックということを気にしないのであれば、この方法が一番よいでしょう。
Method 3: 線形グラデーション
線形グラデショーンを使う方法では、h1要素に直接スタイルを記述します。上下を背景色と同じにし中央に水平線を描きます。
グラデショーンがテキストの背後のエリアを覆うようにspanタグを必要とします。
CSS
h1 { background: -moz-linear-gradient(#ffffff 0%, #ffffff 49%, #000000 50%, #000000 51%, #ffffff 52%, #ffffff 100%); background: -ms-linear-gradient(#ffffff 0%, #ffffff 49%, #000000 50%, #000000 51%, #ffffff 52%, #ffffff 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(49%, #ffffff), color-stop(50%, #000000), color-stop(51%, #000000), color-stop(52%, #ffffff), color-stop(100%, #ffffff)); background: -webkit-linear-gradient(#ffffff 0%, #ffffff 49%, #000000 50%, #000000 51%, #ffffff 52%, #ffffff 100%); background: -o-linear-gradient(#ffffff 0%, #ffffff 49%, #000000 50%, #000000 51%, #ffffff 52%, #ffffff 100%); background: linear-gradient(#ffffff 0%, #ffffff 49%, #000000 50%, #000000 51%, #ffffff 52%, #ffffff 100%); }
※Webkit用の古い記述も含まれています。
デモ
欠点
この方法はspanタグの利用とIE6-9が非サポートである点です。
Method 4: 最後にjQueryを使ったメソッド
ここまでの方法は全てspanタグを挿入するものでした。そのspanタグをjQueryで挿入してみます。
CSS
var myHeading = $('h1'), myHeadingText = $(myHeading).text(), myFullText = '<span>' + myHeadingText + '</span>'; $(myHeading).html(myFullText);
デモ
欠点
JavaScriptを必要とし、余分なエレメントはありますがHTML上にはありません。
2番目の兄弟セレクタを使った方法とこの方法を組み合わせれば、IE6以外は全てサポートします。
[ad#ad-2]
全部のデモ
全部のデモがまとまっているページです。
sponsors