inline / inline-block要素のCSS垂直方向の配置


142

私はいくつかの取得しようとしているinlineinline-blockコンポーネントはに垂直方向に整列しますdiv。どうしてspanこの例では、プッシュダウンさを主張していますか?との両方vertical-align:middle;を試しましたvertical-align:top;が、何も変わりません。

HTML:

<div>
  <a></a><a></a>
  <span>Some text</span>
</div>

CSS:

a {
    background-color:#FFF;
    width:20px;
    height:20px;
    display:inline-block;
    border:solid black 1px;
}

div {
    background:yellow;
    vertical-align:middle;
}
span {
    background:red;
}

RESULT:
ここに画像の説明を入力してください

FIDDLE


<a>要素内にテキストが含まれている場合、このリンクは
S.Serpooshan

回答:


270

vertical-align親要素ではなく、整列される要素に適用されます。divの子を垂直方向に配置するには、代わりに次のようにします。

div > * {
    vertical-align:middle;  // Align children to middle of line
}

参照:http : //jsfiddle.net/dfmx123/TFPx8/1186/

vertical-align現在のテキスト行を基準にしており、親の高さ全体ではありませんdiv。親のdiv高さを高くし、要素を垂直方向に中央揃えにしたい場合は、ではなくdivline-heightプロパティを設定しheightます。例として、上記のjsfiddleリンクに従ってください。


これは、外側の高さを指定すると機能しなくなりますdiv
Abhranil Das、2015

4
@AbhranilDas vertical-alignは、親要素ではなく、現在のテキスト行を基準にしています。これを希望どおりに機能させるには、div line-heightではなくdivを設定しheightます。
ディエゴ


5

両方の要素を左にフローティングするだけで同じ結果が得られます。

div {
background:yellow;
vertical-align:middle;
margin:10px;
}

a {
background-color:#FFF;
width:20px;
height:20px;
display:inline-block;
border:solid black 1px;
float:left;
}

span {
background:red;
display:inline-block;
float:left;
}

それらを左にフローティングすることの問題は、ブラウザが小さくなりすぎると次の行に折り返されることです。ブラウザーの境界を越えてもインラインにとどまるアイテムが必要な場合があるため、これinline-blockが唯一の解決策です。
ジェイクウィルソン

折り返しの問題が問題になることもありますが、折り返しが問題ない場合には、これは本当に良い解決策だと思います。それはエレガントで、望ましい効果の精神を語り、親への変更を必要としません。
クリスペンスミス2014

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.