Okay, so you might be debating right now
whether to use "set interval" or "request animation frame"
for what you what to animate,
but I'm going to go ahead and throw one more option in the mix.
You see, in Chrome, Firefox, and IE10 Plus
there's actually a way in CSS
to make animations
without writing any Javascript at all.
Let's comment out the code we just wrote
and try it for the "Oh noes" animation.
Just put a big multiline comment around all that.
So we start by adding a "" type to the page
and then adding something that looks like a CSS rule,
but is actually our animation definition.
So we write, "@keyframes" and then
a name for animation: "getbigger,"
and then curly brackets.
To do a simple animation that goes from one state to another state,
We'll define 'from' and 'to' states
Inside 'from,' we'll write what the starting
CSS property should be.
And remember how we set it to 50px
at the beginning.
Inside 'to,' we'll write what the
end property should be.
And here, maybe, it was 300px,
is what we ended at. Remember?
Now that we've defined an animation
we need to tell the browser what element
should actually use this animation.
So, actually, we'll add a normal CSS rule
for "Oh noes."
And inside here, we specify the animation name:
that's "getbigger."
And then animation duration: 3 seconds.
Depending on what browser you're in,
some of you right now be thinking
"Woah! Sweet it's working!"
In other browsers though, like Safari or Chrome,
it's probably not working.
That's because there is something called
"vendor prefixes."
Sometimes, a browser decides to support
a fancy new feature, but they put
a "vendor prefix" on that feature
to indicate that it might change later.
This is just their browser's attempt at the feature.
To make this work in Chrome, it's not already,
we have to replicate everything we just
did and stick "-webkit-" in front.
So we need to replicate this part
and put "-webkit-" here
and then here, we'll replicate this
and put "-webkit-", "-webkit-."
Woah, sweet! Now it's getting bigger
for every browser.
Hopefully, by the time you watch this talk through,
those "vendor prefixes" won't be necessary,
but it's good to know that they exist
because you might need to use them for some other feature one day.
There's also one more way in CSS
to make animations
and that's with a transition property.
It tells the browser how to transition
smoothly from one property to the next
Let's say we want the font size of the
time left to get bigger
when you mouse over it.
We could do all that in Javascript by
assigning an event listener for the
mouse over event. Then using a request
animation frame to increase the font size
property each time.
But, we can also do that entirely in CSS.
Let's think.
How would we normally change the font size
to be bigger, when hovering, in CSS?
We can do that with a hover rule.
We say "#countdown:hover," and then
"font-size: 150px"
Okay, and now we just need to tell the
browser to transition the font size property,
how much time to transition it over, and
what timing function to use.
So we say "transition: font-size 1s linear;".
Now, you should pause the talk through and
try hovering over the text
to see what happens.
If you're in Chrome, Firefox, or IE10 Plus
then it should get bigger smoothly
and you don't need any "vendor prefixes"
for this technique.
There is a whole lot that you can do with
CSS animations and transitions
and browsers are pretty good at
rendering them quickly. So I encourage you
to explore both of them a lot more.