如何在一个元素上有多个CSS过渡



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

正如您所看到的,转换属性正在相互覆盖。现在,文本阴影会动起来,但颜色不会动。如何让它们同时动画?谢谢你的回答。

在所有支持过渡的浏览器中,过渡属性都是用逗号分隔的:

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

编辑:我不知道是否要删除这篇文章。从理解CSS语法的角度来看,让人们知道all的存在是件好事,有时它可能比一百万个单独的声明要好,这取决于CSS的结构。另一方面,它可能有性能损失,尽管我还没有看到任何支持该假设的数据。现在,我将离开它,但我想让人们意识到它是一个混合包。

原始文章:

您也可以简单地使用:

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

FWIW: all在没有指定的情况下是隐含的,所以transition: .2s;会让你到达相同的位置。

如果你让所有的属性动画相同,你可以单独设置每个,这将允许你不重复的代码。

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

有更多关于这里:CSS转换速记与多个属性?

我将避免使用属性all (transition-property会覆盖'all'),因为您可能会导致不想要的行为和意外的性能冲击。

像下面这样的东西可以同时允许多个过渡:

-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

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

可以将多个转换设置为不同的持续时间,延迟和定时功能值。使用,

分隔不同的过渡
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/

下面是一个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;
}

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

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

相关内容

  • 没有找到相关文章

最新更新