2017-11-22 8 views
0

2つの位置をどのようにしてinline-blockdivheight属性と同じ行にすることができますか?なぜインラインブロックdivが互いに不均一に整列するのですか?

が期待:

#legend#containerが同じ行にあるべきです。実際

は:

#legend#container後くらいに位置しています。一方

div { 
 
    display: inline-block; 
 
} 
 

 
#legend { 
 
    height: 500px; 
 
    border: solid red; 
 
} 
 

 
#container { 
 
    height: 500px; 
 
    width: 500px; 
 
    border: solid green; 
 
}
<div id="legend"> 
 
    <p>Lorem</p> 
 
</div> 
 
<div id="container"></div>

Fiddle

、我々は height属性を入れていない場合は、それ works fine

+0

使用**表示:インラインフレックス**ボディに、それはこの場合 – LSKhan

+0

に動作します参照は、 'divの{ ディスプレイのように、垂直整列を指定する必要があります。インラインブロック。 vertical-align:top; } ' – Kangouroops

+0

@ Kangouroopsしかし、' vertical-align'が欠落しているときの奇妙な振る舞いの理由は何ですか? – Utku

答えて

3

インラインレベル要素の初期設定はvertical-align: baselineです。つまり、デフォルトのdisplayの値がinlineであるspan,textareaおよびimgなどの要素は、コンテナのベースラインにアライメントされます。

baseline

ほとんどの文字は「座る」とディセンダーが延びる以下の時にライン。

enter image description here

出典:あなたの質問にWikipedia.org

、あなたはdisplay: inline-blockにdivを設定しています。これによりベースラインアライメントがアクティブになり、ボックスは互いのベースラインに対して垂直に整列します。それはあなたが見ているものです。

vertical-alignのデフォルト値を上書きすることで問題を解決できます。

div { 
 
    display: inline-block; 
 
    vertical-align: bottom; /* new */ 
 
} 
 

 
#legend { 
 
    height: 500px; 
 
    border: solid red; 
 
} 
 

 
#container { 
 
    height: 500px; 
 
    width: 500px; 
 
    border: solid green; 
 
}
<div id="legend"> 
 
    <p>Lorem</p> 
 
</div> 
 
<div id="container"></div>

OR、(vertical-alignはまださえ合わせて完全に便利になるかもしれないが)単に空のdivにいくつかのテキストを置く:これを試してみてください。

div { 
 
    display: inline-block; 
 
} 
 

 
#legend { 
 
    height: 500px; 
 
    border: solid red; 
 
} 
 

 
#container { 
 
    height: 500px; 
 
    width: 500px; 
 
    border: solid green; 
 
}
<div id="legend"> 
 
    <p>Lorem</p> 
 
</div> 
 
<div id="container">text text text</div>

+0

Btwなぜ 'vertical-align:top'、' vertical-align:middle'と 'vertical-align:bottom'の効果が同じですか? – Utku

+1

2つのdivの高さが同じであるためです。彼らの高さが異なっていれば、違いが分かります。 –

関連する問題