PaulVO
PaulVO

Reputation: 309

Animation cancels out hover effect

I've been animating a button for a menu on a landing page, so that it fades down into view, which I've gotten to work quite nicely. However, I also want it to fade slight (opacity 1 to opacity .6), but the addition of the animation seems to cancel that out.

Would anyone know how to fix this issue?

HTML:

<button class="menu-button animated fadeInDown" id="open-button">Open Menu</button>

CSS:

.animated {
  -webkit-animation-duration: 1s;
  animation-duration: 1s;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;
}

@-webkit-keyframes fadeInDown {
  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
            transform: translate3d(0, -100%, 0);
  }

  100% {
    opacity: 1;
    -webkit-transform: none;
            transform: none;
  }
}

@keyframes fadeInDown {
  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
            transform: translate3d(0, -100%, 0);
  }

  100% {
    opacity: 1;
    -webkit-transform: none;
            transform: none;
  }
}

.fadeInDown {
  -webkit-animation-name: fadeInDown;
          animation-name: fadeInDown;
}

.menu-button {
    position: fixed;
    z-index: 1000;
    margin: 1em;
    padding: 0;
    width: 2.5em;
    height: 2.25em;
    border: none;
    text-indent: 2.5em;
    font-size: 1.5em;
    color: transparent;
    background: transparent;
}

.menu-button::before {
    position: absolute;
    top: 0.5em;
    right: 0.5em;
    bottom: 0.5em;
    left: 0.5em;
    background: -webkit-linear-gradient(#373a47 20%, transparent 20%, transparent 40%, #373a47         40%, #373a47 60%, transparent 60%, transparent 80%, #373a47 80%);
    background: linear-gradient(#373a47 20%, transparent 20%, transparent 40%, #373a47 40%,             #373a47 60%, transparent 60%, transparent 80%, #373a47 80%);
    content: '';
}

.menu-button:hover {
    opacity: 0.6;
}

JSFiddle here

Upvotes: 1

Views: 707

Answers (1)

misterManSam
misterManSam

Reputation: 24712

The problem is caused by the animation-fill-mode property and the value of both that is specified.

  • Remove the animation-fill-mode property

  • Apply a suitable transition for opacity with the class .animated

Example

.animated {
    -webkit-animation-duration: 1s;
    animation-duration: 1s;
    transition: opacity 0.5s;
}
@-webkit-keyframes fadeInDown {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    100% {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@keyframes fadeInDown {
    0% {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    100% {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
.fadeInDown {
    -webkit-animation-name: fadeInDown;
    animation-name: fadeInDown;
}
.menu-button {
    position: fixed;
    z-index: 1000;
    margin: 1em;
    padding: 0;
    width: 2.5em;
    height: 2.25em;
    border: none;
    text-indent: 2.5em;
    font-size: 1.5em;
    color: transparent;
    background: transparent;
}
.menu-button::before {
    position: absolute;
    top: 0.5em;
    right: 0.5em;
    bottom: 0.5em;
    left: 0.5em;
    background: -webkit-linear-gradient(#373a47 20%, transparent 20%, transparent 40%, #373a47 40%, #373a47 60%, transparent 60%, transparent 80%, #373a47 80%);
    background: linear-gradient(#373a47 20%, transparent 20%, transparent 40%, #373a47 40%, #373a47 60%, transparent 60%, transparent 80%, #373a47 80%);
    content:'';
}
.menu-button:hover {
    opacity: 0.6;
}
<button class="menu-button animated fadeInDown" id="open-button">Open Menu</button>

Upvotes: 4

Related Questions