Page 256 - css揭秘
P. 256

}

                        .avatar {
                            animation: spin 3s infinite linear;
                            transform-origin: 50% 150px; /* 150px = 路径的半径 */
                        }

                        .avatar > img {
                            animation: inherit;
                            animation-direction: reverse;
                        }

                        这样就差不多了!这个方案可能还算不上完美,毕竟需要加一层额外
                    的元素,但是,我们只用了不到 10 行 CSS 代码就实现了一个非常复杂的动
                    画,已经相当不容易了!


                     试一试 play.csssecrets.io/circular-2elements



                    单个元素的解决方案


                        上面的技巧很有效,但还不够理想,因为它需要修改 HTML 结构。当
                    我最开始想出这个技巧时,就立即写了一封邮件发给 CSS 工作组的邮件列
                      1①
                    表 (那时候我还不是其中一员),建议规范允许开发者为同一个元素指定多
                    个变形原点。这样的话,只需要一个元素就可以实现本节所讨论的动画效果
                    了,因此这看起来是一个非常合理的功能需求。

                        这次讨论相当热烈,把讨论推向高潮的正是 CSS 变形规范当时的一位
                    编辑 Aryeh Gregor 所说的那句让人一时摸不着头脑的话:

                         “transform-origin 只是一个语法糖而已。实际上你总是可以用
                      translate() 来代替它。”

                                                                       ——Aryeh Gregor

                        他 确 实 一 语 道 破 天 机: 每 个 transform-origin 都 是 可 以 被 两 个
                    translate() 模拟出来的。比如,下面两段代码实际上是等效的:


                        transform: rotate(30deg);
                        transform-origin: 200px 300px;


                        transform: translate(200px, 300px)
                                   rotate(30deg)
                                   translate(-200px, -300px);
                        transform-origin: 0 0;




                    ①  你可以在 lists.w3.org/Archives/Public/www-style/2012Feb/0201.html 读到完整的讨论。



                                                                                   47 沿环形路径平移的动画              225







          ඀ࠡ  JOEC
   251   252   253   254   255   256   257   258   259   260   261