The Easy Way to Do Web Animations — Transcript

Learn the easiest way to create smooth web animations using CSS animation and transition properties with practical examples and timing functions.

Key Takeaways

  • CSS animation and transition properties provide powerful shorthand methods for creating smooth animations.
  • Timing functions greatly affect the feel of animations and can be customized using cubic-bezier curves.
  • Combining CSS with JavaScript enables dynamic and responsive UI animations that adapt to user interaction.
  • Using pseudo elements and layering techniques can create visually appealing effects like sliding backgrounds and shine.
  • Understanding core animation principles allows developers to build both subtle and complex web animations.

Summary

  • The video explains the CSS animation shorthand property and how to use keyframes to choreograph animations.
  • It covers timing functions like linear, ease-in, ease-out, and cubic-bezier for smooth and natural motion.
  • Demonstrates how to use the transition property for natural style changes between states.
  • Shows a popular UI pattern using a 'ghost' element and JavaScript to create a sliding background effect on navigation menus.
  • Explains stacking buttons with relative and absolute positioning to create expandable button groups.
  • Details creating button animations such as scaling, glowing, and shine effects using pseudo elements and transitions.
  • Introduces the concept of 3D animations on the web using CSS perspective and transform-style properties.
  • Emphasizes core motion principles as the foundation for all web animations, from simple to complex.
  • Highlights the interplay between CSS for styling and JavaScript for dynamic measurements and control.
  • Encourages experimenting with timing functions and CSS properties to achieve desired animation effects.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
