这是一个示例,可帮助解释内嵌图像如何影响文本行的整体行高。
考虑以下HTML片段:
<form>
<div class="field-wrap ex1">
<label for="ex1">Text</label>
<input type="text" id="ex1" name="ex1"
value="Example 1.............................">
<img src="http://placehold.it/50x32">
</div>
<div class="field-wrap ex2">
<label for="ex2">Text</label>
<input type="text" id="ex2" name="ex1"
value="Example 2.............................">
<img src="http://placehold.it/50x50">
</div>
<div class="field-wrap ex3">
<label for="ex3">Text</label>
<input type="text" id="ex3" name="ex1"
value="Example 3.............................">
<img src="http://placehold.it/50x64">
</div>
<div class="field-wrap ex4">
<label for="ex4">Text</label>
<input type="text" id="ex4" name="ex1"
value="Example 4.............................">
<img src="http://placehold.it/50x64">
</div>
</form>
基本上,每个input
字段都有一个关联label
字段和一个img
标签,所有这些都包含在一个块元素.field-wrap
中。
对于CSS:
form {
font-size: 25px;
line-height: 2;
font-family: sans-serif;
}
.field-wrap {
background-color: yellow;
margin: 10px 0;
vertical-align: middle;
}
.field-wrap input {
font-size: inherit;
}
.field-wrap input, .field-wrap label, .field-wrap img {
vertical-align: inherit;
}
.ex4.field-wrap {
vertical-align: baseline;
}
这给出了以下结果:
在所有情况下,我都选择了 25px 的字体大小,并将 line-height 设置为字体大小的 2 倍。
我还设置vertical-align: middle
了所有子元素(input
和label
)img
。这个很重要。
默认情况下,输入字段的高度由字体大小和可能应用的任何填充控制。但是,您也可以指定高度,在本例中我设置为 30px。注意输入框有1px的边框,所以整体高度其实是32px。
在示例 1 中,我选择了一个高度为 32px 的图像来匹配输入框的高度,并且垂直对齐也很好地居中。
在示例 2 中,我将图像的高度增加到 50px,现在图像正好适合高度为 50px 的父元素(由于 line-height 是 25px 字体大小的 2 倍)。
在示例 3 中,我将图像设置为 64px 高,在这种情况下,父元素的高度会增加以适应图像。这是根据 CSS 规范进行的正确渲染。
最后,在示例 4 中,我将垂直对齐设置为默认值baseline
,在这种情况下,图像底部与文本底部对齐,这会迫使父块更高以适应图像高度和文本/输入字段。
这应该清楚地说明垂直对齐的工作原理。
其他评论:
要使图像准确居中,请确保边缘周围没有透明空间,如果在图像编辑程序中打开图像,这很明显。
您还可以将图像包装在一个内联块中,指定一个高度,然后将图像高度设置为 100%,这将强制尺寸奇特的图像适应特定高度。
请参阅jsFiddle上的代码