Sass Mixin for animation keyframe which includes multiple stages and transform property

后端 未结 2 1285
我在风中等你
我在风中等你 2020-12-16 02:36

Here is the standard CSS I am trying to produce but want to use a SASS Mixin to do the work.

STANDARD CSS

@-webkit-keyframes crank-up {
  100% { -web         


        
相关标签:
2条回答
  • 2020-12-16 03:01

    To deal with vendor-prefixers I recommend to use Autoprefixer instead of sass mixins.

    Autoprefixer interface is simple: just forget about vendor prefixes and write normal CSS according to latest W3C specs. You don’t need a special language (like Sass) or special mixins.

    Because Autoprefixer is a postprocessor for CSS, you can also use it with preprocessors, such as Sass, Stylus or LESS.

    So, in your case, you just need to write this:

    @keyframes crank-up {
      20%,
      40% { -webkit-transform: translateY(34px); }
      80% { opacity: .8; }
      100% { -webkit-transform: rotate(360deg);}
    }
    

    And autoprefixer converts it automatically to:

    @-webkit-keyframes crank-up {
      20%, 40% {
        -webkit-transform: translateY(34px);
      }
    
      80% {
        opacity: .8;
      }
    
      100% {
        -webkit-transform: rotate(360deg);
      }
    }
    
    @keyframes crank-up {
      20%, 40% {
        -webkit-transform: translateY(34px);
      }
    
      80% {
        opacity: .8;
      }
    
      100% {
        -webkit-transform: rotate(360deg);
      }
    }
    

    Autoprefixer is widely supported, you can process your scss or css styles with this tool through Compass, Grunt, Sublime Text, node.js, Ruby, Ruby on Rails, PHP...

    Here is more info about the project

    0 讨论(0)
  • 2020-12-16 03:20

    If you are already using Compass and don't want to load whole bounce of extra library and just want to write some mixing then THIS is the best option.

    /* animation mixing
    keyframe animation
    @include animation('animation-name .4s 1')*/
    
    @mixin animation($animate...) {
    $max: length($animate);
    $animations: '';
    
    @for $i from 1 through $max {
        $animations: #{$animations + nth($animate, $i)};
    
        @if $i < $max {
            $animations: #{$animations + ", "};
        }
    }
    -webkit-animation: $animations;
    -moz-animation:    $animations;
    -o-animation:      $animations;
    animation:         $animations;
    }
    

    And here is the keyframe Mixing to include CSS3 properties inside particular browser vender prefix, instead of @include translate, we use the full css (Note: if you're using Sass 3.3 or older, you'll need to remove the !global flag):

    @mixin keyframes($animationName) {
        @-webkit-keyframes #{$animationName} {
            $browser: '-webkit-' !global;
            @content;
        }
        @-moz-keyframes #{$animationName} {
            $browser: '-moz-' !global;
            @content;
        }
        @-o-keyframes #{$animationName} {
            $browser: '-o-' !global;
            @content;
        }
        @keyframes #{$animationName} {
            $browser: '' !global;
            @content;
        }
    } $browser: null;
    

    For your reference here is the SASS example:

    @include keyframes(animation-name) {
       0% {
           #{$browser}transform: translate3d(100%, 0, 0);
       }
       100% {
          #{$browser}transform: translate3d(0%, 0, 0);
       }
    }
    

    And here how you include your animation to the particular class or ids

    .new-class {
    @include animation('animation-name 5s linear');
    }
    

    That's all.

    0 讨论(0)
提交回复
热议问题