The Transform Sled đź›·
Sometimes you just want to translate an element by a percentage of its parent's width.
The best way to animate moving something with CSS is using the transform
property along with
any translate
CSS function since this provides the best performance, but a tricky challenge
presents itself if you want to move the element by a percentage of its parent’s box size.
You might think to try something like this:
In most cases, percent values do refer to the parent’s bounding box. Unfortunately that’s not the
case with translate
functions where percent values used within any translate
function refer to
the translated element’s own bounding box.
So how can we achieve the desired effect of moving the .child
by 100% of the .parent
while still
using the performant translate
function approach?
Enter the “transform sled”. The idea is: the .sled
can have the same dimensions as the .parent
and the .child
can be positioned wherever you want on the .sled
. Then you can move the .sled
and the .child
will move with it!
To achieve this, we’ll need to set position:relative;
on the .parent
and position: absolute; inset: 0;
on the .sled
to give it the same dimensions as the parent. Lastly, we will move the animation
from the .child
to the .sled
!
And with that, we’ve achieved our goal of performantly moving the .child
100% of the way down the .parent
! 🎉