【问题标题】:Table responsive layout CSS / HTML表格响应式布局 CSS / HTML
【发布时间】:2014-11-05 02:27:19
【问题描述】:

我还没有找到确切的例子,所以如果你有,请给我一个链接。我在上一个问题中也犯了一个错误,所以我给出了正确的答案,但我仍然需要帮助!

我想让 HTML 中的表格响应如下 - 是否可以使用 CSS?

<table>
   <thead>
      <tr>
         <td>HEADER Data 1</td>
         <td>HEADER Data 2</td>
         <td>HEADER Data 3</td>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>Row 1 Data 1</td>
         <td>Row 1 Data 2</td>
         <td>Row 1 Data 3</td>
      </tr>
      <tr>
         <td>Row 2 Data 1</td>
         <td>Row 2 Data 2</td>
         <td>Row 2 Data 3</td>
      </tr>
      <tr>
         <td>Row 3 Data 1</td>
         <td>Row 3 Data 2</td>
         <td>Row 3 Data 3</td>
      </tr>
   </tbody>
</table>

在小屏幕上,我希望表格具有响应性,以便按如下方式放置数据:

来自:

HEADER Data 1    HEADER Data 2   HEADER Data 3
Row 1 Data 1     Row 1 Data 2    Row 1 Data 3
Row 2 Data 1     Row 2 Data 2    Row 2 Data 3
Row 3 Data 1     Row 3 Data 2    Row 3 Data 3

对此:

HEADER Data 1
Row 1 Data 1
Row 2 Data 1
Row 3 Data 1

HEADER Data 2
Row 1 Data 2
Row 2 Data 2
Row 3 Data 2

HEADER Data 3
Row 1 Data 3
Row 2 Data 3
Row 3 Data 3

【问题讨论】:

  • 我猜想 要么非常困难,要么几乎不可能(??),您应该使用
    来使您的设计灵活且响应迅速。
  • 嗨@Thangadurai 感谢您的回复。这也是我的想法,这就是为什么我想问问集体 SO 大脑。我无法更改布局,因为它是由模板系统构建的
  • 您能否提供一个数据示例,其中将表拆分为列块应该是用户友好的?在默认数据表中,行属于一起。为什么必须首先在一个块中显示所有姓氏,然后在第二个块中显示所有名字,然后在第三个块中显示所有生日?
  • 嗨@Axel Richter,这不是数据在重新格式化时是否有意义的问题,而是我试图实现的布局更改的问题。我正在使用的 CMS 中的“数据”实际上是一堆带有标签的输入字段。问题是能否实现“重新格式化”?

标签: html css responsive-design html-table


【解决方案1】:

使用 CSS 无法将表格拆分为其列的块。因此需要Javascript。像这样:

<body>
<h1>Test</h1>

<table id="responsiveTable">
   <thead>
      <tr>
         <td>HEADER Data 1</td>
         <td>HEADER Data 2</td>
         <td>HEADER Data 3</td>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>Row 1 Data 1</td>
         <td>Row 1 Data 2</td>
         <td>Row 1 Data 3</td>
      </tr>
      <tr>
         <td>Row 2 Data 1</td>
         <td>Row 2 Data 2</td>
         <td>Row 2 Data 3</td>
      </tr>
      <tr>
         <td>Row 3 Data 1</td>
         <td>Row 3 Data 2</td>
         <td>Row 3 Data 3</td>
      </tr>
   </tbody>
</table>

<hr>

<script>
var table = document.getElementById("responsiveTable");

var changeTable = function(e) {
 if (document.body.clientWidth < 400) {
  if (document.getElementById("responsiveTable")) {
   var tr = null;
   var td = null;
   var cols = [];

   for ( i=0; i<table.getElementsByTagName("tr").length; i++ ) {
    tr = table.getElementsByTagName("tr")[i];
    for ( j=0; j<tr.getElementsByTagName("td").length; j++) {
     td = tr.getElementsByTagName("td")[j];
     if(cols[j]==null) cols[j]=[];
     cols[j][i] = td;
    }
   }

   var divWrapper = document.createElement("div");
   divWrapper.id = "divWrapper";
   var divCol = null;
   var divData = null;

   for ( j=0; j<cols.length; j++ ) {
    divCol = document.createElement("div");
    for ( i=0; i<cols[j].length; i++ ) {
     divData = document.createElement("div");
     divData.innerHTML = cols[j][i].innerHTML;
     divCol.appendChild(divData);
    }
    divWrapper.appendChild(divCol);
   }
   document.body.replaceChild(divWrapper, table);
  }
 } else if (document.getElementById("divWrapper")) {
   document.body.replaceChild(table, document.getElementById("divWrapper"));
 }
}

window.addEventListener("load", changeTable, true);
window.addEventListener("resize", changeTable, true);

</script>

</body>

小提琴:http://jsfiddle.net/ch3sqx8j/

问候

阿克塞尔

【讨论】:

  • 嘿@Axel Richter,这不是我希望的答案(对使用 CSS 很感兴趣),但是非常好的帮助,非常感谢!
  • 作为CSS的downvoting绝对应该是这个的控制器,而不是js
  • @treyBake:然后请添加一个答案,说明如何仅使用 CSS 来解决该要求。祝你好运。
  • @AxelRichter o.O 仅使用 css 制作响应式表格?这就像..今天的标准..
  • @treyBake:您已经看到这里的要求是将表拆分为列的块?如前所述,请发布答案。我很好奇。
猜你喜欢
  • 2014-01-08
  • 2018-02-06
  • 2023-01-04
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2015-11-27
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多