html – 为什么“vertical-align middle”不能与这个表格单元格一起使用?

我正在开始一个新项目,我在< td>中有垂直对齐的内容.之前的细胞,所以这个错误有点出乎意料.此外,我所做的任何研究(我之前也做过)都会产生我期望的信息(不能对块元素应用垂直对齐,应用display:table-cell;等).然而:

我的简单html文档中有以下表格:

<table id="headingTable">
    <tr>
        <td id="dateHolder">2013-07-24 15:03:18</td>
        <td><h2>City of Okmulgee Authorized Leave Request</h2></td>
        <td><button type="button" class="printBtn">Print Form</button></td>
    </tr>
</table>

使用此适用的CSS:

table#headingTable
{
    width: 100%;
}

td
{
    vertical-align: middle;
}

h2
{
    font-family: Tahoma, Geneva, sans-serif;
    text-align: center;
}

.printBtn
{
    white-space: nowrap;
    font-family: "Segoe UI", Verdana, Helvetica, Sans-Serif;
    font-size: 1em;
    border-width: 3px;
    border-color: #959595;
    cursor: pointer;
}

#dateHolder
{
    float: left;
}

< td id =“dateHolder”>单元格应显示中间的日期和时间,与该行的下两个表格单元格对齐,但您可以在此处看到它不是:

我想这个问题在我的身下,但显然不是,因为我被引导相信只要它是一个内联元素,或者至少是一个带有display:table-cell;的元素,但特别是如果它是一个表格单元格(即一个< td>元素),然后应该按照CSS中的规定应用vertical-align.

我确信我可以得到一些工作,(使用定位,行高调整,填充等)但事实上我似乎无法理解为什么它不适用于我设置的当前规则,只是为了我的教育而回答问题.

我尝试过的事情

使用< span>在< td id =“dateHolder”>内元素并使用CSS定位,而不仅仅是文本节点.

将高度(通过px)设置为所有< td> < tr>中的元素行.

调整所有< td>的行高. < tr>中的元素行.

你可能想知道的事情:

我绝对没有内联CSS.所有CSS都在同一个外部文档中.

如果你觉得你需要查看它,这里是整个CSS文件(这个网站仍然很新,所以还有很多):

body
{
    width: 100%;
    margin: auto;
    background-color: #464646;
}

div#mainWrapper
{
    background-color: #dfdfdf;
    width: 900px;
    border-style: ridge;
    border-width: 5px;
    border-color: #808080;
    margin: auto;
    padding: 10px 20px 0px;
    margin-top: 8px;
    text-align: center;
    padding-bottom: 20px;
}

table#headingTable
{
    width: 100%;
}

td
{
    vertical-align: middle;
}

h2
{
    font-family: Tahoma, Geneva, sans-serif;
    text-align: center;
}

table#mainTable
{
    width: 95%;
    margin: auto;
    margin-top: 40px;
    border-collapse: collapse;
    border: 2px solid #000;
}

td.leaveSection
{
    width: 50%;
    margin: auto;
    white-space: nowrap;
}

.printBtn
{
    white-space: nowrap;
    font-family: "Segoe UI", Verdana, Helvetica, Sans-Serif;
    font-size: 1em;
    border-width: 3px;
    border-color: #959595;
    cursor: pointer;
}

#dateHolder
{
    float: left;
}

div.bigLblWrapper
{
    position: relative;
    left: -50px;
    display: inline-block;
    text-align: right;
    width: 80%;
}

label.bigLbl
{
    font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
    font-size: 15px;
    font-weight: bold;
}

input.leaveTypeRadio
{
    position: relative;
    left: -35px;
}

input[readonly]
{
    background-color: #c6ebff;
}

最后,我只想强调,我并不关心如何做到这一点的解决方案(再次,我确信我可以做一些工作),因为我感兴趣的解释是什么让我无法做到根据我设置的规则建立我想要的样式更改.

最佳答案
你正在浮动< td>在CSS的最后一个规则中 – 这将自动生成元素块级别,而vertical-align将无法工作,因为它仅适用于内联格式化上下文中的元素.您应该使用text-align来对齐< td>内容而不是浮动#dateHolder

http://jsfiddle.net/LRMrv/

转载注明原文:html – 为什么“vertical-align middle”不能与这个表格单元格一起使用? - 代码日志