how to i stop the ccs keyframe from playing when the website loads and only play when i press the button

Viewed 30

I want to make it so the text slide in animation doesn't play on the website load and only plays when the button is pressed. also i am unsure why the text moves lower when the button is pressed.

i have tried using java script as one of the other questions suggested which allowed the button to work but then the problem uccured where the text goes a bit lower whne the button is pressed and im not sure why.

function ani() {
  document.getElementById('textbox-1').className = 'textbox-1';
}
.textbox-1 {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50%;
  flex-direction: column;
  right: 5%;
  top: 120%;
  position: absolute;
  animation-name: slide-right;
  animation-duration: 2s;
  height: 400px;
  width: 1750px;
  color: #c9cecd;
}

@keyframes slide-right {
  from {
    opacity: 0.1;
    right: 25%;
  }
  to {
    opacity: 1;
    right: 5%;
  }
}
<div class="background">
  <div id="BUTTON">
    <button type="button" onclick="ani()" value="Click"><span></span>Rules</button>
  </div>
  <div class="textbox-1">
    <p id="textbox-1" style="font-family:courier;">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      <br>
      <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
      irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      <br>
      <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
      irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      <br>
      <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
      irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      <br>
      <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
      irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      <br>
      <br>

  </div>
</div>

1 Answers

If I understand correctly, you wanted to press the button and have the text fade in while moving to the right. This is not the job of a keyframes animation, but instead a transition between two different states. It is perfectly fine to use javascript to toggle the class moveRight every click, which will change the opacity and move the element. We use the css transition property to set which properties will have a gradual transition. Then when those properties are changed by adding a new class or the document changing, the transition between states will be more gradual.

const rules = document.querySelector(".textbox-1");
function ani() {
  rules.classList.toggle("moveRight");
}
.textbox-1 {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  opacity: 0;
  transform: translate(-100px, 0);
  transition: opacity 2s, transform 2s;
}

.moveRight {
  transform: unset;
  opacity: 1;
}
<div class="background">
    <div id="BUTTON">
        <button type="button" onclick="ani()" value="Click"><span></span>Rules</button>
    </div>
    <div class="textbox-1">
        <p id="textbox-1" style="font-family:courier;">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
            in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            <br>
            <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            <br>
            <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            <br>
            <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            <br>
            <br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            <br>
            <br>

    </div>
</div>

However this effect does not require javascript either. Let me give a small demo:

body {
  margin: 0;
}

#rulesCheck {
  display: none;
}

label[for="rulesCheck"] {
  display: block;
  cursor: pointer;
  padding: 1rem;
}

#rulesCheck:checked ~ label[for="rulesCheck"] {
  background: lightblue;
}

#rules {
  opacity: 0;
  transform: translate(-100px, 0);
  transition: opacity 2s, transform 2s;
}

#rulesCheck:checked ~ #rules {
  opacity: 1;
  transform: unset;
}
<input type="checkbox" id="rulesCheck">
<label for="rulesCheck">Rules</label>
<div id="rules">
  Please read the rules!!
</div>

Related