【问题标题】:CSS Transform hover bug in Webkit when using perspective, rotateX, rotateY and scale使用透视、旋转X、旋转Y和缩放时Webkit中的CSS变换悬停错误
【发布时间】:2014-02-06 20:33:37
【问题描述】:

我有以下小提琴: http://jsfiddle.net/cYwkz/

我正在使用以下 CSS:

article {
  border: 2px solid #cccccc;
  background-color: #e5e5e5;
  border-radius: 5px;
  display: inline-block;
  height: 150px;
  margin: 0 2% 32px;
  position: relative;
  vertical-align: top;
  width: 160px;
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -webkit-transition: all .2s ease;
  -moz-transition: all .2s ease;
  transition: all .2s ease;
  -webkit-transform-style: preserve-3d; 
  -moz-transform-style: preserve-3d; 
  -o-transform-style: preserve-3d; 
  transform-style: preserve-3d; 
  -webkit-transform-origin: center;
  -moz-transform-origin: center;
  -o-transform-origin: center;
  transform-origin: center;
}
article:hover {
  -webkit-transform: perspective(400px) rotateX(5deg) rotateY(5deg) scale(1.025);
  -moz-transform: perspective(400px) rotateX(5deg) rotateY(5deg) scale(1.025);
  -ms-transform: perspective(400px) rotateX(5deg) rotateY(5deg) scale(1.025);
  -o-transform: perspective(400px) rotateX(5deg) rotateY(5deg) scale(1.025);
  transform: perspective(400px) rotateX(5deg) rotateY(5deg) scale(1.025);
}

当我将鼠标悬停在文章的左下角时,悬停和变换工作正常。但是,当我将鼠标悬停在右上角时,变换会闪烁或有时根本不启动。 我在 Firefox 中没有这些问题。

系统:Mac OSX 10.9.1 适用于:Firefox 26、Firefox Aurora 28、IE10 失败:Chrome 32、Safari 7.0.1、Opera Next 19

希望大家帮忙!提前致谢

【问题讨论】:

  • 我相信会发生这种情况是因为 Webkit 中的转换仍然是前缀,这是不稳定的。我可以确认即使在 Chrome 34(迄今为止最新的 Canary,OS X)中也存在该错误。

标签: css webkit transform transition


【解决方案1】:

我在下面使用了这段代码

<style>    
.outer div {
        float: left;
        -webkit-perspective: 200px;
        -webkit-transform-style: preserve-3d;
    }
    .outer a {
        -webkit-transition: all 1.0s ease-in-out;
        background:#0F6;
        width:100px;
        height:100px;
        display:block;
        -webkit-transform: rotateY(45deg);
    }
    .outer div:hover a {
        -webkit-transform: none;
    }
</style>

    <div class="outer">
        <div>
            <a href="http://www.google.com/"></a>
        </div>
    </div>

此解决方案适用于我的 chrome。 http://jsfiddle.net/jaxweb/7qtLD/7/

【讨论】:

    【解决方案2】:

    问题出在 webkit 中位于 z=0 的平面获得悬停事件(可以这么说)。

    由于您的旋转使元素(特别是右上部分)消失(或在屏幕内),它们会进入 zplane 下方并且不再触发悬停。

    您可以解决将它们移向 z 正数的问题:

    -webkit-transform: perspective(400px) rotateX(5deg) rotateY(5deg) 
                       translateZ(10px) scale(1.025);
    

    为了避免在悬停状态下的Z移动,在基本状态下设置相同的Z。

    -webkit-transform: perspective(400px) rotateX(0deg) rotateY(0deg) 
                       translateZ(10px) scale(1);
    

    在使用转换时,以与转换状态相同的方式设置基本转换总是一个好主意。这就是我设置 0 度旋转的原因。

    fiddle

    【讨论】:

    • 您可以设置任何您喜欢的值,只要它足够高以将所有 div 移动到 z 平面上方。一种更数学的方法是围绕右上角旋转(因此净运动将升高),但我不知道如何设置基本状态。
    • 很抱歉反应迟了,但它解决了我的问题:D 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多