【问题标题】:css: display column as row in mobile viewcss:在移动视图中将列显示为行
【发布时间】:2021-08-24 07:01:29
【问题描述】:

当有人在移动设备中打开页面(小于 480 像素)时,我想将表格列显示为行。

这是我的表结构。

table, th, td {
  border: 1px solid black;
}

table {
  border-collapse: collapse;
}

@media(max-width: 480px) {
  .main td {
    display: table-row;
  }
}
<p>
In desktop View
</p>
<table class="main">
<tr>
  <td>R1 Col 1</td>
  <td>R1 Col 2</td>
</tr>
<tr>
  <td>R2 Col 1</td>
  <td>R2 Col 2</td>
</tr>

<tr>
  <td>R3 Col 1</td>
  <td>R3 Col 2</td>
</tr>
</table>

我尝试过使用 css 之类的。

@media(max-width: 480px) {
  .main td {
    display: table-row;
  }
}

但它不起作用。在移动视图中,我想要这样的输出,第二列应显示在第一列下方。

注意:我无法将表格更改为 div。

这是我的预期输出:

【问题讨论】:

  • 您可以使用引导程序来代替table
  • 您不能通过 css 将 td 从一个 tr 移动到另一个,您可以使用 2 个表,其中 1 个用于移动视图,1 个用于桌面。并使用display:block/none;
  • @SureshPonnukalai:我只能选择使用表格并应用一些 css。
  • 使用您当前的 html 几乎是不可能的(对于绝对位置的一些奇怪的东西,这可能是可能的,但在这种情况下我完全不建议这样做)。您需要的是从每行中取出第二个 td 并将其移到下方。仅使用 html 和 css 是不可能的。您需要更改 html 结构并使用 flexbox(或 cssgrid)。或者重新考虑需求。或者可能使用 javascript。
  • tr {display:contents} 将允许每个单元格的样式设置为 tr 父级上的兄弟、flex 或 grid 将允许使用 order 交换它们的位置。 CSS 可以在这里为这样一个简单的表格提供帮助。

标签: html css css-selectors


【解决方案1】:

您需要通过重置显示来破坏表格布局。

grid 或 flex 可以让你重新排列你的元素

例子

table,
th,
td {
  border: 1px solid black;
}

table {
  border-collapse: collapse;
}

@media(max-width: 480px) {
  .main tbody {
    display: grid; 
  }
  .main tr {
    display: contents;
    border:solid red
  }
  .main td {
    display: block;
  }
  .main tr td + td {
    order: 1;
  }
}
<p>
  In desktop View
</p>
<table class="main">
  <tr>
    <td>R1 Col 1</td>
    <td>R1 Col 2</td>
  </tr>
  <tr>
    <td>R2 Col 1</td>
    <td>R2 Col 2</td>
  </tr>

  <tr>
    <td>R3 Col 1</td>
    <td>R3 Col 2</td>
  </tr>
</table>

解释:

浏览器将生成一个tbody 包装器,您可以从一个以上重置显示并保持&lt;table&gt;元素上的表格显示行为,使其不断缩小。让我们将 tbody 设为网格(display:grid 的默认值是绘制单列)。

tr 妨碍了,display:contents 将虚拟删除它们,因此单元格 (td) 可以是 (实际上) tbody 的直接子级,并通过 . .order.您可以在这里通过tr &gt;:nth-child(x){order:X;} 给每个单元格下订单。

资源:

显示contents

这些元素本身不会产生特定的框。它们被它们的伪盒子和它们的子盒子所取代。请注意,CSS Display Level 3 规范定义了内容值应如何影响“不寻常的元素”——不是纯粹由 CSS 框概念呈现的元素,例如替换元素。

【讨论】:

  • 非常感谢。工作正常。
【解决方案2】:

如果不能改变表结构,那么很难达到预期的效果。但是如果它是固定的行和列,那么你可以使用一些 CSS 技巧来带来结果。

可以缩小浏览器宽度,看下面的sn-p。

 @media(max-width: 480px) {
   .main td{
     margin-top:63px
   }
   .main td:last-child {    
     position:absolute;
     left:8px;    
   }
}

table, th, td {
  border: 1px solid black;
}

table {
  border-collapse: collapse;
}

@media(max-width: 480px) {
  .main td{
    margin-top:63px
  }
  .main td:last-child {    
    position:absolute;
    left:8px;    
  }
}
<p>
In desktop View
</p>
<table class="main">
  <tr>
    <td>R1 Col 1</td>
    <td>R1 Col 2</td>
  </tr>
  <tr>
    <td>R2 Col 1</td>
    <td>R2 Col 2</td>
  </tr>

  <tr>
    <td>R3 Col 1</td>
    <td>R3 Col 2</td>
  </tr>
</table>

JS FIDDLE DEMO

【讨论】:

    【解决方案3】:

    将显示块添加到 td 和 tr 将迫使它们表现得像块级元素,试试它是否适合你

    table, th, td {
      border: 1px solid black;
    }
    
    table {
      border-collapse: collapse;
    }
    
    @media(max-width: 480px) {
      .main tr, .main td {
        display: block;
      }
    }
    <table class="main">
    <tr>
      <td>R1 Col 1</td>
      <td>R1 Col 2</td>
    </tr>
    <tr>
      <td>R2 Col 1</td>
      <td>R2 Col 2</td>
    </tr>
    
    <tr>
      <td>R3 Col 1</td>
      <td>R3 Col 2</td>
    </tr>
    </table>

    【讨论】:

    • 这不是预期的。请查看相关图片
    • 哦,我没看到图片中的编号,这样不行
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2014-06-01
    • 2019-10-17
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多