【问题标题】:Firefox RotateY Transform not workingFirefox RotateY 转换不起作用
【发布时间】:2012-10-23 09:56:58
【问题描述】:

我有一个页面显示可以通过 jQuery 调整大小的人物图片。我正在使用一个精灵图像,它显示 3 个正方形,当您选择/悬停它们时它们会发生变化。我正在使用 CSS3 Transition & Transform (RotateY) 为更改设置动画。 过渡和转换在 Chrome (v22) 中有效,但在 Firefox (v16) 中无效。

我创建了一个 jsFiddle 示例:http://jsfiddle.net/WPEbW/7/

<div id="divOptions" runat="server" style="padding: 0 10px; margin: 10px; overflow: hidden; zoom: 1">
    <div style="float: left">
        <div id="divSmallImage" runat="server" class="ResizeImages Small" title="Small">
        </div>
        <div id="divMediumImage" runat="server" class="ResizeImages Medium Selected" title="Medium">
        </div>
        <div id="divLargeImage" runat="server" class="ResizeImages Large" title="Large">
        </div>
    </div>
</div>​

.ResizeImages { cursor: pointer; display: inline-block; background-position: 0; -moz-transform:rotateY(0deg) }
.ResizeImages:hover { box-shadow: #CCC 1px 1px 5px; -webkit-transition: none; -moz-transition: none; -o-transition: none; transition: none; }
.ResizeImages.Selected { -webkit-transition: background-position 0 .4s,-webkit-transform 1s; -webkit-transform: rotateY(180deg); -moz-transition: background-position 0 .4s,-moz-transform 1s; -moz-transform: rotateY(180deg); -o-transition: background-position 0 .4s,-o-transform 1s; -o-transform: rotateY(180deg); transition: background-position 0 .4s,transform 1s; transform: rotateY(180deg); }
.ResizeImages.Small { background: url('https://www.new-innov.com/RMSImages/square_sprite.png') 0 0 no-repeat; width: 12px; height: 12px; }
.ResizeImages.Small:hover { background-position: 0 -12px; }
.ResizeImages.Small.Selected { background-position: 0 -24px; }
.ResizeImages.Medium { background: url('https://www.new-innov.com/RMSImages/square_sprite.png') -12px 0 no-repeat; width: 16px; height: 16px; }
.ResizeImages.Medium:hover { background-position: -12px -16px; }
.ResizeImages.Medium.Selected { background-position: -12px -32px; }
.ResizeImages.Large { background: url('https://www.new-innov.com/RMSImages/square_sprite.png') -28px 0 no-repeat; width: 20px; height: 20px; }
.ResizeImages.Large:hover { background-position: -28px -20px; }
.ResizeImages.Large.Selected { background-position: -28px -40px; }

$(document).ready(function() {
    function SetSize(selectedImage) {
        if (typeof selectedImage !== 'undefined') {
            $('.ResizeImages.Selected').removeClass('Selected');
            $(selectedImage).addClass('Selected');
        }
    }
    SetSize();
    $('.ResizeImages').click(function() {
        SetSize(this);
    });
});​

我相信我正在使用的转换和转换应该可以在 Firefox 中使用,但不知道为什么不能。

提前致谢,
-亚伦

【问题讨论】:

    标签: firefox css-transitions


    【解决方案1】:

    感谢@Boris Zbarsky,我能够解决自己的问题。我拼出了转换,而不是尝试使用该类的速记版本。

    我更新了 jsFiddle 示例:http://jsfiddle.net/WPEbW/10/

    这是我唯一更改的 CSS 类:

    .ResizeImages.Selected { 
        -webkit-transition-property: background-position, -webkit-transform;
        -webkit-transition-duration: 0s, 1s;
        -webkit-transition-delay: .4s, 0s;
        -webkit-transform: rotateY(180deg); 
        -moz-transition-property: background-position, -moz-transform;
        -moz-transition-duration: 0s, 1s;
        -moz-transition-delay: .4s, 0s;
        -moz-transform: rotateY(180deg); 
        -o-transition-property: background-position, -o-transform;
        -o-transition-duration: 0s, 1s;
        -o-transition-delay: .4s, 0s;
        -o-transform: rotateY(180deg); 
        transition-property: background-position, transform;
        transition-duration: 0s, 1s;
        transition-delay: .4s, 0s;
        transform: rotateY(180deg); 
    }
    

    【讨论】:

    • @BorisZbarsky 我不关注你。我指的是位置,而不是时间。
    • 你原来的 CSS 有 transition: background-position 0 0.4s 这样的东西。这些值包括属性名称、转换延迟和转换持续时间。因此,对于兼容的 CSS 解析器,0 应该是 0,以免丢弃声明。您重写的 CSS 正确使用 0 作为过渡持续时间,因此它可以工作。但它也可以在原始 CSS 中将 0 替换为 0。
    【解决方案2】:

    background-position 0 .4s 不是http://dev.w3.org/csswg/css3-transitions/#single-transition 中定义的有效&lt;single-transition&gt;,因此您的整个-moz-transition 规则将被CSS 解析器丢弃。正如错误控制台所说:

    [03:47:02.876] 解析“-moz-transition”值时出错。声明被放弃。 @http://fiddle.jshell.net/WPEbW/7/show/:18

    它在 Chrome 中有效,因为不幸的是 Chrome 并没有真正实现正确解析转换值的规范。

    【讨论】:

    • +1 感谢您的帮助。我能够想出我发布的解决方案。
    猜你喜欢
    • 2013-01-21
    • 2014-06-26
    • 1970-01-01
    • 2015-05-11
    • 2013-11-27
    • 2015-05-17
    • 2018-09-20
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多