Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
How to animate in CSS with Keyframes

I have a problem. My menue should "slide" from left to right, so I have wrote some CSS:

.animate-in {
    animation-name: menue-in;
    animation-duration: 1s;
    animation-fill-mode: forwards;
}
.animate-out {
    animation-name: menue-out;
    animation-duration: 1s; 
    animation-fill-mode: forwards;
}

@keyframes menue-in {
    from { transform: translateX(-100%);}
    to { transform: translateX(0%);}
  }
@keyframes menue-out {
    from { transform: translateX(0%);}
    to { transform: translateX(-100%);}
}

The Keyframe which is called "menue-in" to move the menue from left to right works fine BUT my keyframe "menus-out" doesn't...

Could somebody help me please?

Here is my JS Code...

"use strict";
document.addEventListener("DOMContentLoaded", function() {
    let toggle = document.getElementsByClassName("toggle")[0];
    let navigation = document.getElementsByClassName("navigation__mobile")[0];
    let showing = false;
    toggle.addEventListener("click", function() {
        navigation.classList.toggle("d-flex");
        if(showing == false) {
            navigation.classList.remove("animate-out");
            navigation.classList.add("animate-in");
            showing = true;
        }
        else {
            navigation.classList.remove("animate-in");
            navigation.classList.add("animate-out");
            showing = false;
        }
    })
})
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

It seems you're looking for animation-fill-mode: forwards; to stop the animation at last frame.

Here's a snippet for your case.
Enjoy. :)

"use strict";
document.addEventListener("DOMContentLoaded", function() {
    let toggle = document.getElementsByClassName("toggle")[0];
    let navigation = document.getElementsByClassName("navigation__mobile")[0];
    let showing = false;
    toggle.addEventListener("click", function() {
        navigation.classList.toggle("d-flex");
        if(showing == false) {
            navigation.classList.remove("animate-out");
            navigation.classList.add("animate-in");
            showing = true;
        }
        else {
            navigation.classList.remove("animate-in");
            navigation.classList.add("animate-out");
            showing = false;
        }
    })
})
.animate-in {
    animation-name: menue-in;
    animation-duration: 1s;
    animation-fill-mode: forwards;
}
.animate-out {
    animation-name: menue-out;
    animation-duration: 1s; 
    animation-fill-mode: forwards;
}

@keyframes menue-in {
    from { transform: translateX(-100%);}
    to { transform: translateX(0%);}
  }
@keyframes menue-out {
    from { transform: translateX(0%);}
    to { transform: translateX(-100%);}
}

.navigation__mobile {
  width: 200px;
  height: 400px;
  background: red;
  transform: translateX(-100%);
}
<button class="toggle">click</button>
<div class="navigation__mobile">
navaigation
</div>

about 4 years ago · Juan Pablo Isaza Report

0

You are missing the animation-fill-mode property here. So If you will not use this property then the element will come to the original/default position. But we do not want that so here you can use the animation-mode-fill: forwards property so that element can retain its last position.

Here is the updated css code:

.animate-in {
  animation-name: menue-in;
  animation-duration: 1s;
  animation-fill-mode: forwards;
}
.animate-out {
  animation-name: menue-out;
  animation-duration: 1s; 
  animation-fill-mode: forwards;
}

@keyframes menue-in {
  from { transform: translateX(-100%);}
  to { transform: translateX(0%);}
}
@keyframes menue-out {
    from { transform: translateX(0%);}
    to { transform: translateX(-100%);}
}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!