表格单元格中的垂直对齐以及浮动 div

Posted

技术标签:

【中文标题】表格单元格中的垂直对齐以及浮动 div【英文标题】:Vertical alignment in table-cell together with floating div 【发布时间】:2012-06-08 20:34:19 【问题描述】:

我有以下(示例)html 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>TH-Alignment</title>
    <style type="text/css">
        th 
            border: 1px solid #333;
            vertical-align: middle;
        
        div.sb 
            float: right;
            width: 4px;
            height: 26px;
            background-color: #999;
        
    </style>
  </head>
  <body>
    <table cellspacing="0" cellpadding="0">
        <colgroup>
            <col  />
            <col  />
        </colgroup>
        <thead>
            <tr>
                <th>
                    <div class="sb"></div>
                    <div>Heading 1</div>
                </th>
                <th>
                    <div>Heading 2</div>
                </th>
            </tr>
        </thead>
    </table>
  </body>
</html>

第二列的 div 是垂直居中的,第一列的 div 不是 (始终位于表格单元格的顶部)。为什么浮动的div里面 第一列会影响表格单元格中另一个 div 的垂直对齐方式吗?

提前致谢。

【问题讨论】:

+1 好问题。对您的代码进行了一些扩展(th 上的一些高度,div 上的一些显示,以及一些用于调试的边框),请参阅this fiddle。似乎第一个 中的内容是 v-aligned,但第一个 div 出于某种原因位于行首... 我认为答案在于in this W3 table layout spec。如果没有人超过我,我可能会在有时间的时候尝试想出一个真正的答案和演示。 我想知道&lt;div&gt;是否允许在&lt;th&gt;中读取w3.org/TR/html4/struct/tables.html#h-11.2.6 【参考方案1】:

如果您扩大th 的高度,您会注意到元素仍然垂直对齐到中间。

看到这个Fiddle Example!

这里的问题是line-height

由于您在第一个 th 上有多个元素,并且其中一个元素定义了 height,因此所有元素都与 th 的中间对齐,但在它们之间,它们是对齐的到它们当前line-height 的高度,该高度未定义,并且由font-size 或父元素定义计算。

由于您的浮动元素具有26pxheight,因此它会向下增长,但是没有定义line-height 文本的元素因此height 等于内部文本提供的font-size ,因此永远不会到达其浮动兄弟的中间。

要解决此问题,您需要使用:

line-height: 26px;

line-height 设置为浮动元素的height,从而将文本与浮动元素的中间对齐并解决垂直对齐的视觉问题。 p>


看看这个 Fiddle Example 和那个工作解决方案


注意: 一个元素并没有像您怀疑的那样影响另一个元素,它们只是没有足够的声明来使它们之间保持一致!

默认情况下,文本和图像与baseline 对齐,如果没有给出line-height,则baselinefont-size

【讨论】:

+1 据我所知,这应该是公认的答案:D

以上是关于表格单元格中的垂直对齐以及浮动 div的主要内容,如果未能解决你的问题,请参考以下文章

表格单元格中旋转文本的垂直对齐方式

如何垂直对齐表格单元格中的图像和文本?

为啥不垂直对齐:中间与表格单元格中的输入元素一起使用?

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

div表格单元格垂直对齐不起作用

CSS3 显示:表格单元格和浮动?