html - HTML表格:水平滚动隐藏溢出然后阻止工具提示显示在表格之外
问题描述
TL;DR:由于overflow: hidden
.
我创建了一个简单的可重现的表格示例,其工具提示未按预期显示。存在问题的部分原因是表格需要overflow: scroll
水平滚动才能按预期工作。这是一个例子:
.gap {
height: 50px
}
div.table {
max-width: 200px;
overflow: scroll;
border: 2px solid blue;
display: inline-block;
font-family: 'Roboto Mono';
font-weight: 700;
}
.tr {
display:flex;
}
.td, .th {
border: 1px solid black;
min-width: 60px;
height: 50px;
}
.th {
position: relative;
font-size: 13px;
padding: 2px;
background-color: #888888;
text-align: center;
border-right: 1px solid #555555;
display: inline-block;
box-sizing: border-box;
}
.tip-wrapper {
position: absolute;
}
.tip0 {
visibility: hidden;
position: absolute;
top: -60%;
z-index: 1;
max-width: 325px;
min-width: 160px;
color: #333333;
text-align: left;
background: white;
border: 1px solid black;
}
.tip1 {
visibility: hidden;
position: fixed;
z-index: 1;
max-width: 325px;
min-width: 160px;
color: #333333;
text-align: left;
background: white;
border: 1px solid black;
}
.tooltip:hover .tip0, .tooltip:hover .tip1 {
visibility: visible;
}
<div class='gap'>.</div>
<div class='table'>
<div class='table-headers'>
<div class='tr'>
<div class='th tooltip'>
Z
<div class='tip0'>
Heres the ToolTip For Column Z, getting cut off (bad)
</div>
</div>
<div class='th'>Y</div>
<div class='th tooltip'>
X
<div class='tip-wrapper'>
<div class='tip1'>
Heres the Tooltip For Column X, which doesn't stay at the top (bad)
</div>
</div>
</div>
<div class='th'>W</div>
<div class='th'>V</div>
</div>
</div>
<div class='table-body'>
<div class='tr'>
</div>
<div class='tr'>
<div class='td stick'>A</div>
<div class='td'>B</div>
<div class='td'>C</div>
<div class='td'>D</div>
<div class='td'>E</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
</div>
</div>
但是,在上表中,单元格Z
和X
标题单元格显示了工具提示。但是,目前这两个工具提示都存在问题:
Z 列:由于overflow: hidden
,此工具提示被截断。表格可以水平滚动很重要,所以我不能删除这个overflow
CSS 属性。但是,工具提示悬停在表格顶部上方也很重要,以免阻塞表格的内容。
X 列:我在另一篇文章中尝试了这种方法。方法 1. 这允许工具提示在overflow: hidden
. 但是,当我垂直滚动此表时,工具提示也会移动,这不好。工具提示应始终保持在相同的高度,就在表格顶部的上方。
我希望这个基本的“表格标题内的工具提示”可以工作,但到目前为止还没有。因此,我正在考虑div
在表格的 HTML 之外创建一个单独的工具提示,并使用onMouseOver()
和onMouseOut()
处理函数将工具提示定位在鼠标位置,并用文本填充工具提示。也许这是我唯一的方法?
解决方案
您在tip0.tip-wrapper
上缺少一个元素,如果在这种情况下添加此元素并将使用的位置设置为-(th height) - (top threshold in rem),那么问题就解决了,并且您将工具提示放置在表格的顶部.top
.tip-wrapper
calc()
calc(-50px - 1.5rem)
您可以在高度中使用动态单位,th
例如vh
, vmax
, %
. 此外,您需要fine-tune
对工具提示的位置进行一些@media 查询。
.td,
.th {
border: 1px solid black;
min-width: 10%;
height: 5vh;
}
.tip-wrapper {
position: absolute;
top: calc(-5vh - 1.5rem);
}
.gap {
height: 100px
}
div.table {
max-width: 200px;
overflow: scroll;
border: 2px solid blue;
display: inline-block;
font-family: 'Roboto Mono';
font-weight: 700;
}
.tr {
display: flex;
}
.td,
.th {
border: 1px solid black;
min-width: 60px;
height: 50px;
}
.th {
position: relative;
font-size: 13px;
padding: 2px;
background-color: #888888;
text-align: center;
border-right: 1px solid #555555;
display: inline-block;
box-sizing: border-box;
}
.tip-wrapper {
position: absolute;
top: calc(-50px - 1.5rem);
}
.tip0 {
visibility: hidden;
position: fixed;
z-index: 1;
max-width: 325px;
min-width: 160px;
color: #333333;
text-align: left;
background: white;
border: 1px solid black;
}
.tip1 {
visibility: hidden;
position: fixed;
z-index: 1;
max-width: 325px;
min-width: 160px;
color: #333333;
text-align: left;
background: white;
border: 1px solid black;
}
.tooltip:hover .tip0,
.tooltip:hover .tip1 {
visibility: visible;
}
<div class='gap'>Gap</div>
<div class='table'>
<div class='table-headers'>
<div class='tr'>
<div class='th tooltip'>
Z
<div class='tip-wrapper'>
<div class='tip0'>
Tip For Column Z is a long tip with enough text to overflow above the page top
</div>
</div>
</div>
<div class='th'>Y</div>
<div class='th tooltip'>
X
<div class='tip-wrapper'>
<div class='tip1'>
Tip For Column Z is a long tip with enough text to overflow above the page top
</div>
</div>
</div>
<div class='th'>W</div>
<div class='th'>V</div>
</div>
</div>
<div class='table-body'>
<div class='tr'>
</div>
<div class='tr'>
<div class='td stick'>A</div>
<div class='td'>B</div>
<div class='td'>C</div>
<div class='td'>D</div>
<div class='td'>E</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
<div class='tr'>
<div class='td'>F</div>
<div class='td'>G</div>
<div class='td'>H</div>
<div class='td'>I</div>
<div class='td'>J</div>
</div>
</div>
</div>
推荐阅读
- visual-studio - 发布扩展时出现错误 VsixPub0004 错误
- python - 如何使用 Django Shell 删除 SQLITE3 中的表行?
- c++ - 错误:变量之前的预期主表达式
- cloudkit - 如何通过 CloudKit Dashboard 查找用户记录
- flutter - 如何将返回 null 的方法转换为“null-safety”。
- c# - 起订量功能参数
- go - VSCode 中的 Go Modules 导入问题(“在任何 [...] 中都找不到包 [...]”)
- android - Flutter - 如何用动画扩展小部件?
- ios - iPhone 无法与 localhost 上的 dockerized 服务器通信
- databricks - Databricks - 使用 rioxarray 将数据集导出到 DBFS 中的栅格文件