Page 235 - css揭秘
P. 235

它本来就是初始值:

                                                  input:not(:focus) + .callout {
                                                      transform: scale(0);
                                                      transition: .25s;
                                                  }

                                                  .callout {
                                                      transform-origin: 1.4em -.4em;
                                                      transition: .5s cubic-bezier(.25,.1,.3,1.5);
                                                  }


                    图 8-12
                    以    rgb(100%,  0%,  40%) 和
                      rgb(50%,  50%,  50%)(即 灰
                    色 gray)这两种颜色为例,我们
                    用 cubic-bezier(.25,.1,.2,3)
                    这个调速函数进行弹性过渡会得
                    到这样的结果。RGB 三个通道
                    的值是独立进行插值运算的,因
                    此这个过渡过程中可能会产生
                    rgb(0%, 100%, 60%) 这样怪异的
                    颜色。你可以到 play.csssecrets.
                    io/elastic-color 亲身体验         虽然弹性过渡在很多种类的过渡中都可以收到不错的效果(比如本节
                                             “难题”中的那些例子),但在某些时候它产生的结果可能会相当糟糕。典型
                                              的反面案例出现在对颜色属性的弹性过渡中。尽管两种颜色发生弹性过渡的
                                              结果可能会相当有趣(参见图 8-12),但这种效果在 UI 场景下通常是不合
                                              适的。

                                                  为避免不小心对颜色设置了弹性过渡,可以尝试把过渡的作用范围
                                              限制在某几种特定的属性上,而不是像以前那样什么都不指定。当我们在
                     小提示
                                              transition 简写属性中不指定任何属性时,transition-property 就会得
                       说到把过渡的作用范围限制           到它的初始值:all。这意味着只要是可以过渡的属性,都会参与过渡。因
                    在特定属性上,你甚至可以通过            此,如果我们以后在提示框打开状态的样式规则中增加一行 background 声
                    transition-delay 属 性 把 各 个
                    属性的过渡过程排成列队,这个            明,那么弹性过渡也会作用在这个属性上。所以最终完美版的代码应该是这
                    属性的值实际上就是 transition      样的:
                    简写属性中的第二个时间值。举
                    例来说,如果 width 和 height         input:not(:focus) + .callout {
                    都需要过渡效果,而且你希望高                    transform: scale(0);
                    度先变化然后宽度再变化(很                     transition: .25s transform;
                    多弹出框脚本库已经把这种动画                }
                    效果推广开来了),就可以这样
                    写:transition:  .5s  height,   .callout {
                                                      transform-origin: 1.4em -.4em;
                    .8s  .5s  width;(也就是说,            transition: .5s cubic-bezier(.25,.1,.3,1.5) transform;
                    让 width 过渡的 延 时 正好等于          }
                    height 过渡的持续时间)。







                  204   第 8 章 过渡与动画







          ඀ࠡ  JOEC
   230   231   232   233   234   235   236   237   238   239   240