【发布时间】:2019-10-06 00:34:52
【问题描述】:
我想在不使用 JS 或使用其他表格的情况下转置 HTML 表格。
我有一张表格,里面有一个时间表,我想在移动屏幕上折叠成单列(我需要 this 变成 this)。
现在我有两个表格,并且正在切换通过媒体查询显示哪个表格(以及按照in this article 的解释将行折叠到单元格),但我想要一个更好的解决方案,因为每次编辑都需要更改两个表格.
我可以在不使用 JavaScript 的情况下做到这一点吗?
.styled-table {
margin: 0 auto;
padding: 0;
width: 100%;
}
.styled-table thead, .styled-table tbody {
text-align: center;
}
.styled-table th {
font-weight: normal;
background-color: #C00;
color: white;
}
.styled-table tr:nth-child(even) {
background: #CCC0C0;
}
.styled-table th {
border-top: 1px solid #C00;
border-bottom: 1px solid #C00;
}
.styled-table th:first-child {
border-left: 1px solid #C00;
}
.styled-table th:last-child {
border-right: 1px solid #C00;
}
@media screen and (min-width: 769px) {
.styled-table td + td,
.styled-table th + th,
.styled-table th + td {
border-left: 1px solid black;
}
.display-sm {
display: none;
}
}
@media screen and (max-width: 768px) {
/* Force table to not be like tables anymore */
table.styled-table,
.styled-table thead,
.styled-table tbody,
.styled-table th,
.styled-table td,
.styled-table tr {
display: block;
}
/* Hide table headers (but not display: none;, for accessibility) */
.styled-table thead tr {
position: absolute;
top: -9999px;
left: -9999px;
}
.styled-table tr {
border-bottom: 1px solid black;
}
.styled-table td {
/* Behave like a "row" */
border: none;
border-bottom: 1px solid #eee;
position: relative;
padding: 5px;
padding-left: 50%;
}
.styled-table td:before {
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 100%;
content: attr(data-mobile-label);
font-weight: normal;
font-style: normal;
background-color: #C00;
color: white;
border-right: 1px solid black;
}
.styled-table th {
border-bottom: 1px solid black;
}
.hide-sm {
display: none !important;
}
}
<table class="styled-table hide-sm">
<thead>
<tr>
<th>Time/Day</th>
<th>Mon</th>
<th>Tues</th>
<th>Wed</th>
<th>Thurs</th>
<th>Fri</th>
<th>Sat</th>
</tr>
</thead>
<tbody>
<tr>
<th>
8:45 AM
to
1:00 PM
</th>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>
1:00 PM
to
5:00 PM
</th>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>
5:00 PM
to
9:00 PM
</th>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
<td>
Name <br>
Name <br>
Name <br>
</td>
</tr>
</tbody>
</table>
<table class="styled-table display-sm">
<thead>
<tr>
<th>Time/Day</th>
<th>Mon</th>
<th>Tues</th>
<th>Wed</th>
<th>Thurs</th>
<th>Fri</th>
<th>Sat</th>
</tr>
</thead>
<tbody>
<tr>
<th>Mon</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>Tues</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>Wed</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>Thurs</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>Fri</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
<tr>
<th>Sat</th>
<td data-mobile-label="8:45 AM to 1:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="1:00 PM to 5:00 PM">
Name <br>
Name <br>
Name <br>
</td>
<td data-mobile-label="5:00 PM to 9:00 PM">
Name <br>
Name <br>
Name <br>
</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
可能有可能或建议,但您不分享任何 html 代码或 css 或您的任何尝试。所以,没有什么可开始考虑帮助你的一些或其他方式。
-
用codepen更新了问题
-
好的,数据属性有一些技巧,与 display:contents 混合,你可以做类似的事情:codepen.io/gc-nomade/pen/abbbddW 我不会回答这个问题,除非
display:contents不是问题对你来说,你也可以过滤支持,然后触发媒体查询:codepen.io/gc-nomade/pen/VwwweeX(相同但仅当 @supports 匹配)如果不支持 display:contents,则表格保持原样 -
看起来很完美!
display: contents支持应该没问题,因为我们不必支持旧浏览器。谢谢!
标签: html css responsive-design responsive