table 内的绝对元素导致 table 启用 overflow-y: scroll somehow

Absolute element inside table is causing the table to enable overflow-y: scroll somehow

我有一个 table 提供一些服务。每项服务都有一个“?”图标,访问者可以单击该图标来阅读有关该服务的更多信息。

this fiddle


table 的包装有:

@media all and (max-width: 560px) {
    .table-wrapper {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }
}

因此您可以轻松地在移动设备上向右或向左滚动(因为 table 对于小屏幕来说太宽了)。

但这就是问题所在:一些弹出窗口(尤其是最后一个)导致 table 的包装器垂直滚动,而它没有 "overflow-y: scroll" !

由于弹出窗口,出现了一个滚动条,您可以在 table 内滚动...这不是我想要的 :( 因此,当您在移动设备上查看此 table 时,您无法再向下滚动页面,因为 table 挡住了。

这就是我想要的: 弹出窗口有 "z-index: 1;" 因此弹出窗口将位于几乎所有其他元素之上。所以弹出窗口也应该悬停在下面的元素上方(在 table 之外)。 table 高度应该基本上与其包装器相同,但弹出窗口需要能够越过此包装器(和 table)的边缘。由于它是 "position: absolute;",我认为这是自动完成的,但事实并非如此。


更新:

非常难看的解决方案:将底部边距设置为 table 等于或大于最后一个和最高的弹出窗口,因此 table-wrapper 不需要垂直滚动条。但就像我说的:真的很丑。


this fiddle


UPDATE(次要): 我只在 table 较大时在包装器上设置 "overflow-x: auto"比屏幕大(约 560 像素),因此该问题不会显示在桌面上。


EDIT2 检查这个 jsFiddle 我认为它现在可以工作了:)

编辑

如果你想隐藏当屏幕 width 小于 560px 时显示的垂直滚动条,那么你可以简单地使用 overflow-y:hidden 禁用它并在以下其他元素上显示弹出窗口table 您可以在 @media 查询中设置 height:100%

@media all and (max-width: 560px) {
  .table-wrapper {
    overflow-x: auto;
    overflow-y:hidden;  // <-- 
    height:100%;        // <--
    -webkit-overflow-scrolling: touch;
  }
}

并且要在 table 之后隐藏 space 你不能将下一个元素设置为 negative margin-top 像这样

div_after_the_table {
margin-top:-75px;
}

如果您用 position: absolute; 将 table 包裹在另一个 div 中,弹出窗口将能够显示在溢出之外。

div .more-info {
    position: static;
}

绝对弹出窗口的直接父级必须定位 static 才能使其脱离 table 滚动。

我一直在处理同类问题,但我的问题仍未解决。我已将图标 position:absolute 设置为将其显示在第一列的右侧,而不将其换行到下一行。但是,当父级定位为静态时,使用图标进行弹出定位会出现问题。

在你的情况下,它会起作用。