这是一个非常简单的问题,但是我找不到关于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);
}


如您所见,过渡属性相互覆盖。就目前而言,文本阴影将设置动画,但颜色将不设置动画。如何让它们同时进行动画处理?感谢您的回答。

评论

不要忘记这种过渡:对于safari / ipad来说,一切都很麻烦:joelglovier.com/writing/…

#1 楼

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

.nav a {
  transition: color .2s, text-shadow .2s;
}
是默认的计时功能,因此您不必指定它。如果您确实需要ease,则需要指定它:跨多个属性的函数,最好继续使用各种linear属性,而不是简写形式:

transition: color .2s linear, text-shadow .2s linear;


评论


我假设因为转换是顺序重要的链,所以如果您习惯了功能链,那么语法会很不错,而过渡则需要一个无序的完全独立元素列表,因此逗号是合适的

– mirichan
16 Mar 10 '16 at 13:36

作为关于CSS过渡的一般性评论,应该记住,一个接一个的多个过渡定义将不起作用,并且要实现这一点,这些定义必须具有相同的定义(如此处的SA)。根据CSS的基本规则,“最新”规则适用,因此,如果在单独的行中有多个定义,则仅应用最后一个定义。费耶

–TheCuBeMan
18年8月15日在7:30

#2 楼

您还可以通过以下方式显着地实现:
.nav a {
    transition: all .2s;
}


评论


实际上,您可以删除“全部”,因为除非另有说明,否则这是默认设置。

– joshnh
2012年9月8日于7:07

+1是一个很好的观点,但我认为将其保留在其中非常有用,特别是对于团队之间的一致性和理解。

– XML
2012年10月2日23:07



当心!如果针对移动设备进行开发,则结合硬件加速元素会使新设备出现故障,而旧设备将无法使用。

–伊利亚·卡诺霍夫(Ilya Karnaukhov)
2014年9月19日上午11:09

谢谢,@CanerŞahin。您能给我们提供任何文档或基准测试工具来帮助人们理解这一点吗?另外,您是否看到证据表明“全部”要比根本不使用任何说明符更糟糕?

– XML
2014年11月18日在22:48



@XML的解释方式有两个负面影响。 1,由于使用“ all”,浏览器添加了额外的资源。浏览器将仔细听该元素,等待性能不佳的任何更改,并且可能创建页面垃圾。 2,如果开发人员以后放一个可能会不期望或不需要的背景色,则可以创建意想不到的效果。

– Stefan Burt
17-6-27在9:17



#3 楼

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

-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;


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

#4 楼

如果将所有属性设置为相同的动画,则可以分别设置每个属性,这样就不必重复代码了。

具有多个属性的过渡速记吗?

我会避免使用属性all(过渡属性会覆盖“ all”),因为您最终可能会遇到不必要的行为和意外的性能损失。

#5 楼

.nav a {
    transition: color .2s, text-shadow .2s;
}


#6 楼

这是用于一次转换两个属性的LESS混合:

.transition-two(@transition1, @transition1-duration, @transition2, @transition2-duration) {
 -webkit-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
    -moz-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
      -o-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
          transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
}


评论


autoprefixer更好!

–重写
2014年12月28日在19:04

自动前缀+手写笔FTW。

–Jason Lydon
15年8月24日在20:58

#7 楼

可以使用持续时间,延迟和计时功能的不同值来设置多个转换。要拆分不同的过渡,请使用,

button{
  transition: background 1s ease-in-out 2s, width 2s linear;
  -webkit-transition: background 1s ease-in-out 2s, width 2s linear; /* Safari */
}


参考:https://kolosek.com/css-transition/

#8 楼

也可以避免完全指定属性。

#box {
  transition: 0.4s;
  position: absolute;
  border: 1px solid darkred;
  bottom: 20px; left: 20px;
  width: 200px; height: 200px;
  opacity: 0;
}

#box.on {
  opacity: 1;
  height: 300px;
  width: 500px;
 }