如何在 TD 元素中垂直对齐图像和文本?

Posted

技术标签:

【中文标题】如何在 TD 元素中垂直对齐图像和文本?【英文标题】:How to align image and text vertically within TD element? 【发布时间】:2010-10-01 15:27:37 【问题描述】:
<td>
<img src="http://blog.garethjmsaunders.co.uk/wp-content/feed-icon-16x16.gif"/>
 My feed
 </td>

看起来是这样的:

(来源:garethjmsaunders.co.uk) 我的饲料

图标和文本垂直错位。图标位于表格单元格的顶部,文本位于底部。文本和图标都占用 16 个像素,但单元格仍然占用 19 个像素。如何对齐它们以节省这 3 个像素?

【问题讨论】:

感谢所有提供帮助的人。除了将图标和文本拆分为两个 TD-s 之外,我尝试了所有解决方案。只有背景图片解决方案有效。 这里有一个解决方案 => ***.com/a/57590933/2736742 【参考方案1】:

好吧,如果你选择背景图片的方式,那就很简单了:

background: url(feed.png) left center no-repeat

【讨论】:

+1,图片应该是背景图片,因为它比实际内容更具装饰性。【参考方案2】:

图像与文本的基线对齐,这不包括下降高度,即 g 或 y 等字母中的“勾号”。

如果要固定行/单元格的高度,可以添加 line-height 使其垂直居中。例如,假设你的单元格是 16px 高:

td.feed 
    line-height:16px;

另一种选择是将图标添加为背景图像,将 padding-left 添加到单元格:

td.feed 
    background: transparent url(/wp-content/feed-icon-16x16.gif) no-repeat left center;
    padding-left: 18px; /* width of feed icon plus 2px spacing */

第二个意味着您可以完全消除对表格的需求,现在有一个想法......

【讨论】:

我个人使用背景图片的方式,唯一的缺点是图片不可点击,很多用户尝试在文字之前点击图片。 如果你把背景图片放在 元素上,它将是可点击的。 啊。触摸。我从来没有想过。我通常在a周围做一个跨度。有趣。【参考方案3】:

其他说明图像不应成为内容的一部分且仅用于装饰的答案,这是值得商榷的。我确实认为您应该为您的图像添加一个空的alt 属性,以便屏幕阅读器可以在您选择保留当前方法时忽略该图像。

vertical-align 属性是您需要在此处使用的属性,但您要使用的是text-bottom。我还假设您希望这是一个链接,所以这里有一个完整的代码示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>garethjmsaunders.co.uk</title>
    <style type="text/css">
    a  text-decoration: none; 
    a img  border: 0; vertical-align: text-bottom; 
    </style>
  </head>
<body>
<table>
<tr>
<td>
  <a href="" title="garethjmsaunders.co.uk rss feed">
    <img  src="http://blog.garethjmsaunders.co.uk/wp-content/feed-icon-16x16.gif" />
    My feed
  </a>
</td>
</tr>
</table>
</body>
</html>

如果这仍然不理想,您可以试验line-heightvertical-align 的其他值,看看哪种最适合您。

【讨论】:

【参考方案4】:

将其设为背景图片有什么问题?

.feed 
  background: transparent url("http://blog.garethjmsaunders.co.uk/wp-content/feed-icon-16x16.gif") no-repeat scroll left center;
  padding-left: 16px;

【讨论】:

【参考方案5】:

试试这个:

<td>
   <img src="http://blog.garethjmsaunders.co.uk/wp-content/feed-icon-16x16.gif"/>
   <span class="feedTxt">My feed</span>
 </td>

 .feedTxt  line-height: 20px;  /* Or whatever the height of the image is.  Adjust as needed. */

【讨论】:

【参考方案6】:

只需在 IMG 标签上尝试“vertical-align: middle”,之后您还可以为 TD 设置填充

【讨论】:

【参考方案7】:

我尝试了背景图片的方法,但没有这么喜欢它......

在 CSS 中...

.iconLabel 
    position: relative;
    top: -6px;
    padding-left: 8px;

在页面中...

<td style="text-align:center;">
    <a href="overview.cfm"
        ><img  src="Globe.png" 
        align="middle" border="0"  
        ><span class="iconLabel">Overview</span
    ></a> 
</td>
使用 "top" 属性来上下移动文本/标签。 使用 padding 属性来改变图标和文本/标签之间的水平间距。 您应该在您关心的所有浏览器上检查它,因为它们的呈现方式可能会略有不同。

【讨论】:

【参考方案8】:

我会将这两个元素(图像和文本)放在各自单独的表格单元格中。您可以嵌套另一个表。这是一个很好的起点。然后你可以玩一下填充等来调整。

<td>
<table><tr style="vertical-align:top;"><td><img src="path_here" /></td><td>my feed</td></tr></table>
</td>

【讨论】:

这种表格的嵌套会降低页面的语义价值。由于这是布局问题,而不是内容或语义问题,因此应使用基于布局的解决方案来调整位置,或者使用 CSS,或者使用 javascript 更改 DOM。【参考方案9】:

你可以在&lt;img&gt; 标签上做position: relative; top: 3px;。您也可以在&lt;td&gt; 标签上尝试vertical-align: middle;,但我认为它不会正常工作,因为我很确定我以前遇到过这种情况。您也可以将它们放在单独的 &lt;td&gt; 标记中,但这是一种禁忌。

【讨论】:

如果您已经在使用一张桌子,那为什么要禁止呢?你至少会得到自动垂直居中... 嗯,我不知道他的上下文,桌子仍然被正确使用的可能性很小,但是如果你要拆分它,它会变得有点太 2002为了我。这就是我说“有点”的原因——我个人认为是这样,但围绕这些部分有很多 CSS 纯粹主义者。 我没有投反对票,其他人投了反对票。我得到了两次投票,大声笑。这里的人有时很奇怪。 这可能是因为有人问了一个关于 HTML 的问题,而你们两个可能应该回答。有点像我回答一些 20 年来从未接触过的 Fortran 问题(该死,有那么长吗?)。 修改 HTML 会改变页面的语义。由于这是布局问题,而不是内容或语义问题,因此应使用基于布局的解决方案调整位置,或者使用 CSS,或者使用 javascript 更改 DOM。【参考方案10】:

您可以在 td 内添加一个表格,其中包含一行和两个 tds

    <td>
        <table><tr>
            <td><img src="image/myimage.gif" /></td>
            <td>My text</td>
        </tr></table>
    </td>

【讨论】:

以上是关于如何在 TD 元素中垂直对齐图像和文本?的主要内容,如果未能解决你的问题,请参考以下文章

使用flexbox垂直对齐td元素中的元素[重复]

如何左对齐和垂直对齐标题中的图像并将文本水平保持在div的中心[重复]

如何正确对齐表格中的图标和文本?

如何在表格单元格的垂直中心对齐 CSS 箭头?

如何垂直对齐div的文本和图像中间? [复制]

如何垂直对齐嵌套在无序列表中的锚元素内的文本