【问题标题】:Firefox bug with multiple nested z-index elements and preserve-3d带有多个嵌套 z-index 元素和 preserve-3d 的 Firefox 错误
【发布时间】:2015-02-26 20:20:57
【问题描述】:

我试图用谷歌搜索它并在这里检查了类似的问题,但我什么也没找到:(

http://codepen.io/suez/pen/d563d6819f7df5c0b0f55db3e9bfc085?editors=010 - 这是一个演示。它在 chrome 中完美运行,但我无法在 Firefox 中悬停/单击居中块的按钮,开发工具检查员说我正在悬停 .rotater 元素,当它有 z-index: 3.inner 元素有 @987654329 @。所有正确嵌套的元素都有position: absolute/relative,并且孩子的z-index比他们的父母大。主容器.scene 也有透视属性,.level,.rotater,.elemtransform-style: preserve-3d.elemtranslateZ。我试图解决这个问题,但现在我不知道该怎么做:(

这是 css 的一部分(最好在 codepen 上查看完整版):

.scene {
  z-index: 1;
  position: relative;
  height: 100%;
  perspective: 200vw;
}
.level {
  z-index: 2;
  position: absolute;
  left: 0;
  width: 100%;
  height: 100%;
  transition: transform 1s;
  transform-style: preserve-3d;
}
.rotater {
  z-index: 3;
  position: absolute;
  top: 0;
  left: 10%;
  width: 80%;
  height: 100%;
  transition: transform 0.7s;
  transform-style: preserve-3d;
}
.elem {
  z-index: 4;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transition: transform 1s;
  backface-visibility: hidden;
  font-size: 5rem;
  text-align: center;
  transform-style: preserve-3d;

  @for $i from 1 through $level1Elems {
    &:nth-child(#{$i}) {
      transform: rotateY(0 - ($i - 1) * $level1Angle) translateZ($level1Z);
    }
  }
}

.inner {
  z-index: 5;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #EEEEEE;
  transition: transform 0.3s;
  box-shadow: 0.6rem 1rem 1rem rgba(0,0,0,0.3);
}
.art-btn {
  position: absolute;
  z-index: 6;
  top: 50%;
  left: 50%;
  width: 80%;
  height: 10rem;
  transform: translateX(-50%) translateY(-50%);
  display: block;
  outline: none;
  border: 0.5rem solid;
  background: transparent;
  font-size: 5rem;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color 0.3s, color 0.3s, transform 0.3s;
}

更新:如果我从 .rotater 中删除 transform-style: preserve-3d; 在 FF 中一切正常,但它完全破坏了我的布局:(

更新 #2:http://codepen.io/suez/pen/7b889e66f096a65459b3994c4b4e2a07 - 非常简单的错误重现。 5个元素,第一个有透视,2&3&4有preserve-3d,4个有translateZ()。您可以在 chrome 中选择文本,但不能在 FF 中执行此操作。如果您从 4 个元素中删除 translateZ(-50vw),一切都会按预期工作,但 translateZ 绝对是必须的。

更新 #3:我想出了我的笔的 hack(更新版本在这里 - http://codepen.io/suez/pen/b9cd3de42a464aa98579cd009e6e83a6?editors=010)。我制作了.rotater 2px 宽度/高度,将其放置在中心,并将.elem 宽度/高度更改为 vw/vh 单位,并添加负左/上,以便放置在中心,就像以前一样。无论如何它仍然有小问题,如果用户以某种方式悬停 .rotater 的 2pxx/2px 区域,他会在 FF 中失去按钮焦点:D 但我可以忍受这个。

【问题讨论】:

  • 如果您可以将示例减少到重现问题所需的最低限度的 HTML 和 CSS,将会有所帮助。目前那里的代码量可能会阻止人们尝试回答这个问题。
  • @phari codepen.io/suez/pen/7b889e66f096a65459b3994c4b4e2a07 - 我在这里重新创建了它。 Chrome 可以,FF 不行。无论如何,我已经找到了破解方法(但不是文明的方式:D)并将很快发布
  • codepen.io/suez/pen/bNKBmR - 带有 hack 的最终版本。

标签: html css z-index


【解决方案1】:

我是 Nikolay,我也遇到过类似的问题。

在具有电梯缩放功能的站点(我无法链接它,它已经不是公开的)中,缩放图像(使用 preserve-3d)z-index 与标题(上层)的 z-index 冲突。看起来像标题覆盖了图像(但标题在顶部,图像在标题布局下)。

我将该图像的变换样式置于初始位置。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多