如何在元素上进行多个CSS转换?

Eri*_*oma 306 css animation css3 css-transitions

这是一个非常直截了当的问题,但我找不到关于CSS过渡属性的非常好的文档.这是CSS片段:

    .nav a
{
    text-transform:uppercase;
    text-decoration:none;
    color:#d3d3d3;
    line-height:1.5 em;
    font-size:.8em;
    display:block;
    text-align:center;
    text-shadow: 0 -1.5em 0 rgba(255, 255, 255, 0.15);
    -webkit-transition: color .2s linear;
    -moz-transition: color .2s linear;
    -o-transition: color .2s linear;
    transition: color .2s linear;
    -webkit-transition: text-shadow .2s linear;
    -moz-transition: text-shadow .2s linear;
    -o-transition: text-shadow .2s linear;
    transition: text-shadow .2s linear;
}

.nav a:hover
{
    color:#F7931E;
    text-shadow: 0 1.5em 0 rgba(247, 147, 30, 0.15);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,过渡属性会相互覆盖.就目前而言,文本阴影将动画,但不是颜色.我怎样让他们同时动画?谢谢你的回答.

cor*_*ard 538

在支持转换的所有浏览器中,转换属性以逗号分隔:

.nav a {
  transition: color .2s, text-shadow .2s;
}
Run Code Online (Sandbox Code Playgroud)

ease是默认的计时功能,因此您不必指定它.如果你真的想要linear,你需要指定它:

transition: color .2s linear, text-shadow .2s linear;
Run Code Online (Sandbox Code Playgroud)

这开始变得重复,所以如果你要在多个属性中使用相同的时间和计时功能,最好继续使用各种transition-*属性而不是速记:

transition-property: color, text-shadow;
transition-duration: .2s;
transition-timing-function: linear;
Run Code Online (Sandbox Code Playgroud)

  • 我假设因为transform是一个顺序很重要的链,所以如果你习惯了函数链,语法会很好,而转换需要一个完全独立元素的无序列表,所以逗号是合适的 (10认同)
  • 为什么这个逗号分开但变换不是!来标准.... (4认同)
  • 作为关于 CSS 中过渡的一般性评论,人们应该记住,一个接一个地拥有多个过渡定义是行不通的,为了实现这一点,这些定义必须位于相同的定义中(如此处的 SA 中所示)。根据CSS的基本规则,应用“最新”规则,因此如果单独的行中有多个定义,则仅应用最后一个定义。供参考 (4认同)

XML*_*XML 36

您还可以简单地使用:

.nav a {
    -webkit-transition: all .2s;
}
Run Code Online (Sandbox Code Playgroud)

  • 除非另有说明,否则您实际上可以删除"all",因为这是默认值. (43认同)
  • +1是一个很好的观点,但我认为将其保留在那里是非常有用的,特别是对于团队之间的一致性和理解. (13认同)
  • 当心这个!如果为手机开发,结合​​硬件加速元素,会使新设备出现故障,旧设备无法使用。 (3认同)
  • @XML的解释方式有两个负面影响。1,由于使用“ all”,浏览器添加了额外的资源。浏览器将仔细听该元素,以等待性能不佳的任何更改,并可能造成页面混乱。2,如果开发人员以后放入背景颜色,则可能会产生意想不到的效果,然后将背景颜色转换为预期或不需要的颜色。 (3认同)
  • 谢谢,@CanerŞahin.您能否提供任何文档或基准测试工具来帮助人们理解这一点?另外,你是否看到证据显示"全部"比根本不使用说明者更糟糕? (2认同)
  • 在转换定义下使用“all”当然是可以的,但只有当当前元素的所有转换的定义对于持续时间(“.5s”、“1s”等)和时间都相同时才相关函数(“缓入缓出”等)。否则,必须按完全定义的每种类型(当然也用逗号分隔)来分隔定义。 (2认同)

Del*_*ani 29

类似下面的内容将同时允许多个转换:

-webkit-transition: color .2s linear, text-shadow .2s linear;
   -moz-transition: color .2s linear, text-shadow .2s linear;
     -o-transition: color .2s linear, text-shadow .2s linear;
        transition: color .2s linear, text-shadow .2s linear;
Run Code Online (Sandbox Code Playgroud)

示例:http://jsbin.com/omogaf/2


Cor*_*ung 24

如果您将所有属性设置为相同的动画,则可以单独设置每个属性,这样您就不会重复代码.

 transition: all 2s;
 transition-property: color, text-shadow;
Run Code Online (Sandbox Code Playgroud)

这里有更多关于它的内容:CSS过渡速记有多个属性?

我会避免使用all属性(transition-property覆盖'all'),因为你可能会遇到不需要的行为和意外的性能命中.