在 Chrome 中滚动时出现负 z-index 问题的画布

Posted

技术标签:

【中文标题】在 Chrome 中滚动时出现负 z-index 问题的画布【英文标题】:Canvas with negative z-index issue on scroll in Chrome 【发布时间】:2015-05-08 10:24:12 【问题描述】:

说明

canvas 负 z-index 存在问题。基本上,当有 2 个元素处于固定位置时,一个是块元素,另一个是画布,并且画布的 z-index 为负数,无论它的 z-index 是什么,它都会滚动到第二个元素。

此错误仅发生在 Chrome:Mac 和 PC 上。

代码示例

这是一个 html 示例(问题已简化):

<ul>
    <li><span>test1</span></li>
    <li><span>test1</span></li>
    <li><span>test1</span></li>
</ul>

<div>
    <canvas />
</div>

还有 CSS

html,body
    height : 150%;


ul 
    position : fixed;
    z-index : -1;
    top : 0;
    left : 0;
    width : 100%;
    margin : 0;
    padding : 0;
    overflow : auto;

    li 
        float : left;
        width : 33%;
        height : 100px;
        background : red;
        position : relative;
        list-style: none;

        span
            display:block;
            position : relative;
        
    

div 
    position : fixed;
    z-index : -2;
    top : 0;
    left : 0;

    canvas
        opacity : 0.5
    

我省略了 javascript,因为我确定这不是问题。

您可以在jsFiddle 中看到正在运行的错误

一些尝试解决了这个问题,但我无法使用...

在尝试了多件事之后,这里解决了当前问题但在其他方面造成了麻烦:

overflow:visible 设置为ul 不知何故,这解决了问题,但我不能使用它,因为我在上面使用$.fn.slideDown()。在动画过程中,jQuery 将overflow 设置为hidden,使该错误在动画时可见。 lispanposition:relative 更改为其他内容; 这也确实有效,可能是最佳 解决方案...如果您没有绝对元素。对我来说就是这种情况。我也无法使用该修复程序。 在任何地方都只使用否定的z-index-2 on canvas-1 on ul); 这确实有效,但它会弄乱 ios 上的所有内容(可能还有其他设备,并没有测试所有内容)。 不使用否定的z-index 那会是最好的,但 iOS 不喜欢它。滚动时,未绘制的元素将出现在画布下,直到滚动完成。这是一种不良行为。

【问题讨论】:

在我的例子中,将 z-index: -1 放在 body 上解决了带有 z-index: -1 的 div 的滚动问题。 【参考方案1】:

这似乎是一个 Chromium/webkit(或 blink)错误,现在修复了它,满足您的所有标准,并且不需要对 HTML 结构或其他样式进行更改:

ul 
    /* rest of the styles */
    -webkit-transform: translate3d(0,0,0);

演示 http://jsfiddle.net/3a66445w/2/

【讨论】:

我不敢相信它成功了!你是救生员,非常感谢! 我很惊讶我居然找到了这个完全奇怪问题的答案。我没有负 z-index,但仍然有问题,这似乎已经解决了它 你真的应该得到世界上所有的积分来解决这个问题。谢谢。

以上是关于在 Chrome 中滚动时出现负 z-index 问题的画布的主要内容,如果未能解决你的问题,请参考以下文章

facebook 上 iframe 中的 Youtube - Z-index 问题

在 Chrome 中使用“z-index”的固定父元素下的元素

由于目标被视为被动,无法在被动事件侦听器中阻止默认值?为啥滚动时出现此错误?

webkit-transform 覆盖 Chrome 13 中的 z-index 排序

正则表达式:如何在 PL/SQL 中实现负向后查找

在表格单元格内时出现 CSS z-index 问题