如何在图片旁垂直对齐文本?

2247
为什么vertical-align: middle不起作用?但是,vertical-align: top却可以起作用。

span{
  vertical-align: middle;
}
<div>
  <img src="https://via.placeholder.com/30" alt="small img" />
  <span>Doesn't work.</span>
</div>

26个回答

11

您可以做的另一件事是将文本的 line-height 设置为 <div> 中图片的大小。然后将图片设置为 vertical-align: middle;

这真的是最简单的方法。


3
请注意,如果您的内容跨越多行,这种方法将无法正常工作。 - Ahmad Alfy
那为什么不直接使用 line-height:100% 呢? - Jean G.T

10

目前这些回答中还没有使用margin的解决方案,所以这是我针对此问题提出的解决方案。

这个解决方案仅在您知道图像宽度的情况下有效。

HTML代码:

<div>
    <img src="https://placehold.it/80x80">
    <span>This is my very long text what should align. This is my very long text what should align.</span>
</div>

CSS

div {
  overflow:hidden;
}
img {
   width:80px
   margin-right:20px;
   display:inline-block;
   vertical-align:middle;
}
span {
   width:100%;
   margin-right:-100px;
   padding-right:100px;
   display:inline-block;
   vertical-align:middle;
   box-sizing:border-box;
   -moz-box-sizing:border-box;
   -webkit-box-sizing:border-box;
}

1
这是确切的解决方案。它也适用于多行文本... 上述方法不适用于多行文本。 - efirat

8

请写下这些属性

span{
    display:inline-block;
    vertical-align:middle;
}

当你使用 vertical-align 属性时,请使用 display:inline-block;。这些是相关联的属性。


6
您可以使用display属性将图像设置为内联元素

<div>
  <img style="vertical-align: middle; display: inline;" src="https://placehold.it/60x60">
  <span style="vertical-align: middle; display: inline;">Works.</span>
</div>


6
background:url(../images/red_bullet.jpg) left 3px no-repeat;

通常我使用3像素代替top。通过增加/减少该值,可以将图像更改为所需的高度。


在图像大小未知或动态的情况下并不起作用。 - Dan

4

在CSS中使用flex属性

使用align-items:center;来垂直居中文本,在flex中使用它。如果您想要水平居中文本,请在flex中使用justify-content:center;

div{
  display: flex;
  align-items: center;
}
<div>
  <img src="http://lorempixel.com/30/30/" alt="small img" />
  <span>It works.</span>
</div>

在CSS中使用 table-cell

div{
  display: table;
}
div *{
  display: table-cell;
  vertical-align: middle;
}
<div>
  <img src="http://lorempixel.com/30/30/" alt="small img" />
  <span>It works.</span>
</div>


3
例如,在jQuery移动中的按钮上,您可以通过将此样式应用于图像来微调它:
.btn-image {
    vertical-align:middle;
    margin:0 0 3px 0;
}

3
多行解决方案: http://jsfiddle.net/zH58L/6/
<div style="display:table;width:30px;height:160px;">
    <img style="display:table-cell;width:30px;height:60px;padding:50px" src='...' />
    <div style="display:table-cell;height:30px;vertical-align:middle">
      Multiline text centered vertically
    </div>
</div>
<!-- note: img (height + 2x padding) must be equal to root div height -->

适用于所有浏览器和IE9以上版本


2

我同意,这可能会让人感到困惑。尝试利用表格功能。我使用这个简单的CSS技巧将模态框定位在网页中心位置。它在大多数浏览器上都有良好的支持:

<div class="table">
    <div class="cell">
        <img src="..." alt="..." />
        <span>It works now</span>
    </div>
</div>

还有CSS部分:

.table { display: table; }
.cell { display: table-cell; vertical-align: middle; }

请注意,您需要对图像和表格容器进行样式和大小调整,以使其按照您的要求工作。享受它。

2

div {
  display: flex;
  align-items: center;
}
<div>
  <img src="http://lorempixel.com/30/30/" alt="small img" />
  <span>It works.</span>
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接