html - 垂直居中对齐的图像更靠近底部而不是顶部
问题描述
在这个例子中,为什么图像没有完全呈现在封闭 DIV 的中间?
div {
border: 1px solid gray;
line-height: 100px;
}
img {
height: 96px;
vertical-align: middle;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
如果我们运行这个示例,我们会看到图像更靠近底部边框而不是顶部边框。
为什么会这样?
在 DIV 中垂直对齐图像以使其垂直位于 DIV 中间的正确方法是什么?
解决方案
如果我们检查文档,我们将阅读以下内容:
中间
将元素的中间与基线加上父元素的x 高度的一半对齐。
因此,我们需要识别这些值以了解对齐方式。如果我们参考上图,我们可以清楚地看到基线,我们还可以看到 line-height(在我们的例子中定义为 100px)。您还可以注意到,中间不是 div 的中间,而是由不同值(font-family、font-size 等)定义的文本的中间。
用简单的话来说:您对对齐的引用不是div,而是div内的文本。
为了更容易,让保留line-height
默认值并定义 afont-size
代替(行高将等于字体大小):
div {
border: 1px solid gray;
font-size:50px;
}
img {
height: 46px;
vertical-align: middle;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
with a different font-family
<div style="font-family:arial">
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
你可以清楚地看到middle
div 离中间很远,如果我们改变font-family
对齐方式,也会改变。
为了更好地对齐包含文本的 div 内的内容,请使用 flexbox,例如:
div {
border: 1px solid gray;
font-size:50px;
display:flex;
align-items:center;
}
img {
height: 46px;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
推荐阅读
- node.js - 如何修复“这里没有配置默认音频设备”语音转文本
- c - C - 逐行读取文件
- java - 将大量值推送到android中的firebase
- javascript - 如何在“export const”中使用“this”?
- c - OpenSSL DTLS 连接永远不会建立
- javascript - 使用不同的类方法,取决于使用的目标编译器选项
- python-3.x - 出错整数或布尔数组是有效索引
- wordpress - 如何将会员卡添加到我的网站,可以会员下载
- php - 使用 FastCGI 在 IIS 上配置 PHP 以显示警告但继续执行
- java - 我想将某些列的边框设置为粗,但所有列都已设置