html - Using two animations on one element, CSS -
i have 2 animations: on element load , hover:
div {      animation: slide-up 2s;     -webkit-animation: slide-up 2s;     -moz-animation: slide-up 2s; } div:hover{     animation: rotate 2s;    -webkit-animation: rotate 2s;    -moz-animation: rotate 2s; }   the slide-up animation runs once element loaded, , rotate runs when element hovered. however, element slides on mouse leave , don't know how prevent this. i'd turn off slide-up animation on hover.
the rotate animation uses transform property, , slide-up changes margins.
reason:
the slide-up animation executes once again when move mouse out of element because of following reasons:
- on load, element has 1 animation (which 
slide-up). browser executes this. - on hover, 
animationproperty again specifies 1 animation (whichrotate). makes browser removeslide-upanimation element. removing animation makes browser forget execution state or execution count of it. - on hover out, default 
divselector becomes applicable element , browser again removesrotateanimation , attachesslide-upanimation. since being re-attached, browser thinks must execute again. 
solution:
you can make slide-up animation run once making sure animation never removed element when :hover on , animation-iteration-count 1.
in below snippet, you'd note how have retained slide-up animation definition within :hover selector also. makes browser see animation ever present , since animation executed once on load, won't execute again (because of iteration count).
(note: avoid confusions - default value animation-iteration-count 1 had made explicit purpose of explanation. not primary reason step make sure value doesn't mess solution.)
div {    height: 100px;    width: 100px;    border: 1px solid;    animation: slide-up 2s 1;  }  div:hover {    animation: slide-up 2s 1, rotate 2s forwards;  }  @keyframes slide-up {    {      margin-top: 100px;    }    {      margin-top: 0px;    }  }  @keyframes rotate {    {      transform: rotate(0deg);    }    {      transform: rotate(60deg);    }  <div>some div</div>  
Comments
Post a Comment