<hr>要素(横罫線)はCSSを扱う上で意外に厄介な代物です。
表示スタイルについて、明確な決まりが無いからです。
それでも、最近ではインターネットエクスプローラを除けば、多くの環境でそれなりのスタイルを実現出来るようになって来たようです。
ただ、殆どのブラウザにバグがあるのも事実ですが…。
ここでは、なるべく多くの環境でそれなりに<hr>要素のスタイルを定める方法について考えてみましょう。
ファイヤーフォックスとオペラでは、<hr>要素の実装を以下のように考えているようです。
つまり
と言った扱いになります。
内部の幅を要素本体の高さはheightプロパティで決める事も出来ます。
幅に関してはwidthプロパティで決めたり、左右のmarginプロパティの値で決めたり出来ますが、オペラでは左右のmarginプロパティの処理に不具合が見られました。
一部バグが見られましたが、CSSの仕様を充分考慮した実装と考えられます。
恐らくサファリやiCabなど、CSSの実装に関して評判が良いブラウザでも、同様の実装となっている事でしょう。
インターネットエクスプローラと言ってもさまざまですので、現時点でもっとも利用者数が多いと思われるウィンドウズ版の 6.0で見てみましょう。
paddingプロパティで内部の幅を指定しても無効になります。
heightプロパティで無理矢理高さを決める事も出来ますが、その場合内部はcolorプロパティに従うようです。
幅に関してはwidthプロパティで決める事も出来ますが、幅を定めた場合にはオペラ9.00までと同様左右のmarginプロパティが無視されるようです。
インターネットエクスプローラのCSSの実装にはさまざまな問題がありますが、<hr>要素に関しても問題だらけのようです。
少なくとも大手三大ブラウザで無難に表示させるには、以下のようにすれば良いと考えられます。
paddingプロパティは 0にします。
それでは、実際にサンプルを示してみましょう。
まず、スタイルシートを以下のようにします。
p {margin: 0;padding: 0;}hr.style1 {margin: 1em 0 1em;height: 4px;border: #f00 2px solid;}hr.style2 {margin: 1em 0 1em;padding: 0;height: 4px;border: #f00 1px solid;color: #fcc;background: #fcc;}hr.style3 {margin-top: 1em;margin-bottom: 1em;margin-right: 0;padding: 0;width: 60%;height: 4px;border: #f00 1px solid;color: #fcc;background: #fcc;}
続いて、HTML文書を以下のようにします。
<title><hr>要素のスタイルサンプル。</title><h1><hr>要素のスタイルサンプル。</h1><p><hr>要素は案外厄介です。</p><p>それでも何とか思い通りにしてみたいものです。</p><hr class="style1" /><p>上は幅 4ピクセルズ、枠線の太さは 2ピクセルズの赤い枠線です。</p><hr class="style2" /><p>上は幅 4ピクセルズの赤い枠線で、内部がピンクになっております。</p><hr class="style3" /><p>上は幅 4ピクセルズの赤い枠線で、内部がピンクになっております。</p><p>更に幅を60%とし、右余白を零にしております。</p>
これらを、ファイヤーフォックス, オペラ 9.0及びインターネットエクスプローラ 6.0でそれぞれ表示させて見ましょう。
ファイヤーフォックスで表示させた場合、
オペラ 9.0で表示させた場合、
インターネットエクスプローラ 6.0で表示させた場合、
どうしても大手三大ブラウザ間での表示の違いを吸収する事は出来ないようですが、それほど大差の無い表示にはなっている筈です。
最も無難に横罫線を引きたいのであれば、<hr>要素を用いないのが実は一番かも知れません。
<hr>要素の性質を考えると、二つの連続するブロックレヴェル要素の間に区切りを入れたい場合に使われる要素と考えられるので、
のいずれか片方を設定する事で横罫線らしい表示を実現するのが、現状最も確実な方策と言えます。
勿論、CSS非対応環境ではそのようなスタイルの効果は出ませんので<hr>要素を入れておくのは無駄とも言い切れません。その場合CSS対応環境ではdisplay: noneプロパティで非表示にすれば良いでしょう。
WAP 2.0対応携帯電話の場合、余り良い実装では無いようです。
ブラウザの種類やヴァージョンに依っては、プロパティを全然受け付けない場合もあります。
モバイル環境では、<hr>要素は無理にスタイルを決めないのが無難でしょう。