如何在html css中制作响应式表格[复制]

How to make responsive tables in html css [duplicate]

提问人:James 提问时间:11/15/2023 更新时间:11/18/2023 访问量:91

问:

我正在尝试以一种我认为不可能的方式响应我正在处理的表数据,除非这里的其他人认为是?

基本上,我有一个表格,它的最大尺寸显示 TR 中的 3 个 TD 元素。当向下滚动到最小尺寸时,TR 仅显示 2 个 TD 元素,而之前的第三个 TD 显示在 2 下方。像这样的东西(或多或少的视觉表示):

最大宽度:

<table>
    <tbody>
        <tr> 
            <td>First table data</td>  <td>Second table data</td>   <td>Third table data</td> 
            <td>Fourth table data</td> <td>Fifth table data</td>   <td>Sixth table data</td> 
        </tr>
    </tbody>
<table>

最小宽度:

<table>
    <tbody>
        <tr> 
            <td>First table data</td>  <td>Second table data</td> 
            <td>Third table data</td>  <td>Fourth table data</td> 
            <td>Fifth table data</td>   <td>Sixth table data</td> 
        </tr>
    </tbody>
<table>

这甚至可能吗?如果是这样,如何开始?这需要jQuery吗?

jQuery CSS HTML表 响应

评论

1赞 Samuel Caillerie 11/15/2023
如果您不拘泥于 HTML 表格,我建议您切换到带有 flex 元素的设计。例如,请参阅 css-tricks.com/snippets/css/a-guide-to-flexbox

答:

0赞 Temps 11/15/2023 #1

由于表格的固有结构,使表格具有响应性可能有点挑战性,但通过一些 CSS 技巧绝对可以实现。您可以使用媒体查询根据屏幕宽度更改表格布局。

下面是如何创建响应式表的示例:

.responsive-table {
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    display: block;
}

.responsive-table tbody,
.responsive-table tr,
.responsive-table td {
    display: block;
    width: 100%;
    box-sizing: border-box;
}

@media screen and (min-width: 768px) {
    .responsive-table tr {
        display: table-row;
    }

    .responsive-table td {
        display: table-cell;
        width: auto;
    }
}
<table class="responsive-table">
    <tbody>
        <tr> 
            <td>First table data</td>  
            <td>Second table data</td>   
            <td>Third table data</td> 
            <td>Fourth table data</td> 
            <td>Fifth table data</td>   
            <td>Sixth table data</td> 
        </tr>
    </tbody>
</table>

1赞 Ishtiaq Ahmed 11/15/2023 #2

在 HTML 和 CSS 中创建响应式表格涉及使用媒体查询和应用适应不同屏幕尺寸的样式。请看下面的代码:

table {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 20px;
}

th,
td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

th {
  background-color: #f2f2f2;
}


/* Responsive Styles */

@media (max-width: 600px) {
  table {
    border: 0;
  }
  th,
  td {
    border: 0;
    display: block;
    width: 100%;
    box-sizing: border-box;
  }
  th {
    text-align: center;
  }
}
<h2>Responsive Table</h2>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Email</th>
      <th>Phone</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>John Doe</td>
      <td>[email protected]</td>
      <td>555-1234</td>
    </tr>
    <tr>
      <td>Jane Smith</td>
      <td>[email protected]</td>
      <td>555-5678</td>
    </tr>
  </tbody>
</table>

评论

0赞 James 11/18/2023
我想要的完美。谢谢@IshtiaqAhmed
0赞 Daniel Beck 11/15/2023 #3

表格是自动“响应”的,因为它们会调整单元格的大小以适合容器 - 但不会达到您希望在没有足够的空间时将单元格换行到下一行的程度。

所需的布局与弹性框布局相比更类似于表格。

您可以强制表格使用 flex 布局而不是其常规表格规则:

table {display:flex}
tr {display: inline-flex; flex-wrap: wrap}
td {padding: 0.5em}
<table>
    <tbody>
        <tr> 
            <td>First table data</td>  <td>Second table data</td>   <td>Third table data</td> 
            <td>Fourth table data</td> <td>Fifth table data</td>   <td>Sixth table data</td> 
        </tr>
    </tbody>
<table>

...但为了避免让下一个开发人员接触到您的代码,如果可能的话,最好将 HTML 转换为使用 div 或 spans 而不是 table 标签。