質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

3405閲覧

hr要素の余白について

LUCIA

総合スコア20

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/08/17 14:47

区切り線を入れようと、以下のようなCSSを作りました。

CSS

1hr.chapterline { 2 overflow: visible; /* For IE */ 3 padding: 0; 4 border: none; 5 border-top: medium double #666; 6 color: #666; 7 text-align: center; 8} 9hr.chapterline:after { 10 content: "✿❀✿❀"; 11 display: inline-block; 12 position: relative; 13 top: -0.7em; 14 font-size: 1.5em; 15 padding: 0 0.25em; 16 background: white; 17}

二重線の真ん中に、contentで指定した、花びらが4つ並ぶデザインが入る区切り線なのですが、

HTML

1<p>テスト</p> 2<p>テスト</p> 3<hr class="chapterline"> 4<p>テスト</p> 5<p>テスト</p>

このようなhtmlを書いたとき、hr要素の下の部分(3番目の【テスト】の上)に大きく余白が空いてしまいます。
hr要素の上の部分と同じ高さの間隔に揃えたいのですが、何か方法はありますでしょうか?
contentを指定せず、2重線のみの場合は上下の余白が均等になりますので、content部分のpaddingが怪しいだろうと思っていますが…どのような指定をすればよいかわからず困ってしまいました。

もしよろしければお力添えをいただけますと幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/08/19 04:54

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
LUCIA

2018/08/19 04:56

!、そうでした!お知らせありがとうございます。ウェブ版だと見落としがちですね…。
guest

回答2

0

ベストアンサー

IEでも動作するコードを提示します。
質問文のコードから1行追加しただけで、hr.chapterlineheight: 0を指定しています。

サンプルコード (JS Bin)

css

1hr.chapterline { 2 overflow: visible; /* For IE */ 3 padding: 0; 4 border: none; 5 border-top: medium double #666; 6 color: #666; 7 text-align: center; 8 height: 0; /* ADD */ 9} 10hr.chapterline:after { 11 content: "✿❀✿❀"; 12 display: inline-block; 13 position: relative; 14 top: -0.7em; 15 font-size: 1.5em; 16 padding: 0 0.25em; 17 background: white; 18}

空白ができてしまう原因は、<hr>要素の子要素に高さを持つものがあるため、親要素である<hr>要素がそれに引きずられて高さを持ってしまったことにあります。
本来<hr>要素は子要素をもつことができませんが、:after疑似要素によって子要素が追加されています。
疑似要素はtop: -0.7emによって表示位置をずらしていますが、position: relativeなので本来表示されるはずだった場所にはスペースが残ります
結果的に、<hr>要素は上側だけに二重線のボーダーを持つ透明な長方形になったため不自然な空白ができたという寸法です。
<hr>要素の高さが子要素に引きずられないよう、height: 0とすることで空白を解消しています。

投稿2018/08/17 17:12

編集2018/08/18 10:21
reosablo

総合スコア339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reosablo

2018/08/17 17:26

kei344さんのコードは私も初めに思い浮かびました。しかし、IEで表示してみたところ、✿❀✿❀が中央ではなく左端に寄ってしまったため別案を探し、この回答を提示するに至りました。`position: absolute`な要素に`display: inline-box`を指定した時の挙動がブラウザによって異なることがある?ようです。 https://www.tomotanuki.com/entry/position-relative-absolute#IE11-%E3%81%A7%E3%81%AF%E4%BB%96%E3%81%A8%E3%81%AF%E9%81%95%E3%81%84%E5%9F%BA%E6%BA%96%E4%BD%8D%E7%BD%AE%E3%81%AB
LUCIA

2018/08/18 09:52

回答ありがとうございます!無事できました! 要素の位置指定についても勉強になりました。
reosablo

2018/08/18 10:25

回答本文に`position: relative`のスペースが残る仕様について参考情報のリンクを追加しておきました。勉強になってもらえたようでなによりです。
guest

0

CSS

1hr.chapterline { 2 overflow: visible; /* For IE */ 3 padding: 0; 4 border: none; 5 border-top: medium double #666; 6 color: #666; 7 text-align: center; 8 position: relative; /* ADD */ 9} 10hr.chapterline:after { 11 content: "✿❀✿❀"; 12 display: inline-block; 13 /* position: relative; REMOVE */ 14 position: absolute; /* ADD */ 15 top: -0.7em; 16 font-size: 1.5em; 17 padding: 0 0.25em; 18 background: white; 19} 20```**動くサンプル:**[https://jsfiddle.net/6cot7skd/](https://jsfiddle.net/6cot7skd/)

投稿2018/08/17 14:58

kei344

総合スコア69625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問