【发布时间】:2018-09-14 03:52:10
【问题描述】:
我在 Chrome 和 Safari 中有一些奇怪的行为。我有一个缩放的 (transform: scale()) 容器,里面有视频和其他元素。在某些缩放比例下,具有高 z-index 的绝对定位元素会消失并且不会再次出现。
我该如何解决这个问题?
请注意,我不能给视频元素一个负的 z-index,我需要使用 overflow: hidden;。
示例
我做了一个例子,可以上下缩放最外面的容器。在特定的比例值处,具有类.on-top(和文本"I should always be on top.")的元素消失。再次缩小时突然出现。
示例链接:https://jsfiddle.net/iafiawik/Lcox1ecc/
结论
- 似乎元素的大小很重要。我做的越大,在它消失之前的比例值就越大。
- 我还测试了直接在元素上使用 CSS 设置
transform: scale(1.4)并且行为是相同的。
如果我满足以下条件,则问题不存在:
- 用 div 替换 video 标签
- 将
position: absolute;从兄弟姐妹中删除到.on-top(即.below) - 从
.content中删除overflow: hidden; - 如果我移动
.on-top,使其位于文档流中的视频标签之后
(当然,由于项目的具体原因,这些变通方法实际上都不适合我。我也不能给视频元素一个负的 z-index,我需要使用overflow: hidden;。 )
社区建议的解决方法(谢谢!)
- 给视频标签一个负的 z-index(不能这样做,因为我有时会在视频后面放置元素)
- 删除
overflow: hidden;(我无法删除overflow: hidden;)
浏览器
我在 Chrome (Mac) 和 Safari (Mac) 中看到了这个问题。
更新 1
似乎this bug report 几乎涵盖了我的问题。但是,它没有提供修复。
更新 2
我已经通过提供我对这个问题的解决方案来回答我自己的问题。
更新 3
有很多答案要么修改视频的z-index,要么将translateZ 添加到.on-top 元素。演示表明,这两种方法都可以解决问题。
但是,由于我的 HTML 结构是来自可视化 HTML 编辑器的输出(长篇故事......),我不知道那里会有哪些元素,或者它们是否应该在视频的前面、下面或旁边。因此,我正在寻找一种不需要更改缩放元素内的单个元素的解决方案。
【问题讨论】:
-
显然
scale弄乱了 Safari 和 Chrome 中的 z-index 信息。检查这个:stackoverflow.com/questions/35681829/… 有一些解决方法,但似乎你已经想通了! -
谢谢何塞!我已经尝试了解决方法,但它们并没有帮助我。我必须在某些时候使用
overflow: hidden;,这对我来说似乎是个问题(当与position: relative;或position: absolute;结合使用时。 -
看起来这是一个 webkit/blink (safari/chrome/opera) 问题!我在 Firefox、Edge 和 IE11 上没有遇到这个问题
-
@Baksteen 我也一样。我只能在 Chrome 和 Safari 中重现它。
标签: javascript css google-chrome z-index scaletransform