CSS过渡速记有多个属性?

Gre*_*ijn 477 css webkit css3 shorthand css-transitions

我似乎找不到具有多个属性的CSS转换速记的正确语法.这没有做任何事情:

.element {
  -webkit-transition: height .5s, opacity .5s .5s;
     -moz-transition: height .5s, opacity .5s .5s;
      -ms-transition: height .5s, opacity .5s .5s;
          transition: height .5s, opacity .5s .5s;
  height: 0;
  opacity: 0;
  overflow: 0;
}
.element.show {
  height: 200px;
  opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)

我用javascript添加show类.元素变得更高且可见,它不会过渡.在最新的Chrome,FF和Safari中进行测试.

我究竟做错了什么?

编辑:为了清楚,我正在寻找速记版本来缩小我的CSS.所有供应商前缀都足够臃肿.还扩展了示例代码.

Rém*_*ton 705

句法:

transition: <property> || <duration> || <timing-function> || <delay> [, ...];
Run Code Online (Sandbox Code Playgroud)

请注意,如果指定了后者,则持续时间必须在延迟之前.

个人转换结合在速记声明中:

-webkit-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
-moz-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
-o-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
Run Code Online (Sandbox Code Playgroud)

或者只是将它们全部转换:

-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子.这是另一个具有延迟属性的.


编辑:此前列出的是兼容性和已知问题transition.删除以方便阅读.

底线:只需使用它.对于所有应用程序,此属性的性质不会中断,并且全球的兼容性现在远高于94%.

如果您仍想确定,请参阅http://caniuse.com/css-transitions

  • 转换所有属性而不仅仅是您需要的属性时,肯定会对性能产生影响.如果你有很多元素同时转换*all*属性,它可能会造成严重的破坏.关于`ms-transition`,我不知道是什么原因,现在IE10已经出来了,为什么还有人会使用`ms-transition`而不是标准的`transition`.同时使用它们不会有任何麻烦,但它会,特别是在过渡繁重的样式表上,膨胀你的CSS.更重要的是,文件大小也会受到影响. (8认同)
  • 值得指出的是,使用'all'比指定特定属性要慢. (5认同)
  • 使用"all"而不是列出特定属性是否有任何性能/内存/其他含义?例如,如果我打算只转换`background和`color` - 我最好指定两者,或者只使用`all`?另外 - 鉴于IE6-9不支持转换,IE10支持它们没有前缀 - 是否有任何上行/下行包括`ms-transition:`指令? (3认同)
  • 我有同样的问题,似乎使用"过渡:不透明度1s .5s,最大高度.5s 0"并没有工作,而"过渡:不透明度1s .5s,最大高度.5s 0s"是.我第一次看到css中零值所需的单位! (3认同)
  • 你试过这个吗?它对我不起作用。我也不能使用 all 属性,因为我在第二个属性上有延迟。 (2认同)

Jas*_*son 403

如果你想要以相同的方式转换几个特定的​​属性(因为你也有一些特别希望转换的属性,比如说opacity),另一种选择就是做这样的事情(为简洁起见省略了前缀):

.myclass {
    transition: all 200ms ease;
    transition-property: box-shadow, height, width, background, font-size;
}
Run Code Online (Sandbox Code Playgroud)

第二个声明覆盖了all它上面的速记声明,并使(偶尔)更简洁的代码.

演示

  • 比接受的答案更喜欢这个答案. (5认同)
  • 这很有用!不仅仅是因为`transition-property`覆盖,还因为例如`transition-delay`需要在速记之后指定(至少在webkit中).换句话说,简写意味着"转换延迟"为0,并在速记将其设置回0之前放置一个独立的延迟. (3认同)
  • 迷人的!真的很喜欢这种方法! (3认同)

小智 27

我用这个:

element{
   transition : height 3s ease-out, width 5s ease-in;
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是我一直在寻找的 - 多个属性的简写。谢谢! (4认同)

Gan*_*ula 5

需要注意的一件重要事情是 CSStransition属性本身是一种简写 -正如MDN Web 文档中提到的

CSS属性是、、和transition的简写属性。transition-propertytransition-durationtransition-timing-functiontransition-delay

这种简写的理想用途是结合单个转换的各种成分属性。如果这用于组合多个过渡,它将开始变得笨拙。

因此,当同一元素上有两个以上具有不同组成属性的转换时,单独编写它们而不是使用简写变得更容易transition。例如:

这是一个元素上的多个转换的简写版本(选项 1):

transition: transform 0.5s ease-in-out, box-shadow 0.2s ease-out, filter 0.1s ease-out, color 0.25s ease-in 0.2s;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这变得很笨拙并且有点难以可视化。
可以像这样应用相同的 CSS(选项 2):

transition-property: transform, box-shadow, filter, color;
transition-duration: 0.5s, 0.2s, 0.2s, 0.25s;
transition-timing-function: ease-in-out, ease-out, ease-out, ease-in;
transition-delay: 0s, 0s, 0s, 0.2s
Run Code Online (Sandbox Code Playgroud)

当然,最终这一切都取决于您对输入和维护源代码的偏好。但我个人更喜欢第二种选择。


提示:

使用此功能的另一个好处是,如果所有转换的构成属性之一都相同,则无需多次提及它。例如,在上面的例子中,如果所有的transition-duration都是相同的(0.5s),你可以这样写:

transition-property: transform, box-shadow, filter, color;
transition-duration: 0.5s;
transition-timing-function: ease-in-out, ease-out, ease-out, ease-in;
transition-delay: 0s, 0s, 0s, 0.2s
Run Code Online (Sandbox Code Playgroud)