html - 为什么在顶行和中间行使用 rowspan 时中间行会消失?
问题描述
当我尝试显示以下信息时:
AB
AF
GF
并折叠包含公共数据的单元格,中间行消失,我得到:
AB
GF
在所有情况下,指定的单元格数似乎都是 6。
“完全地”:
3 <tr>s
2 <td>s per <tr>
“行跨度优先”:
3 <tr>
1st <tr> <td rowspan='2'> <td>,
2nd <tr> 1st cell covered by previous <td rowspan='2'> <td>
3rd <tr> 2 <td>s
“第一和第二行跨度”:
3 <tr>s
1st <tr> <td rowspan='2'> <td>
2nd <tr> 1st cell covered by previous <td rowspan='2'> <td rowspan='2'>
3rd <tr> <td> 2nd cell covered by previous <td rowspan='2'>
HTML 和 CSS:
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<title>test rowspan</title>
<style>
table.b, table.b td, table.b th {
border: 1px solid black;
}
</style>
</head>
<body>
<p>This passes NU HTML Checker, so the syntax seems to be correct</p>
<p>completely specified</p>
<table class='b'>
<tbody>
<tr><td>A</td><td>B</td></tr>
<tr><td>A</td><td>F</td></tr>
<tr><td>G</td><td>F</td></tr>
</tbody>
</table>
<p>with rowspan first line only</p>
<table class='b'>
<tbody>
<tr><td rowspan='2'>A</td><td>B</td></tr>
<tr><td>F</td></tr>
<tr><td>G</td><td>F</td></tr>
</tbody>
</table>
<p>with rowspan first & second lines combining F, middle row disappears</p>
<table class='b'>
<tbody>
<tr><td rowspan='2'>A</td><td>B</td></tr>
<tr><td rowspan='2'>F</td></tr>
<tr><td>G</td></tr>
</tbody>
</table>
<p>with rowspan second line only</p>
<table class='b'>
<tbody>
<tr><td>A</td><td>B</td</tr>
<tr><td>A</td><td rowspan='2'>F</td></tr>
<tr><td>G</td></tr>
</tbody>
</table>
</body>
</html>
解决方案
中间行正在折叠,因为您已从该行中删除了所有数据项。只要您向其中添加一些数据,它就会回来,这可能是理想的解决方案。但是,如果表格绝对只能显示 2 列,您可以创建第三个隐藏列以使表格呈现您想要的方式:
.table-container {
border: 1px solid black;
display: inline-block;
}
table.b td, table.b th {
border: 1px solid black;
}
.hidden {
visibility: hidden;
}
.hidden-column {
margin-right: -17px;
}
<p>completely specified</p>
<div class='table-container'>
<table class='b'>
<tbody>
<tr><td>A</td><td>B</td></tr>
<tr><td>A</td><td>F</td></tr>
<tr><td>G</td><td>F</td></tr>
</tbody>
</table>
</div>
<p>rowspan=2 on A column</p>
<div class='table-container'>
<table class='b'>
<tbody>
<tr><td rowspan='2'>A</td><td>B</td></tr>
<tr><td>F</td></tr>
<tr><td>G</td><td>F</td></tr>
</tbody>
</table>
</div>
<p>rowspan=2 on F column</p>
<div class='table-container'>
<table class='b'>
<tbody>
<tr><td>A</td><td>B</td></tr>
<tr><td>A</td><td rowspan='2'>F</td></tr>
<tr><td>G</td></tr>
</tbody>
</table>
</div>
<p>rowspan=2 on A & F columns (with 3rd dummy column)</p>
<div class='table-container'>
<table class='b'>
<tbody>
<tr><td rowspan='2'>A</td><td>B</td><td>C</td></tr>
<tr><td rowspan='2'>F</td><td>C</td></tr>
<tr><td>G</td><td>C</td></tr>
</tbody>
</table>
</div>
<p>rowspan=2 on A & F columns (with 3rd dummy column but hidden)</p>
<div class='table-container'>
<table class='b hidden-column'>
<tbody>
<tr><td rowspan='2'>A</td><td>B</td><td class="hidden">C</td></tr>
<tr><td rowspan='2'>F</td><td class="hidden">C</td></tr>
<tr><td>G</td><td class="hidden">C</td></tr>
</tbody>
</table>
</div>
这有点hacky,但适用于一次性桌子。如果您要将一堆动态内容放入表格中,或者使用不同的行跨度和列跨度呈现动态数量的行和列,那么您最好使用更强大的东西(如 CSS Grid)来实现此布局。
推荐阅读
- reactjs - 对 Firestore 结果备选方案进行排序
- python-3.x - 当我尝试使用 tfds.load 时,出现 ['utf-8' codec can't decode byte 0xbe in position 133: invalid start byte] 错误
- docker - Docker(撰写)网络
- apache-kafka - 使用哪种序列化和反序列化格式来配置 kafka 连接 api,以便它可以处理以非英语编写的数据
- python - 更改 QTableWidget 的最后一行中的点大小
- android - LinearLayout:防止最后一个孩子被它之前的大文本视图推出或挤压
- angular - 如何在ts文件中使用routerLink和查询参数
- java - 如何读取加密PDF文件的权限?
- yocto - yocto - 如何设置busybox命令的权限
- docker - python-on-whales ssh 支持