html – 为什么这个内联块元素的内容不是垂直对齐的

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

如果您将文本放在span中,并使用.divPutTextToFixIssue类 – 它会正确对齐。

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

<div id="divBottomHeader">
    <div class="divAccountPicker">
       <span class="divPutTextToFixIssue"><span>                 
    </div>
    <div class="divAccountData">
        <span>Balance: $555</span>
    </div>
</div>​
#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;
}​

解决方法

默认的 vertical-align值是基线

Aligns the baseline of the Box with the baseline of the parent Box

注意:您可以通过向.divAccountData选择器添加vertical-align:baseline来查看此默认值。由于基线是默认值,所以对齐方式不变。

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

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

Baseline定义为

the line upon which most letters “sit” and below which descenders extend

为了解决为什么添加文本似乎解决了这个问题,是因为

The baseline of an ‘inline-block’ is the baseline of its last line Box in the normal flow,unless it has either no in-flow line Boxes or if its ‘overflow’ property has a computed value other than ‘visible’,in which case the baseline is the bottom margin edge.

CSS2 Visual formatting model details

所以添加一个字符会改变基线,导致第二个块出现在相同的垂直对齐方式。这仅在两个块都包含相同数量的行时才起作用。尝试向其中一个块添加更多的单词,您将看到没有强制垂直对齐:第二个块的顶部将根据第一个块中存在多少行文本而移动。

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

相关文章

操作步骤 1、进入elasticsearch的plugin,进入ik。进入config。 2、在config下面建立以.dic为后缀的字典...
lengend data数据中若存在&#39;&#39;,则表示换行,用&#39;&#39;切割。
代码实现 option = { backgroundColor: &amp;#39;#080b30&amp;#39;, tooltip: { trigger: &...
问题原因 原因在于直接在js中取的变量并复制给var变量。 于是就变成这样。 解决办法 var data = &#...
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选...
对于很多人来说,用字符编码都是熟能生巧,而不清楚为什么是那样的字符编码,所以我在这列了一个表,翻...