Safari上的CSS3 rotateY过渡中的错误?

Ric*_*ard 11 safari css3 css-transitions

我正在使用CSS3过渡显示模态弹出窗口(主要是从Effeckt.css借来的).它适用于除Safari之外的所有现代浏览器.在Safari中,运动正常,但背景色不均匀.

这是代码,问题在OSX上的Safari中可见:http://jsfiddle.net/eJsZx/4/

在问题解决之前问题的屏幕截图.您可以看到div的一半正确着色为白色,一半仍然是透明的.

在此输入图像描述

这是CSS的相关部分(.effeckt-show.md-effect-8应用按钮被点击时,以显示模式):

.effeckt-modal {
  visibility: hidden;
  -webkit-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
  -o-backface-visibility: hidden;
  backface-visibility: hidden;
  background: white;
}
.md-effect-8 {
  -webkit-perspective: 1300px;
  -ms-perspective: 1300px;
  -o-perspective: 1300px;
  perspective: 1300px;
  -webkit-transform-style: preserve-3d;
  -ms-transform-style: preserve-3d;
  -o-transform-style: preserve-3d;
  transform-style: preserve-3d;
}
.md-effect-8 .effeckt-modal {
  -webkit-transform: rotateY(-70deg);
  -ms-transform: rotateY(-70deg);
  -o-transform: rotateY(-70deg);
  transform: rotateY(-70deg);
  -webkit-transition: all 500ms;
  -o-transition: all 500ms;
  transition: all 500ms;
  opacity: 0;
}
.effeckt-show.md-effect-8 .effeckt-modal {
    -webkit-transform: rotateY(0deg);
    -ms-transform: rotateY(0deg);
    -o-transform: rotateY(0deg);
    transform: rotateY(0deg);
    opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)

ndm*_*ndm 24

据我所知,这是一个错误,是的,Safari正在渲染它不应该的交叉点.

有一段时间以来,我认为Safari总是通过渲染元素的交叉来做到这一点,但据我理解规格,只有相同的3d渲染上下文中的元素应该相交,并且这将是具有a transform-style的元素的子元素preserve-3d.

到目前为止,我发现的唯一解决方法(仅在Windows上测试,但Safari显示相同的行为)是在z轴上转移底层元素.没有透视应用它实际上不会翻译,但Safari/Webkit似乎认为它(这可能是因为它错误地将元素视为与实际转换的对话框在同一个3d渲染上下文中)因此元素不再相交了.

.effeckt-overlay {
    position: fixed;
    width: 100%;
    height: 100%;
    visibility: hidden;
    top: 0;
    left: 0;
    opacity: 0;
    -webkit-transition: 500ms;
    -o-transition: 500ms;
    transition: 500ms;
    z-index: 1000;
    background: rgba(0, 0, 0, 0.5);

    -webkit-transform: translateZ(-1000px);
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/eJsZx/5/

  • 对于我的解决方案 http://jsfiddle.net/ardeezstyle/cdcnyfr6/,我必须做一个小改动 `-webkit-transform: translateZ(1000px);` 并且它就像一个魅力。我的+1。谢谢#ndm (2认同)
  • 救了我的屁股!谢谢 :) FWIW,如果你还没有疯狂的 Z 翻译,则不需要“-1000px”,你可以使用“-1px”。 (2认同)
  • 我的解决方案是将我的元素放入应用了“-webkit-transform:translateZ(1000px);”的包装器中,这样我的整个动画就在其余动画之上,而不是欺骗导航器认为父级正在使用负值,我发现这更容易。 (2认同)