td:之前和垂直对齐:中间

Posted

技术标签:

【中文标题】td:之前和垂直对齐:中间【英文标题】:td:before and vertical-align:middle 【发布时间】:2014-07-27 08:42:29 【问题描述】:

我使用这种结构来获得带有方形单元格的表格:

table 
    width: 100%;
    table-layout: fixed;

td 
    text-align: center;
    vertical-align: middle;

td:before 
    content: '';
    padding-top: 100%;
    float: left;

但垂直对齐不适用于单元格的内容。 我该如何解决?

html 是:

<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
    </tr>
    <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
    </tr>
</table>

http://jsfiddle.net/FU84y/1/

【问题讨论】:

把你的代码放到 Fiddle 上供我们测试 您正在添加导致问题的 padding-top:100%。 【参考方案1】:

您需要删除 padding-top: 100%; 到 td:before DEMO

HTML

<table>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
    </tr>
    <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
    </tr>
</table>

CSS

table 
    width: 100%;
    table-layout: fixed;

td 
    text-align: center;
  border: 1px solid #ececec;
  height: 50px;

td:before 
    content: '';
    float: left;

【讨论】:

【参考方案2】:

替换

float: left;

display: inline-block;
vertical-align: middle;

见http://jsfiddle.net/8jPT5/2/

【讨论】:

很好,不知道:) 不错,但仅适用于单行内容。 fiddle.. 如果单元格包含其他元素则不起作用http://jsfiddle.net/eNFDS/ @Mr_Green - 正确。但这不是问题的一部分。我们可以添加对多行的支持,但我们需要添加一个包装器元素。见jsfiddle.net/8jPT5/4 @user3713915:我编辑了我的解决方案以考虑到这一点。检查。【参考方案3】:

你不需要删除填充,你需要给表格单元格一个高度。

table 
width: 100%;
table-layout: fixed;

td 
text-align: center;
vertical-align: middle;
height: 40px;


td:before 
content: '';
float: left;
padding:100%;

查看fiddle 示例

【讨论】:

以上是关于td:之前和垂直对齐:中间的主要内容,如果未能解决你的问题,请参考以下文章

垂直对齐 td 中具有可变高度的字体真棒图标

div内图像的垂直中间对齐? [复制]

为啥“垂直对齐:中间;”不适用于“最小高度”?

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

垂直对齐 li 元素中间的 div

使用CSS垂直和水平对齐(中间和中心)[重复]