399

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

如您所见,过渡属性正在相互覆盖。就目前而言,文本阴影将动画,但不是颜色。我如何让它们同时制作动画?感谢您的任何回答。

4

9 回答 9

715

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

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

ease是默认的计时函数,所以你不必指定它。如果你真的想要linear,你需要指定它:

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

这开始变得重复,因此如果您要跨多个属性使用相同的时间和计时函数,最好继续使用各种transition-*属性而不是速记:

transition-property: color, text-shadow;
transition-duration: .2s;
transition-timing-function: linear;
于 2011-08-13T03:12:15.220 回答
38

编辑:我很纠结是否要删除这篇文章。作为理解 CSS 语法的问题,人们知道all存在是件好事,而且有时它可能比一百万个单独的声明更可取,具体取决于 CSS 的结构。另一方面,它可能会降低性能,尽管我还没有看到任何支持该假设的数据。现在,我会留下它,但我希望人们意识到这是一个混合包。

原帖:

您还可以简单地使用:

.nav a {
    transition: all .2s;
}

FWIW:all如果未指定,则暗示,因此transition: .2s;会将您带到同一个地方。

于 2012-06-15T22:17:48.927 回答
30

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

-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

于 2011-08-13T03:09:28.093 回答
29

如果您使所有属性的动画效果相同,则可以分别设置每个属性,这样您就不会重复代码。

 transition: all 2s;
 transition-property: color, text-shadow;

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

我会避免使用所有属性(转换属性覆盖“全部”),因为您最终可能会出现不需要的行为和意外的性能影响。

于 2014-09-16T20:29:39.557 回答
2
.nav a {
    transition: color .2s, text-shadow .2s;
}
于 2014-07-25T04:43:04.547 回答
2

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

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/

于 2018-04-17T13:56:20.330 回答
0

这是一个 LESS mixin,用于一次转换两个属性:

.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;
}
于 2013-06-26T15:30:02.750 回答
0

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

#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;
 }
于 2019-05-18T02:31:14.337 回答
0

Sass您可以使用以下代码实现

@mixin transition($transitions...) {
  $unfoldedTransitions: ();
  @each $transition in $transitions {
    $unfoldedTransitions: append($unfoldedTransitions, unfoldTransition($transition), comma);
  }
  
  -webkit-transition: $unfoldedTransitions;
  transition: $unfoldedTransitions;
}

@function unfoldTransition ($transition) {
  // Default values
  $property: all;
  $duration: .2s;
  $easing: null; // Browser default is ease, which is what we want
  $delay: null; // Browser default is 0, which is what we want
  $defaultProperties: ($property, $duration, $easing, $delay);

  // Grab transition properties if they exist
  $unfoldedTransition: ();
  @for $i from 1 through length($defaultProperties) {
    $p: null;
    @if $i <= length($transition) {
      $p: nth($transition, $i)
    } @else {
      $p: nth($defaultProperties, $i)
    }
    $unfoldedTransition: append($unfoldedTransition, $p);
  }

  @return $unfoldedTransition;
}
// Usage:   @include transition(width, height 0.3s ease-in-out);

所有功劳归于tobiasahlin https://gist.github.com/tobiasahlin

于 2021-06-30T07:05:48.447 回答