为啥这个 inline-block 元素的内容不是垂直对齐的

Posted

技术标签:

【中文标题】为啥这个 inline-block 元素的内容不是垂直对齐的【英文标题】:Why does this inline-block element have content that is not vertically aligned为什么这个 inline-block 元素的内容不是垂直对齐的 【发布时间】:2012-10-08 15:57:31 【问题描述】:

遇到了一个奇怪的 CSS 问题。有人可以解释为什么包含内容的框没有垂直对齐吗?

如果您将文本放在带有 .divPutTextToFixIssue 类的范围内 - 它会正确对齐。

http://jsfiddle.net/KgqJS/88/

   #divBottomHeader 
        background-color: #d5dbe0;
        height: 43px;
    
    .divAccountPicker 
        display: inline-block;
        background: blue;            
        width: 200px;
        height: 40px;
    
    .divAccountData 
        display: inline-block;
        background: red;
        width: 400px;
        height: 40px;
    
<div id="divBottomHeader">
        <div class="divAccountPicker">
           <span class="divPutTextToFixIssue"></span>                 
        </div>
        <div class="divAccountData">
            <span>Balance: $555</span>
        </div>
    </div>

【问题讨论】:

【参考方案1】:

默认的vertical-align 值为baseline,其中

将框的基线与父框的基线对齐

注意:您可以通过将 vertical-align:baseline 添加到您的 .divAccountData 选择器来查看此默认值。由于baseline 是默认值,所以对齐方式没有改变。

您需要将其更改为top 以对齐顶部的块,例如:

.divAccountData 
    display: inline-block;
    background: red;
    width: 400px;
    height: 40px;
    vertical-align: top;

Baseline 定义为

大多数字母“坐”的线和下降线延伸的线以下

要解决为什么添加文本似乎可以解决问题,因为

'inline-block' 的基线是其在正常流中的最后一个行框的基线,除非它没有流内行框或者它的 'overflow' 属性具有除 'visible 之外的计算值',在这种情况下,基线是底部边距边缘。

来自CSS2 Visual formatting model details

因此,仅添加一个字符会更改基线,导致第二个块以相同的垂直对齐方式出现。这在两个块包含相同数量的行时有效。尝试在其中一个块中添加更多单词,您会发现,如果不在第二个块上强制 vertical-align:top,它将根据第一个块中存在的文本行数移动。

编辑:找到一个相关问题Why is this inline-block element pushed downward?

【讨论】:

【参考方案2】:

您需要将vertical-align: top; 添加到.divAccountPicker demo

【讨论】:

【参考方案3】:

在您的.divAccountData, .divAccountPicker 中添加vertical-align:top 像这样

.divAccountData, .divAccountPicker 
    vertical-align: top;

LIve demo

如果你习惯了display:inline-block;而不是习惯了所有方式vertical-align:top

【讨论】:

【参考方案4】:

试试这个

.divPutTextToFixIssue 
   display:inline-block;
 

jsFiddle

【讨论】:

以上是关于为啥这个 inline-block 元素的内容不是垂直对齐的的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Gecko 和 Blink 在处理 inline-block 元素时高度计算如此不一致?

为啥 bootstrap 在 .span 上使用浮点数而不是 display: inline-block?

display为inline-block的元素有内容和没有内容情况下高度不一致的问题

内联元素inline-block空隙问题

inline-block的理解

display:inline-block