I would like to provide another explanation of cubic-bezier function by someone who just understood how it works. I had some trouble with it while going through the tutorials on https://freecodecamp.org. I grasped it after reading the previous answer by eirenaios and using the cubic-bezier builder.
Post on my blog
- Bezier curve is based on four points: P0, P1, P2, and P3. P0 is set by
default to (0, 0) and P3 is set by default to (1, 1).
The curve will stretch differently depending on what coordinates you give for points P1 and P2.
Cubic-bezier example
In the example above P1 is set to (0.1, 0.1) and P2 is set to (1, 0). The speed of the animation depends on how much does the state change per given amount of time. In this example, the animation gets faster with time. For the first half of the time used for the animation, it will cover about 15% of the distance (when Time = 0.5, State ~ 0.15). It will cover the remaining 85% of the distance in the second half.
Please check the example in jsfiddle to see how the animation works in practice: cubic-bezier ball animation
HTML:
<div class="ball"></div>
CSS:
.ball{
background: red;
border-radius: 50%;
position: fixed;
width: 50px;
height: 50px;
top: 50%;
animation-name: bounce;
animation-duration: 4s;
animation-iteration-count: infinite;
animation-timing-function: cubic-bezier(.10, .10, 1, 0);
}
@keyframes bounce {
0% {
left: 0%;
}
100% {
left: 100%;
}
}
In the example, the ball moves from the left edge of the screen to the right edge over the course of 4 seconds. Keyframes are there to set where the animation should begin and end, animation-timing-function: cubic-bezier() to set the speed of the animation at different points in time.