HTMLの水平線を表示するのはかんたんで、hrタグを書くだけです。CSSでデザインの変更もできます。
太さや色、グラデーション、画像などサンプルを作りながら、かんたんに誰にも分かるように解説します。
デフォルトのhrタグのしくみもくわしく解説します。
HTMLで水平線を描く
水平線を描くのはかんたんです。<hr />を使うだけです。<hr />は開始タグも終了タグもありません。
デフォルトでは次のようになります。
HTMLの結果です。
hrタグのしくみ
hrタグはborderと同じ
hrタグのデザイン変更を行う前に、hrタグがどのようにして水平線を表現しているのか、中身をのぞいてみます。
ソースコードサンプルのボックスにタップやマウスを合わせると、右上にコピーボタンが出ます。
慣れないうちは、とりあえずコピー&ペーストで、自分で動かすところから始めると良いです。
hrタグのCSSのデフォルトはこうなっています。
分かりにくいですね?
user agent stylesheetは、普通のCSSとはちがうプロパティをもっています。これを理解しようとしなくていいです。
user agent stylesheetは、HTMLタグのデフォルトのスタイル。
ブラウザしか使わない独自のCSSプロパティをもっている。ふつうのCSSより細かいものが多い。
銀色のダサいボタンのスタイルもuser agent stylesheet。
見慣れた書き方では次のようになります。
これなら分かりますね?
クラス名は適当につけています。これを使うと、divでもhrタグと同じことができます。
サンプルコードで見てましょう。CSSはさっきのものを使います。
HTMLの結果です。
同じ結果がでました。
CSSを見ると、hrタグはborderだけで水平線をつくっていることがわかります。
水平線がほんのり二重線に見えるのはborderの種類がinsetだから。それがわかるようにborderの太さを大きくします。
insetは、
左と上を暗く・右と下を明るくして、コンポーネント全体を立体的にくぼんで見せる
というもので、これを使って水平線を立体的に見せます。
太さを大きくすることで、コンポーネント本体は使わずに、borderだけで線を出していることもわかります。
(heightが0)
hrのしくみから、hrタグのデザインを変える方法は3つです。
- デフォルトのborderを消して、コンポーネントの本体で表現する。(heightを0より大きく)
- デフォルトのborderを消して、新しいborderで表現する。
- borderとコンポーネントの本体の両方で表現する。
じっさいに、hrタグの水平線をいろいろな方法で変更してみましょう。
水平線の太さと色を変更する
水平線の太さだけを変更する方法は、borderの太さを変更するだけでできます。
borderの幅を変更するクラスを用意しました。HTMLの結果です。
デフォルトの色は見た目がよくありません。
次に色を変更します。色を変える方法は2つです。
- borderの色を変える。
- borderを消してコンポーネントの本体を使う。
borderの太さを変更するクラス、コンポーネント本体の太さを変更するクラス、borderのクリアのクラスを追加しました。
コンポーネント本体を使うときは、太さにheightを使います。
HTMLの結果です。
2つの結果は少しちがいます。これは、borderに水平線の種類(inset)が指定されているからです。
次は、線の種類を変更してみましょう。
水平線の種類を変更する
水平線の種類はborderの線種で表現します。コンポーネント本体も使えなくはないですが、作業がかんたんでないのでほとんど使いません。
それぞれの線種のクラスを追加しました。
solid, inset, outset以外、すべてのborderを使うと、左右の端やtopとbottomの境などの影響で、きれいに水平線ができません。
このような線種は、border-topまたはborder-bottomの1つを使うことできれいな水平線ができます。
また、わかりやすいように拡大表示のクラスも追加しています。
HTMLの結果です。
groove, ridgeは、borderひとつでくぼみ・隆起をつくっています。
一方、inset, outsetは、left, top, right, bottomのborder全体でつくっているので、すべてのborderを使わないとくぼみ・隆起はできません。
一本線(solid)なら、コンポーネント本体でもできます。
CSSは前に作ったものを使います。HTMLの結果です。
2つの結果が同じになりました。
hrタグはグラデーションをつけることもできます。次はグラデーションをつけてみましょう。
水平線にグラデーションをつける
グラデーションは、borderとコンポーネント本体どちらでもつけることができます。
サンプルコードを見てみましょう。
グラデーションのクラスをborderとコンポーネント本体用にそれぞれ追加します。
それぞれのグラデーションのクラスを追加しました。
HTMLの結果です。
すべて結果が同じになりました。
borderのグラデーションは、border-colorではできません。本来は画像を指定するborder-imageを使って、グラデーションを画像として表示します。
border-imageは、画像をひとつの線種としてあつかい、solidやdoubleなどは上書きするのでborderの線種は使えません。
hrタグでグラデーションを使うときは、borderではなく、コンポーネントの本体を使うほうがよいでしょう。
水平線に画像を使う
グラデーションのところで、画像を使うborder-imageをご紹介しました。もちろん、画像を水平線に使うこともできます。
画像のクラスをborderとコンポーネント本体用にそれぞれ追加します。
それぞれの画像のクラスを追加しました。
HTMLの結果です。
少しちがいますが、ほぼ同じ結果になりました。
border-imageとbackgroundで使う画像は考え方がちがい、border-imageのときは9分割の画像を使うのが一般的です。
今回使ったサンプル画像はこちらです。
border-image
background
hrタグでは、border-topまたはborder-bottomだけを使うので、9分割の画像のうち使うのは3つです。9つの画像をまとめる意味がありません。
画像をそのまま使うときは、コンポーネントの本体を使うほうがかんたんです。
まとめ
hrタグはborderでできています。でも、カスタマイズするときは、borderだけでなく、コンポーネントの本体も使えます。
コンポーネントの本体のCSSの設定はdivと同じです。border、コンポーネント本体のどちらを使ってもむずかしくありません。