Pure CSS cross browser animations for fun and profit

Front End North

Saturday November 15th

Liam Richardson

Front-end developer

Sigma Consulting Solutions ltd.

@meevil

'Sup

What you'll learn...

By the end of this presentation, you'll (hopefully) have learned how to...

  • Create subtle transitions
  • Create complex animations
  • Animate SVG's

 

Let's begin our whistle stop tour!

5 essential lessons

A brief history of animation on the web

GIF's FTW

Java Applets

All hail Flash

... Oh

R.I.P in peace, Flash

The open web

Want to do animation? Pure CSS is the way forward

Lesson 1

Onto the fun stuff...

A note about code...

Transitions

.mybackground span {
    transition: opacity 2.5s ease;
}

The transition property allows you to smoothly affect an element when changing from one state to another 

.style--one
.style--two
transition: border 5s linear;

The transition property can be triggered by any kind of "state" change

:hover

JavaScript prompted class change

How did that work?

.mybackground {
    position: relative;
    display: inline-block;
    text-indent: -9999px;
    width: 250px;
    height: 365px;
    background: url(http://imagehost.vanweerd.com/images/testdm3.jpg);
    background-position: 0 0;
}

.mybackground span {
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    background: url(http://imagehost.vanweerd.com/images/testdm3.jpg);
    background-position: 0 -365px;
    opacity: 0;
}
.mybackground span {
    transition: opacity 2.5s ease;
}

Animation made easy

.mybackground span {
    opacity: 0;
    transition: opacity 2.5s ease;
}

.mybackground span:hover {
    opacity: 1;
}
transition-property: width;
transition-duration: 1s;
transition-timing-function: linear;
transition-delay: 2s;
transition: width 1s linear 2s;

What can you use it on?

Supports 81 properties

 

Classed as "Animatable"

transition: width 2s, height 2s, transform 2s;
transition: all 2s linear;

Ok, so what CAN'T you use it on?

http://oli.jp/2010/css-animatable-properties/

  • background-image (sort of works, sometimes)
  • float
  • height or width using the value auto (currently both values must be a length or percentage)
  • display between none and anything else
  • position between static and absolute

When should you use it?

On the majority of projects?

 

  • As little as possible
  • As subtly as possible

Buttons and links

Image transitions

Smooth UI

Sass <3

@mixin transition($transition-property, $transition-time, $method) {
    transition: $transition-property $transition-time $method;
}

Transitions allow you to create smooth, subtle animations with ease

Lesson 2

What about "REAL" animation?

Keyframes

@keyframes mymove {
    from {top: 0px;}
    to {top: 200px;}
}

How do keyframes work?

Keyframes are essentially a  list of what the animation should do over a defined period of time

Let's see them in action

How did that work?

.car {
  animation-name: drive;
  animation-duration: 2s;
}

@keyframes drive {
  from {margin-left: 0px;}
  to {margin-left: 400px;}
}

CSS @keyframes

@keyframes drive {
  from {margin-left: 0px;}
  to {margin-left: 400px;}
}

@keyframes %

@keyframes drive {
  0% {margin-left: 0px;}
  50%{margin-left: 200px;}
  100% {margin-left: 400px;}
}

Standard CSS

.car {
  animation-name: drive;
  animation-duration: 2s;
}

What can you change using @keyframes?

The same 81 properties that you can influence with transition can be changed with @keyframes as well

Properties, properties, properties

  • animation-delay
  • animation-direction
  • animation-duration
  • animation-fill-mode
  • animation-iteration-count
  • animation-name
  • animation-play-state
  • animation-timing-function

animation-timing-function

linear

ease-in

ease-out

So many options

  • linear
  • ease
  • ease-in
  • ease-out
  • ease-in-out
  • cubic-bezier(n,n,n,n)

When should you use it?

On projects that require additional visual "flair" or engagement that traditional methods can't provide.

 

  • As little as possible
  • As subtly as possible
  • Ensure the design doesn't rely on it

Adding fluidity to an otherwise static design

Creating visual flair

Enhancing dull UI's

Doing something crazy

http://codepen.io/Xpressive_Team/full/LeHGF/

Keyframes allow you to create amazing animations that work

seamlessly across

modern browsers

Lesson 3

SVG + CSS animation = Awesomeness

My god, it's full of code...

Code you can apply classes too!

  <rect class="background" fill="#D03E27" width="400" height="400" />

  <path class="letter" fill="#F4F4F4" d="M60.858,129...." />
  <path class="letter" fill="#F4F4F4" d="..." />

Allowing you to do cool stuff!

.path {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
  animation: dash 5s linear alternate infinite;
}

@keyframes dash {
  from {
    stroke-dashoffset: 1000;
  }
  to {
    stroke-dashoffset: 0;
  }
}

A larger playset - SVG

only properties

clip-rule, flood-color, flood-opacity, stop-opacity, kerning, tech-anchor, color-profile, color-rendering, fill, fill-opacity, fill-rule, marker, marker-end, marker-mid, marker-start, stroke, stroke-width, stop-color, lighting-color, enable-background, dominant-baseline, color-interpolation-filters, color-interpolation, glyph-orientation-horizontal, glyph-orientation-vertical, shape-rendering, baseline-shift, alignment-baseline, stroke-miterlimit, stroke-linejoin, stroke-linecap, stroke-dashoffset, stroke-dasharray, stroke-opacity

SVG's are potentially the future of web graphics, and give CSS animation

super powers

Lesson 4

Get experimenting with transforms!

Get creating with @keyframes!

Webkit, you silly thing

/* Chrome, Safari, Opera */
@-webkit-keyframes myfirst {
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}

/* Standard syntax */
@keyframes myfirst {
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}

Stop waiting around, get creating!

Lesson 5

Additional reading

  • http://valhead.com/book/
  • http://slides.com/sarasoueidan/styling-animating-svgs-with-css#/
  • http://www.smashingmagazine.com/2014/11/03/styling-and-animating-svgs-with-css/
  • http://www.smashingmagazine.com/2014/04/15/understanding-css-timing-functions/

Thank you! Any questions?

@meevil

Pure CSS cross browser animations for fun and profit

By Liam Richardson

Pure CSS cross browser animations for fun and profit

The accompanying slides for my talk on CSS animations and transitions, presented at Front End North in Manchester on Saturday November 15th, 2014.

  • 1,583