Bootstrap table:随着单元格内容的增加,垂直行 header 与单元格重叠
Bootstrap table: Vertical row header overlaps cells as cell content grow
在每行的第一个单元格中,我有一个带有垂直对齐文本的 header 单元格。
它显示为普通 HTML + CSS 应该显示的样子。但是当使用 Bootstrap 4 tables 时,如果其中一个单元格的内容增长并且 table 行高增加,则垂直 header 文本向右移动,朝向其他单元格,重叠的内容。不使用 Bootstrap.
时不会发生这种情况
https://jsfiddle.net/onurmatik/y9tLk6dz/13/
HTML
<table class="table table-borderless" id="grid">
<tbody>
<tr class="border-0">
<td class="vertical">
regularly
</td>
<td class="border">
<ul class="list-group list-group-flush">
</ul>
</td>
<td class="border">
<ul class="list-group list-group-flush">
<li class="list-group-item">Tua</li>
<li class="list-group-item">Onur</li>
<li class="list-group-item">Hanna</li>
<li class="list-group-item">Sine</li>
<li class="list-group-item">Fred</li>
<li class="list-group-item">Anna</li>
<li class="list-group-item">Floris</li>
</ul>
</td>
</tr>
<tr>
<td class="vertical">
sometimes
</td>
<td class="border">
<ul class="list-group list-group-flush"></ul>
</td>
<td class="border">
<ul class="list-group list-group-flush"></ul>
</td>
</tr>
</tbody>
</table>
CSS
#grid li {
width: 100%;
}
.vertical {
text-align:center;
vertical-align: bottom!important;
white-space:nowrap;
transform-origin:50% 50%;
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
transform: rotate(-90deg);
writing-mode:tb-rl;
}
#grid td {
width: 200px;
height: 200px;
}
只要单元格的渲染高度大于其宽度,就会发生这种情况。这是因为:
- 将“高”矩形(例如 1:2 比率)旋转
90deg
会得到“宽”矩形(例如 2:1 比率)。
- 应用于
td
元素的变换,将它们在当前位置旋转,而不影响整个 table 的宽度和高度。
This animation 应该能更好地证明这一点。
我想即使没有 Bootstrap,只要复制 完全 相同的尺寸和比例,问题也会一样。
解决此问题的一种方法是将 header 单元格的内容包装在 <span>
元素中:
<td class="vertical">
<span>regularly</span>
</td>
...并将旋转和 writing-mode
应用于 <span>
元素:
.table .vertical {
vertical-align: middle;
text-align: right;
}
.table .vertical span {
white-space: nowrap;
writing-mode: vertical-lr;
transform-origin: 50% 50%;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
这里是 live demo for your quick reference. Please note that I've added the .table
class in front of the .table .vertical
selector to overwrite some of Bootstrap's default styles。
在每行的第一个单元格中,我有一个带有垂直对齐文本的 header 单元格。
它显示为普通 HTML + CSS 应该显示的样子。但是当使用 Bootstrap 4 tables 时,如果其中一个单元格的内容增长并且 table 行高增加,则垂直 header 文本向右移动,朝向其他单元格,重叠的内容。不使用 Bootstrap.
时不会发生这种情况https://jsfiddle.net/onurmatik/y9tLk6dz/13/
HTML
<table class="table table-borderless" id="grid">
<tbody>
<tr class="border-0">
<td class="vertical">
regularly
</td>
<td class="border">
<ul class="list-group list-group-flush">
</ul>
</td>
<td class="border">
<ul class="list-group list-group-flush">
<li class="list-group-item">Tua</li>
<li class="list-group-item">Onur</li>
<li class="list-group-item">Hanna</li>
<li class="list-group-item">Sine</li>
<li class="list-group-item">Fred</li>
<li class="list-group-item">Anna</li>
<li class="list-group-item">Floris</li>
</ul>
</td>
</tr>
<tr>
<td class="vertical">
sometimes
</td>
<td class="border">
<ul class="list-group list-group-flush"></ul>
</td>
<td class="border">
<ul class="list-group list-group-flush"></ul>
</td>
</tr>
</tbody>
</table>
CSS
#grid li {
width: 100%;
}
.vertical {
text-align:center;
vertical-align: bottom!important;
white-space:nowrap;
transform-origin:50% 50%;
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
transform: rotate(-90deg);
writing-mode:tb-rl;
}
#grid td {
width: 200px;
height: 200px;
}
只要单元格的渲染高度大于其宽度,就会发生这种情况。这是因为:
- 将“高”矩形(例如 1:2 比率)旋转
90deg
会得到“宽”矩形(例如 2:1 比率)。 - 应用于
td
元素的变换,将它们在当前位置旋转,而不影响整个 table 的宽度和高度。
This animation 应该能更好地证明这一点。
我想即使没有 Bootstrap,只要复制 完全 相同的尺寸和比例,问题也会一样。
解决此问题的一种方法是将 header 单元格的内容包装在 <span>
元素中:
<td class="vertical">
<span>regularly</span>
</td>
...并将旋转和 writing-mode
应用于 <span>
元素:
.table .vertical {
vertical-align: middle;
text-align: right;
}
.table .vertical span {
white-space: nowrap;
writing-mode: vertical-lr;
transform-origin: 50% 50%;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
这里是 live demo for your quick reference. Please note that I've added the .table
class in front of the .table .vertical
selector to overwrite some of Bootstrap's default styles。