The easiest way to animate something is to use the animation property. It is a shorthand for multiple animation properties like animation name, duration, timing function, count and others.
00:17
Speaker A
We then target the animation name using the keyframes property to actually animate that element.
00:18
Speaker A
This name doesn't matter, for example, we could have used move or slide and it will still work.
00:25
Speaker A
Then we are telling it to take exactly two seconds to finish the animation.
00:30
Speaker A
The timing function is pretty interesting and we will cover it in a minute, but ease-in-out tells the element to start slowly, speed up in the middle and then slow down again at the end.
00:42
Speaker A
This makes the movement look smooth and natural, and animation count is pretty straightforward.
00:49
Speaker A
Like if you put nothing, the browser plays the animation and stops.
00:53
Speaker A
If you write a number, the animation will play that many times.
00:58
Speaker A
Since we have written infinite, it keeps doing this loop forever.
01:03
Speaker A
The keyframes are the actual script or choreography for the movement.
01:08
Speaker A
We use percentages to tell the browser what should happen at specific moments during those two seconds.
01:13
Speaker A
Like translate is a pretty basic property.
01:20
Speaker A
At 0%, the element sits at its original spot.
01:30
Speaker A
At the one second mark, which is 50% of two seconds, the element has moved two rem to the right.
01:40
Speaker A
By the time the two seconds are up, it moves back to zero.
01:47
Speaker A
Since we have set 0% and 100% to the same value.
01:53
Speaker A
A pretty common and effective technique for animation.
01:58
Speaker A
If your animation just has a start and end state, we can do it just like this.
02:05
Speaker A
From is like the start or 0% and to means end or 100%.
02:10
Speaker A
Transform rotate is a pretty basic property that does exactly what it says.
02:16
Speaker A
In the same way, I've used very basic properties to create these animations.
02:22
Speaker A
I've just put effects like scale, skew, width, opacity and others inside keyframes.
02:30
Speaker A
Web animation is built on a few core motion principles.
02:34
Speaker A
Once you understand these, you can create almost any animation you imagine.
02:42
Speaker A
From subtle UI transitions to complex interactive effects.
02:48
Speaker A
Every animation, no matter how advanced it looks, is just a combination of these basics.
02:55
Speaker A
Now, before we move on with the animations, let me first explain timing functions.
03:02
Speaker A
CSS already gives us a few keywords like linear, ease-in, ease-out and others.
03:09
Speaker A
They are self-explanatory as you can see from these examples.
03:13
Speaker A
Linear follows the same speed throughout the animation.
03:18
Speaker A
Ease slows down at the start and end.
03:21
Speaker A
Ease-in starts slow and speeds up at the end.
03:25
Speaker A
Imagine how a car starts from a red light.
03:31
Speaker A
Ease-out does the opposite like the car is coming to a stop.
03:36
Speaker A
Then there is cubic-bezier where you can play all sorts of timing functions.
03:43
Speaker A
It looks complex, but if you use a tool like this, things will start to make sense.
03:49
Speaker A
Imagine we are moving something from the bottom left to the top right corner.
03:55
Speaker A
Linear would be connecting the two with a straight line.
04:00
Speaker A
A slow start means that it will pick up speed later.
04:06
Speaker A
And a fast start means it has to slow down somewhere because the time is constant.
04:13
Speaker A
It is simple and intuitive math and you have to play with it to get it yourself.
04:19
Speaker A
These curves can create much smoother transitions that the default ones usually lack.
04:25
Speaker A
Now that we have covered basic animation styles and timing functions, it is time to start animating some real stuff.
04:33
Speaker A
This first one is very simple, but I want to show this transition property as well.
04:40
Speaker A
As the name suggests, transition property allows us to transition from style X to Y naturally.
04:46
Speaker A
Just like the animation property, it is a shorthand for multiple properties.
04:50
Speaker A
First, you select what you want to animate.
04:55
Speaker A
Then the duration and timing function.
04:58
Speaker A
Let us see another brilliant use of transition property.
05:03
Speaker A
This is a very popular UI pattern.
05:07
Speaker A
A navigation menu where the active background does not just appear and disappear.
05:15
Speaker A
It slides and morphs to fit the link you are hovering over.
05:20
Speaker A
It feels organic, almost like a liquid magnet.
05:24
Speaker A
To achieve this, we have to cheat a little.
05:28
Speaker A
The ghost element.
05:30
Speaker A
If you look at the HTML, you will see a div called links-tab-active.
05:36
Speaker A
It is empty.
05:39
Speaker A
It does not contain any text.
05:41
Speaker A
This is our ghost.
05:43
Speaker A
We place it absolutely, so it can float freely on top of the menu.
05:50
Speaker A
We also use z-index to make sure it sits behind the text links, acting like a spotlight background.
05:57
Speaker A
CSS is great at styling, but it is terrible at math.
06:01
Speaker A
It doesn't know that the home link is 60 pixels wide, but the services link is 90 pixels.
06:10
Speaker A
This is where JavaScript steps in.
06:12
Speaker A
We create a function called move.
06:15
Speaker A
It acts like a tailor with a measuring tape.
06:19
Speaker A
When you hover over a link, JavaScript instantly measures four things about that specific link.
06:26
Speaker A
How wide is it?
06:29
Speaker A
Client width.
06:31
Speaker A
How tall is it?
06:33
Speaker A
Client height.
06:35
Speaker A
How far from the left is it?
06:38
Speaker A
Offset left.
06:40
Speaker A
How far from the top is it?
06:42
Speaker A
Offset top.
06:44
Speaker A
Once JavaScript has those measurements, it grabs our ghost element and forces it to adopt those exact numbers.
06:54
Speaker A
It tells the ghost, hey, the user is looking at that link.
07:02
Speaker A
I need you to move to 150 pixels left and shrink your width to 80 pixels.
07:07
Speaker A
But if we just use JavaScript, the background would teleport instantly.
07:12
Speaker A
That is ugly.
07:14
Speaker A
That is where this one line of CSS comes into action.
07:18
Speaker A
Even though JavaScript changes the numbers instantly, CSS steps in and says, I will take 0.3 seconds to slide you to those new coordinates.
07:29
Speaker A
This creates the illusion that the background is intelligently sliding and reshaping itself to follow your mouse.
07:37
Speaker A
We are using all because we are changing position and width simultaneously.
07:44
Speaker A
This is exactly like example one.
07:50
Speaker A
But we are also creating a pseudo element and scaling it on hover.
07:56
Speaker A
Because I use transition all the time, I've created a variable that can be used multiple times without me actually typing it over and over again.
08:02
Speaker A
This is also very similar.
08:06
Speaker A
But instead, we are doing everything for the x-axis.
08:11
Speaker A
It is so simple, yet so effective just because of this single line of CSS.
08:18
Speaker A
Enough links, let's do some buttons.
08:21
Speaker A
This one is also pretty common.
08:25
Speaker A
You click one option to reveal more.
08:28
Speaker A
We set position relative on the parent and position absolute on all the buttons inside it.
08:37
Speaker A
This allows us to stack the buttons on top of each other, occupying the same physical space.
08:43
Speaker A
We give the main button a higher z-index so it sits on top.
08:48
Speaker A
The option buttons are hidden underneath the main button.
08:56
Speaker A
We also scale them down.
09:00
Speaker A
So they are physically smaller while hiding.
09:04
Speaker A
At this point, to the user, it looks like just one single button.
09:08
Speaker A
Then on click, we toggle the class active on the parent.
09:13
Speaker A
This blows them back up to full size and moves them to the specific coordinates.
09:20
Speaker A
Pretty simple stuff.
09:22
Speaker A
This next animation is also very simple.
09:26
Speaker A
We are adding an animation on click that does the following.
09:30
Speaker A
At 0%, we are keeping it as it is.
09:33
Speaker A
Then as the time goes, we are tweaking it to get a desired effect.
09:39
Speaker A
Like as you can see at 50%, the icon is the biggest, furthest and has a bigger glow.
09:46
Speaker A
You can see this more clearly if I increase the animation duration.
09:51
Speaker A
Another very common button animation is this shine effect we see everywhere.
09:55
Speaker A
It is actually very simple.
09:58
Speaker A
We create a pseudo element and position it left -100% of the button.
10:05
Speaker A
On hover, we change it to positive 100% resulting in this moving light effect.
10:11
Speaker A
If I set the left to zero and increase the opacity, you can see it is just a linear gradient that is being skewed a little.
10:17
Speaker A
This is one of the coolest things you can do with CSS because it breaks the flat rule of the web.
10:22
Speaker A
Usually, web pages are 2D.
10:27
Speaker A
Everything moves up, down, left or right on the X and Y axis.
10:34
Speaker A
But here, we are moving along the Z axis, which is depth.
10:39
Speaker A
This is the most important line of code here.
10:45
Speaker A
Without it, the animation will not look 3D.
10:50
Speaker A
It will just look like the card is getting squashed and stretched.
10:53
Speaker A
Think of perspective as the distance between the user's eyes and the screen.
11:00
Speaker A
If you set it to 100 pixels, it is like holding a book right against your nose.
11:05
Speaker A
At a bigger value like 800 pixels, it looks natural, like holding a card at arm's length.
11:11
Speaker A
Transform style preserve-3D is also very important.
11:17
Speaker A
You are telling the browser, hey, this container is a 3D space, do not flatten the elements inside it.
11:26
Speaker A
Let the children keep their own 3D position.
11:29
Speaker A
In the real world, if you write on a piece of paper and flip it over, you cannot see what is on the front.
11:36
Speaker A
But on websites, elements are usually transparent or visible from behind.
11:42
Speaker A
We have two separate HTML elements, one for the front and one for the back.
11:48
Speaker A
We glue them together using position absolute, but we tell the browser, if this side is facing away from the user, make it invisible.
11:55
Speaker A
The front side starts at zero.
11:58
Speaker A
So it's facing you.
12:00
Speaker A
We rotate the back side 180 degrees, so it's currently facing away.
12:07
Speaker A
Because of backface-visibility hidden, you cannot see the back card yet.
12:11
Speaker A
On click, we rotate the entire container 180.
12:18
Speaker A
The front which was at zero, rotates to 180.
12:24
Speaker A
Now it is facing the back, so it vanishes.
12:27
Speaker A
The back which was at 180, rotates another 180 to 360, which is zero.
12:35
Speaker A
Now it's facing the front, so it appears.
12:38
Speaker A
Notice we used that custom cubic-bezier again.
12:45
Speaker A
Because of this, the card swings slightly past the finish line and settles back.
12:52
Speaker A
Giving it a sense of physical weight and momentum.
12:56
Speaker A
You can use perspective for scroll animations as well.
13:00
Speaker A
But this time it's on the X-axis and I used Framer, the sponsor of this video.
13:06
Speaker A
To create this in just a few clicks.
13:10
Speaker A
Framer is a website builder trusted by everyone from startups to Fortune 500 companies.
13:17
Speaker A
I really like its web animation capabilities.
13:20
Speaker A
Like, take this scroll animation as an example.
13:24
Speaker A
I can just go into the effects panel and set a scroll transform like this.
13:31
Speaker A
Then choose a trigger point.
13:35
Speaker A
Which is the section in our case.
13:38
Speaker A
Then to set the keyframes.
13:40
Speaker A
We have the from and to states.
13:42
Speaker A
First, I will set the opacity and scale, and then rotate the section 90 degrees on the X-axis.
13:50
Speaker A
Then offset it like 50 pixels in the Y direction and we are done.
13:56
Speaker A
The two state can stay as is, because that's where the animation will end.
14:01
Speaker A
To add some depth, I already set the perspective to 800 pixels.
14:06
Speaker A
Can you believe we did this in like 30 seconds?
14:10
Speaker A
Some animations in Framer literally take one click.
14:13
Speaker A
Yes, one click.
14:15
Speaker A
And you have something like this.
14:18
Speaker A
Framer is packed with amazing tools and animations.
14:24
Speaker A
If you want to try it out, use my link in the description and apply the code Sajid to get a free month of Framer Pro.
14:30
Speaker A
This is one of the most satisfying animations you can build for an e-commerce site.
14:36
Speaker A
It solves a specific problem.
14:40
Speaker A
When a user clicks buy, how do they know it worked?
14:43
Speaker A
We could just show a boring item added text.
14:47
Speaker A
But instead, let us physically throw the item into the cart.
14:51
Speaker A
When you click the button, we do not move the actual product image.
14:56
Speaker A
If we did, the design would break.
14:59
Speaker A
Instead, we create a clone.
15:02
Speaker A
We immediately stick this clone exactly on top of the original image using position fixed.
15:08
Speaker A
To the user, nothing has changed yet.
15:11
Speaker A
But now we have a floating copy that is free to move anywhere on the screen without messing up the grid.
15:18
Speaker A
To make the image fly, we need to know two things.
15:22
Speaker A
Where are we starting?
15:24
Speaker A
The product image.
15:26
Speaker A
Where are we going?
15:28
Speaker A
The cart icon.
15:30
Speaker A
We use getBoundingClientRect for this.
15:33
Speaker A
Think of it as the browser's internal GPS.
15:36
Speaker A
It gives us the exact X and Y coordinates of those elements on your screen.
15:42
Speaker A
We calculate the difference.
15:46
Speaker A
Destination minus start equals distance to fly.
15:49
Speaker A
Element.animate is a modern JavaScript tool that works just like CSS keyframes, but for dynamic values.
15:56
Speaker A
We tell the browser, start at 0,0, right where the clone was created.
16:02
Speaker A
End at the calculated destination coordinates.
16:06
Speaker A
While you move, shrink down, scale 0.1.
16:10
Speaker A
And fade out, opacity zero.
16:13
Speaker A
This creates the illusion that the item is physically traveling across the screen and diving into the cart.
16:19
Speaker A
Animation is all about timing.
16:22
Speaker A
If we updated the cart number the moment you clicked, it would feel off because the item hasn't reached the cart yet.
16:29
Speaker A
We use a set timeout of 700 milliseconds, matching our flight time, to wait until the image hits the icon.
16:36
Speaker A
Once it lands, we update the number and play a quick pulse animation on the cart icon using .animate.
16:43
Speaker A
In the cart example, we are just sending the element from point X to Y.
16:46
Speaker A
What if you want to follow a specific path?
16:49
Speaker A
That is where this offset-path property comes in.
16:52
Speaker A
Think of offset-path as building the train tracks.
16:55
Speaker A
Content-box tells the browser.
16:59
Speaker A
Use the edge of my own box as the track.
17:02
Speaker A
Defining the track does not make the train move.
17:06
Speaker A
It just sits at the start.
17:08
Speaker A
Offset-distance 0% means start of the line.
17:11
Speaker A
100% means end of the line.
17:13
Speaker A
The animation logic is incredibly simple.
17:16
Speaker A
We do not need to calculate X and Y coordinates.
17:19
Speaker A
We just animate one property.
17:22
Speaker A
Go from zero to 100.
17:24
Speaker A
The browser handles all the heavy math.
17:26
Speaker A
It calculates exactly where the element should be on that curve at every millisecond.
17:30
Speaker A
But what if you want the object to follow a more complex path, like an icon shape or a curve?
17:35
Speaker A
That's where SVG paths come in.
17:37
Speaker A
If it's your first time seeing an SVG path, it might look scary.
17:43
Speaker A
But it's just a set of instructions for the browser to draw a vector shape.
17:47
Speaker A
And the good part is you don't have to write it yourself, you can export or copy the SVG from tools like Figma or from sites like these.
17:54
Speaker A
Once you have the path, you just replace this content-box with the path or do it right inside the SVG like this.
18:00
Speaker A
First, we give our path a unique ID.
18:03
Speaker A
Then we put a special tag called animateMotion.
18:06
Speaker A
Inside that, we use the mpath tag.
18:08
Speaker A
This is the link that tells the circle, ignore your own coordinates, find the path named heart-icon and ride it like a roller coaster.
18:15
Speaker A
Now doing animation inside SVG is a bit harder than CSS, but it scales very well.
18:20
Speaker A
Very handy if you want a bigger size on larger screens.
18:24
Speaker A
Another very useful path animation is actually creating or tracing a path.
18:30
Speaker A
This time we are going with a different approach.
18:33
Speaker A
Imagine a dotted line.
18:35
Speaker A
Stroke-dasharray controls how big the dashes and gaps are.
18:39
Speaker A
By setting pathLength to one, we are forcing the browser to pretend the entire heart shape is exactly one unit long.
18:45
Speaker A
We set the dash and gap size to one.
18:47
Speaker A
Essentially, we made a single giant dash that covers the whole shape.
18:52
Speaker A
The animation relies on stroke-dashoffset.
18:55
Speaker A
This pushes the start of the line forward or backward.
18:57
Speaker A
At one, we push the line all the way back so it is hidden.
19:00
Speaker A
At zero, we slowly pull it back into view.
19:03
Speaker A
This creates the illusion that the ink is flowing out of the pen in real time.
19:08
Speaker A
Speaking of flowing, what about this beautiful shimmering effect?
19:12
Speaker A
Like colors moving through a tube.
19:15
Speaker A
This requires a bit of creative thinking.
19:18
Speaker A
Usually, a gradient sits still.
19:21
Speaker A
It is like painting a wall.
19:23
Speaker A
But here, we are not animating the shape.
19:26
Speaker A
We are animating the paint bucket.
19:28
Speaker A
First, we define a linear gradient.
19:31
Speaker A
This is our paint swatch.
19:33
Speaker A
To animate the gradient, we use animateTransform inside the gradient itself.
19:37
Speaker A
See that 12, 12 in the rotate code?
19:41
Speaker A
That is the center point of our SVG.
19:44
Speaker A
Since the view box is 24 by 24.
19:47
Speaker A
We are telling the gradient to spin 360 degrees around the center of the icon.
19:52
Speaker A
The heart shape acts like a window.
19:55
Speaker A
The gradient spins around in the background, but you only see it where the heart lines are.
20:00
Speaker A
It looks like the colors are chasing each other around the loop.
20:03
Speaker A
SVG is the goat for web animations.
20:07
Speaker A
Look at this auth animation.
20:11
Speaker A
So many things are happening at the same time.
20:14
Speaker A
But there's nothing new here.
20:16
Speaker A
We already did the shiny button.
20:19
Speaker A
The SVG itself is just a path where we animate the stroke-dashoffset from one to zero.
20:25
Speaker A
And for the heart loop, earlier we used SVG animation, but here we're doing the same thing with CSS.
20:32
Speaker A
The sliding doors are before and after pseudo elements.
20:36
Speaker A
We have set their width to 50% and positioned them left and right side of the container.
20:42
Speaker A
But as I said earlier, animation is all about timing.
20:46
Speaker A
We have a delay of one second on the doors because we are waiting for three previous animations to finish.
20:53
Speaker A
The actual SVG transition is already delayed by 0.3 seconds because of the shine animation.
20:59
Speaker A
So we applied a 0.6 second delay on the border-glow animation.
21:06
Speaker A
Once the border-glow comes into action, we open the doors by changing the width to zero.
21:11
Speaker A
We can do the same animation on input as well.
21:14
Speaker A
On failure, we can do a shake animation that can easily be done using translate property.
21:19
Speaker A
And on success, we have the exact same animation, but triggered by toggling the success class on the elements.
21:26
Speaker A
You can be more creative than this and show some cool animation once you have actually opened the door.
21:33
Speaker A
But I wanted to keep this simple, so stopped at the door.
21:37
Speaker A
On that note, let's finish this video by covering SVG morphing animation.
21:41
Speaker A
This is definitely not simple by any means, but also not so advanced that I cannot explain in a few minutes.
21:47
Speaker A
This is the kind of animation that makes people say, how did you do that?
21:52
Speaker A
Remember SVG path we talked about earlier, where we did a bunch of interesting animations.
21:58
Speaker A
Morphing also involves those paths, but in a different way.
22:01
Speaker A
The cat morphing animation is just CSS keyframes, but I chose JavaScript for the card because it gives you more control on when to play the animation.
22:08
Speaker A
And makes it simpler to handle the reverse logic as well.
22:12
Speaker A
So we have five frames in total, but you can do it with three frames as well.
22:18
Speaker A
The starting position, which is a small button, the middle position where it gets wider and grows a neck like a mushroom.
22:25
Speaker A
And the final position, which is a big rectangular card.
22:29
Speaker A
The beauty of this animation comes from the middle part because that is what gives it an organic feel.
22:34
Speaker A
I kept three frames in the middle because it smooths out the effect.
22:38
Speaker A
Also, we set the easing to that bouncy cubic-bezier to give it a jelly-like feel.
22:43
Speaker A
The text logic is very simple, hide the button text on click and reveal the main text when the animation finishes playing.
22:50
Speaker A
Same thing for the reverse animation.
22:52
Speaker A
I've added a few animations on the text and the cat as well.
22:57
Speaker A
It is simple stuff like scaling and moving stuff on click using transition property we have seen earlier.
23:03
Speaker A
Also, for accessibility reasons, you should trigger the animation using a button and not the SVG itself.
23:09
Speaker A
But that is not a big deal.
23:12
Speaker A
You can have a transparent button that sits right on top of the small SVG and change the background when you have the big card.
23:20
Speaker A
The hardest part of the animation is morphing the path.
23:24
Speaker A
Because we kept the number of points the same in every frame and just moved their positions.
23:31
Speaker A
The browser can smoothly slide the points from the button state to the card state.
23:36
Speaker A
But the problem is if you have two different shapes like a cat and a heart, they both will have different points.
23:43
Speaker A
So the browser will freak out.
23:46
Speaker A
And the end result will look something like this.
23:49
Speaker A
To solve this, we are going to use a free and open source tool called shapesifter.design.
23:55
Speaker A
Created by this amazing Android developer Alex Lockwood.
23:58
Speaker A
I highly recommend watching this video on how he solved this very hard design problem.
24:03
Speaker A
His blog also covers this in much better detail than I ever could.
24:07
Speaker A
Like see what I meant about same number of points.
24:10
Speaker A
Now let's fix our cat animation.
24:12
Speaker A
First, take the SVG and paste it here.
24:15
Speaker A
Then click on animate this layer and select path data.
24:20
Speaker A
Now paste the target path in here.
24:22
Speaker A
It will throw a warning that paths are incompatible.
24:28
Speaker A
Just click this auto-fix button and copy the new path values.
24:33
Speaker A
If you click this edit button, you can clearly see the new orange points it added to match the 17 points from the heart path.
24:40
Speaker A
Now you have compatible paths, so you can build whatever you want.
24:43
Speaker A
I will leave all the code on my website and the link is in the description.
24:47
Speaker A
As always, if you want to see more complex animations, let me know in the comments.
Topics:web animationsCSS animationkeyframestiming functionstransition propertyJavaScript animationsUI animationCSS pseudo elements3D CSS animationcubic-bezier

Frequently Asked Questions

What is the CSS animation shorthand property?

The animation shorthand property combines multiple animation properties such as animation-name, duration, timing-function, and iteration-count into a single declaration for easier use.

How do timing functions affect animations?

Timing functions control the speed curve of an animation, making it start slow, speed up, or slow down at different points, which creates more natural and smooth motion effects.

How can JavaScript enhance CSS animations in UI design?

JavaScript can measure element dimensions and positions dynamically, allowing CSS animations to adapt in real time, such as moving a background highlight smoothly to match hovered navigation links.

Get More with the Söz AI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →