使表格单元格正方形

时间:2014-04-03 10:56:57

标签: css css3 responsive-design css-shapes aspect-ratio

如何确保表格的每个单元格在不使用固定尺寸的情况下变为方形?当他们改变宽度时,响应

table {
  width: 90%;
}
td {
  width: 30%;
}
tr {
  /** what should go here? **/
}
<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>

3 个答案:

答案 0 :(得分:47)

您可以使用以下所述的技术:Grid of responsive squares

使用表格和方格表单元格改编为您的用例,它看起来像这样:

&#13;
&#13;
table {
  width: 90%;
}
td {
  width: 33.33%;
  position: relative;
}
td:after {
  content: '';
  display: block;
  margin-top: 100%;
}
td .content {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: gold;
}
&#13;
<table>
  <tr>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
  </tr>
  <tr>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
  </tr>
  <tr>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
    <td><div class="content">1</div></td>
  </tr>
<table>
&#13;
&#13;
&#13;

<强> FIDDLE demo

答案 1 :(得分:5)

这是我的代码:http://jsfiddle.net/vRLBY/1/

关键是使用:

td { width: 33%; padding-bottom: 33%; height: 0; }
td div { position: absolute }

因为padding-bottom是根据宽度定义的。更多信息:http://absolide.tumblr.com/post/7317210512/full-css-fluid-squares

注意:之前我发布了一个无法运行的代码(请参阅here)。感谢@ web-tiki报告错误; - )

答案 2 :(得分:0)

如果某人正在寻找不需要固定的width属性(即使是百分比)的解决方案,这就是我根据上述答案和经过批准的答案中的link得出的结论:

td {
    height: 0;

    &:after, &:before {
        content: '';

        display: block;
        padding-bottom: calc(50% - 0.5em);
    }
}

有点la脚,但用一块石头杀死了两只鸟:

  • 搞定了
  • 使内容垂直对齐