为什么"垂直对齐中间"不能与此表格单元一起使用?

Voi*_*ing 3 html css

我正在开始一个新项目,之前我在<td>单元格中有垂直对齐的内容,所以这个错误有点出乎意料.此外,我所做的任何研究(我之前也做过)都会产生我期望的信息(不能应用于vertical-align块元素,应用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>
Run Code Online (Sandbox Code Playgroud)

使用此适用的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;
}
Run Code Online (Sandbox Code Playgroud)

<td id="dateHolder">电池显示在中间的日期和时间,连下两个表细胞该行排列,但你可以在这里看到,它不会:

在此输入图像描述

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

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

我尝试过的事情

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

为行中的px所有<td>元素设置高度(by )<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;
}
Run Code Online (Sandbox Code Playgroud)

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

adr*_*ift 8

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

http://jsfiddle.net/LRMrv/

  • OMG [在这里插入哭泣的表情]我以为我已经废除了这个规则...... (4认同)