3

我正在开始一个新项目,并且我<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>

使用此适用的 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 中的规定应用垂直对齐。

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

我尝试过的事情

<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;
}

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

4

1 回答 1

8

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

http://jsfiddle.net/LRMrv/

于 2013-08-01T20:01:47.297 回答