制作者の活動(PR)。

アイドル・堀北真希ちゃんにうさみみを着けた制作者のオリジナルキャラクタ。次
主な作品

人気女優をモデルにした創作キャラクタを用いたイラストの一例とアニメーション動画

<hr>要素のスタイル。

<hr>要素(横罫線)はCSSを扱う上で意外に厄介な代物です。

表示スタイルについて、明確な決まりが無いからです。

それでも、最近ではインターネットエクスプローラを除けば、多くの環境でそれなりのスタイルを実現出来るようになって来たようです。

ただ、殆どのブラウザにバグがあるのも事実ですが…。

ここでは、なるべく多くの環境でそれなりに<hr>要素のスタイルを定める方法について考えてみましょう。

<hr>要素のスタイル・目次。

主なブラウザでの<hr>要素の実装。

ファイヤーフォックスとオペラでの<hr>要素の実装。

ファイヤーフォックスとオペラでは、<hr>要素の実装を以下のように考えているようです。

枠線は境界線と見なす
つまり、borderプロパティで色, 幅及びスタイルを決めると言う事になります。
内部はパディングと見なす

つまり

と言った扱いになります。

内部の高さを決める事も出来る

内部の幅を要素本体の高さはheightプロパティで決める事も出来ます。

幅に関してはwidthプロパティで決めたり、左右のmarginプロパティの値で決めたり出来ますが、オペラでは左右のmarginプロパティの処理に不具合が見られました。

一部バグが見られましたが、CSSの仕様を充分考慮した実装と考えられます。

恐らくサファリやiCabなど、CSSの実装に関して評判が良いブラウザでも、同様の実装となっている事でしょう。

インターネットエクスプローラでの<hr>要素の実装。

インターネットエクスプローラと言ってもさまざまですので、現時点でもっとも利用者数が多いと思われるウィンドウズ版の 6.0で見てみましょう。

枠線は上下のborderプロパティで決める
このとき、上下左右のうち幅が 0になっている側については、勝手に灰色の枠線を付けてしまいます。
内部をpaddingプロパティで指定する事が出来ない

paddingプロパティで内部の幅を指定しても無効になります。

heightプロパティで無理矢理高さを決める事も出来ますが、その場合内部はcolorプロパティに従うようです。

幅に関してはwidthプロパティで決める事も出来ますが、幅を定めた場合にはオペラ9.00までと同様左右のmarginプロパティが無視されるようです。

インターネットエクスプローラのCSSの実装にはさまざまな問題がありますが、<hr>要素に関しても問題だらけのようです。

無難な<hr>要素のスタイル定義。

少なくとも大手三大ブラウザで無難に表示させるには、以下のようにすれば良いと考えられます。

枠線
内部
配置
widthプロパティmarginプロパティで決められますが、ファイヤーフォックス以外では左右の配置が仕様通りにならない場合がある事は承知して下さい。

<hr>要素のスタイルサンプル。

それでは、実際にサンプルを示してみましょう。

スタイル定義とHTML。

まず、スタイルシートを以下のようにします。

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>&lt;hr&gt;要素のスタイルサンプル。</title>
<h1>&lt;hr&gt;要素のスタイルサンプル。</h1>
<p>&lt;hr&gt;要素は案外厄介です。</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>要素を用いないのが実は一番かも知れません。

<hr>要素の性質を考えると、二つの連続するブロックレヴェル要素の間に区切りを入れたい場合に使われる要素と考えられるので、

のいずれか片方を設定する事で横罫線らしい表示を実現するのが、現状最も確実な方策と言えます。

勿論、CSS非対応環境ではそのようなスタイルの効果は出ませんので<hr>要素を入れておくのは無駄とも言い切れません。その場合CSS対応環境ではdisplay: noneプロパティで非表示にすれば良いでしょう。

参考・モバイルブラウザの場合。

WAP 2.0対応携帯電話の場合、余り良い実装では無いようです。

ブラウザの種類やヴァージョンに依っては、プロパティを全然受け付けない場合もあります。

モバイル環境では、<hr>要素は無理にスタイルを決めないのが無難でしょう。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com