【问题标题】:Restructure tables with media queries使用媒体查询重构表
【发布时间】:2017-05-18 22:10:40
【问题描述】:

我有一个四列两行的表格,如下:

<table>
<tr>
    <td> A </td>
    <td> B </td>
    <td> C </td>
    <td> D </td>
</tr>
<tr>
    <td> E </td>
    <td> F </td>
    <td> G </td>
    <td> H </td>
</tr>
</table>

使用media 查询,例如@media (max-width: 800px),我想重组这个表,改为有两列和四行,例如:

<table>
<tr>
    <td> A </td>
    <td> B </td>
</tr>
<tr>
    <td> C </td>
    <td> D </td>
</tr>
<tr>
    <td> E </td>
    <td> F </td>
</tr>
<tr>
    <td> G </td>
    <td> H </td>
</tr>
</table>

这可能吗? JavaScript 中的解决方案也是受欢迎的,如果我认为是这种情况,这不能仅使用 CSS 来完成。

【问题讨论】:

  • 如果您想将其作为表格执行,那么您将不得不使用 JS 或使用 @Paul 建议的伪元素。如果您可以使用 div,您可能会选择纯 CSS 选项。
  • 您可以使用 CSS 直观地获得相同的结果,但不应通过 CSS 触及物理底层表结构(假设可以) - 如果您无法控制生成的原始代码初始表看起来您可能需要创建一个基于脚本的“映射器”,如果您必须物理更改 DOM 中的结构,则将表“结构 A”转换为“结构 B”

标签: javascript html css media-queries


【解决方案1】:

纯 CSS

使用floats 和nth-child 更改外观。

td { float:left; display:inline-block; }
td:nth-child(3) {
  clear:both;
}

https://jsfiddle.net/hks5d6th/2/

JavaScript

遍历所有适用的列并使用模运算符来确定在哪里拆分为新行。

var table = document.getElementsByTagName('table')[0],
  columns = Array.prototype.slice.call(document.getElementsByTagName('td')),
  newTable = document.createElement('table'), html;

columns.forEach(function(next, idx) {
  if (idx % 2 === 0 || idx === 0) {
    html += '<tr>' + next.outerHTML;
    return;
  }
  html += next.outerHTML + '</tr>';
});

newTable.innerHTML = html;
table.replaceWith(newTable);

https://jsfiddle.net/hks5d6th/1/

【讨论】:

  • 非常感谢。我阅读了这两种方法,但我还不够先进,无法理解上面的 JS :') 不过 CSS 的效果很好!
  • 只有一个问题:纯 css 方法是否仍然适用于奇数列(即三列)?
  • 这仅适用于每行有四列。如果您希望它每三列工作一次,则每行需要六列,那么每个nth-child(4) 都有三列行...
  • 但是你能把一个三栏的表格改成一个两栏的表格吗?
猜你喜欢
  • 2013-09-30
  • 2014-09-27
  • 1970-01-01
  • 2018-11-30
  • 2022-01-25
  • 1970-01-01
  • 2020-10-10
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多