我有一个看起来有点像这样的HTML
<html><body><table>
<thead><tr><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th></tr></thead>
<tbody>
<tr><td>1A</td><td>1B</td><td>1C</td><td>1D</td><td>1E</td></tr>
<tr><td>2A</td><td>2B</td><td>2C</td><td>2D</td><td>2E</td></tr>
<tr><td>3A</td><td>3B</td><td>3C</td><td>3D</td><td>3E</td></tr>
</tbody>
</table></body></html>
每行表示一个对象,列是其属性.实际上,单元格值相当长--有时甚至是20-30个字符.它在大多数设备上呈现得很好,但在较小的手机上可能会出现问题.我知道我可以在狭窄的设备上隐藏某些列,但在这种情况下感觉不正确.目前我的桌面上有x-overflow: scroll
个,但我更愿意有一些CSS,使表格在狭窄的设备上呈现得更像这样:
A: 1A
B: 1B
C: 1C
D: 1D
E: 1E
-----
A: 2A
B: 2B
C: 2C
D: 2D
E: 2E
-----
(etc)
我了解如何测试设备宽度,因此,出于这个问题的目的,让我们假设我想无条件地执行此操作.稍微更改一下HTML标记是可以的,例如添加额外的类或属性,尽管我希望使用<table>
元素,每个逻辑行有一个<tr>
.这是为了向后兼容,因为我知道有相当多的用户刮网站(尽管存在一个更干净的API).由于内部政治的原因,如果可能的话,我倾向于避免需要使用Java脚本的解决方案(而且无论如何,如果需要的话,我知道如何编写JS解决方案).
我可以用这个来完成一部分,但我不确定如何从硬编码为'X'的字段名称开始:
thead { display: none; }
table, tr, td { display: block; }
tr + tr { border-top: thin solid black; }
td::before { content: "X:"; display: inline-block; width: 2em; }
我见过很多网站做这种事情,但目前我很难找到一个用css做这件事的网站.这似乎应该是一个经常被问到的问题,但我正在努力知道要搜索哪些术语,所以可能会遗漏一些好的解释,无论是这里还是其他地方.