I have some code for moving a div constantly across the screen using CSS3, and what I want to do is start an animation I have written in CSS at different points in the animation (i.e., 20%) during the first animation cycle, and from then on begin each cycle at 0%. Thank you for your help, JSFiddle below.
HTML:
<div class="x1">
</div>
CSS:
.x1 {
right: 30%;
top: 90px;
-webkit-animation: animato 15s linear infinite;
-moz-animation: animato 15s linear infinite;
-o-animation: animato 15s linear infinite;
animation: animato 15s linear infinite;
}
#keyframes animato {
0% { right: -25%; }
20% { right: 0%; }
40% { right: 25%; }
60% { right: 50%; }
80% { right: 75%; }
100% { right: 100%; }
}
http://jsfiddle.net/ER287/
How would I begin animato at the 20% mark, say?
Use negative animation-delay:
.x1 {
right: 30%;
top: 90px;
-webkit-animation: animato 15s linear infinite;
-moz-animation: animato 15s linear infinite;
-o-animation: animato 15s linear infinite;
animation: animato 15s linear infinite;
-webkit-animation-delay: -3s; /* offsets the animation starting point for 3/15 = 20% */
-moz-animation-delay: -3s;
-o-animation-delay: -3s;
animation-delay: -3s;
}
fiddle
Related
Though it appears to work fine in Firefox, I can't seem to figure out why the background image class below, (.sitebg), repositions erratically when the browser window size is adjusted in the Safari web browser. The transform-origin jumps oddly when the window is adjusted, but I have yet to know what's causing that to happen...
Is this some kind of bug, or do I need to implement something for better cross-browser compatibility?
See the snippet below for further reference.
body,
html {
height: 100%;
width: 100%;
background-size: cover;
background-repeat: no-repeat;
-webkit-text-size-adjust: 100%;
}
body {
background: blue;
margin: 0;
padding: 0;
border: 0;
outline: 0;
}
/* -- Site Background -- */
.sitebg {
background: url(http://maxpixel.freegreatpicture.com/static/photo/1x/Seamless-Repeating-Tiling-Tile-able-Tileable-1889447.jpg);
background-size: 720px 720px;
background-repeat: repeat;
background-position: center;
width: 1000%;
height: 1000%;
position: fixed;
top: 50%;
left: 50%;
}
#-moz-keyframes bg-rotate {
0% {
-moz-transform: rotate(0deg) translate(-50%, -50%);
-moz-transform-origin: top left;
}
100% {
-moz-transform: rotate(360deg) translate(-50%, -50%);
-moz-transform-origin: top left;
}
}
#-webkit-keyframes bg-rotate {
0% {
-webkit-transform: rotate(0deg) translate(-50%, -50%);
-webkit-transform-origin: top left;
}
100% {
-webkit-transform: rotate(360deg) translate(-50%, -50%);
-webkit-transform-origin: top left;
}
}
#keyframes bg-rotate {
0% {
transform: rotate(0deg) translate(-50%, -50%);
transform-origin: top left;
}
100% {
transform: rotate(360deg) translate(-50%, -50%);
transform-origin: top left;
}
}
/* -- Stack Ordering -- */
.sitebg {
z-index: -1;
}
body {
z-index: -2;
}
/* -- Media Queries -- */
#media only screen and (min-width:2000px) {
.sitebg {
-webkit-animation: 800s bg-rotate infinite linear;
-moz-animation: 800s bg-rotate infinite linear;
-o-animation: 800s bg-rotate infinite linear;
-ms-animation: 800s bg-rotate infinite linear;
animation: 800s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 2000px) and (min-width: 1500px) {
.sitebg {
-webkit-animation: 700s bg-rotate infinite linear;
-moz-animation: 700s bg-rotate infinite linear;
-o-animation: 700s bg-rotate infinite linear;
-ms-animation: 700s bg-rotate infinite linear;
animation: 700s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 1500px) and (min-width: 1000px) {
.sitebg {
-webkit-animation: 600s bg-rotate infinite linear;
-moz-animation: 600s bg-rotate infinite linear;
-o-animation: 600s bg-rotate infinite linear;
-ms-animation: 600s bg-rotate infinite linear;
animation: 600s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 1000px) and (min-width: 600px) {
.sitebg {
-webkit-animation: 500s bg-rotate infinite linear;
-moz-animation: 500s bg-rotate infinite linear;
-o-animation: 500s bg-rotate infinite linear;
-ms-animation: 500s bg-rotate infinite linear;
animation: 500s bg-rotate infinite linear;
}
}
#media only screen and (max-width:600px) {
.sitebg {
-webkit-animation: 500s bg-rotate infinite linear;
-moz-animation: 500s bg-rotate infinite linear;
-o-animation: 500s bg-rotate infinite linear;
-ms-animation: 500s bg-rotate infinite linear;
animation: 500s bg-rotate infinite linear;
}
}
<div class="sitebg"></div>
So, it looks like using percentage values for the width and height were causing the glitch to occur. Though I am not sure if this is the best solution to date, this worked for me:
body,
html {
height: 100%;
width: 100%;
background-size: cover;
background-repeat: no-repeat;
-webkit-text-size-adjust: 100%;
}
body {
background: blue;
margin: 0;
padding: 0;
border: 0;
outline: 0;
}
/* -- Site Background -- */
.sitebg {
background: url(http://maxpixel.freegreatpicture.com/static/photo/1x/Seamless-Repeating-Tiling-Tile-able-Tileable-1889447.jpg);
background-size: 720px 720px;
background-repeat: repeat;
background-position: center;
width: 6788px;
height: 6788px;
position: fixed;
top: 50%;
left: 50%;
}
#-moz-keyframes bg-rotate {
0% {
-moz-transform: rotate(0deg) translate(-50%, -50%);
-moz-transform-origin: top left;
}
100% {
-moz-transform: rotate(360deg) translate(-50%, -50%);
-moz-transform-origin: top left;
}
}
#-webkit-keyframes bg-rotate {
0% {
-webkit-transform: rotate(0deg) translate(-50%, -50%);
-webkit-transform-origin: top left;
}
100% {
-webkit-transform: rotate(360deg) translate(-50%, -50%);
-webkit-transform-origin: top left;
}
}
#keyframes bg-rotate {
0% {
transform: rotate(0deg) translate(-50%, -50%);
transform-origin: top left;
}
100% {
transform: rotate(360deg) translate(-50%, -50%);
transform-origin: top left;
}
}
/* -- Stack Ordering -- */
.sitebg {
z-index: -1;
}
body {
z-index: -2;
}
/* -- Media Queries -- */
#media only screen and (min-width:2000px) {
.sitebg {
-webkit-animation: 800s bg-rotate infinite linear;
-moz-animation: 800s bg-rotate infinite linear;
-o-animation: 800s bg-rotate infinite linear;
-ms-animation: 800s bg-rotate infinite linear;
animation: 800s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 2000px) and (min-width: 1500px) {
.sitebg {
-webkit-animation: 700s bg-rotate infinite linear;
-moz-animation: 700s bg-rotate infinite linear;
-o-animation: 700s bg-rotate infinite linear;
-ms-animation: 700s bg-rotate infinite linear;
animation: 700s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 1500px) and (min-width: 1000px) {
.sitebg {
-webkit-animation: 600s bg-rotate infinite linear;
-moz-animation: 600s bg-rotate infinite linear;
-o-animation: 600s bg-rotate infinite linear;
-ms-animation: 600s bg-rotate infinite linear;
animation: 600s bg-rotate infinite linear;
}
}
#media only screen and (max-width: 1000px) and (min-width: 600px) {
.sitebg {
-webkit-animation: 500s bg-rotate infinite linear;
-moz-animation: 500s bg-rotate infinite linear;
-o-animation: 500s bg-rotate infinite linear;
-ms-animation: 500s bg-rotate infinite linear;
animation: 500s bg-rotate infinite linear;
}
}
#media only screen and (max-width:600px) {
.sitebg {
-webkit-animation: 500s bg-rotate infinite linear;
-moz-animation: 500s bg-rotate infinite linear;
-o-animation: 500s bg-rotate infinite linear;
-ms-animation: 500s bg-rotate infinite linear;
animation: 500s bg-rotate infinite linear;
}
}
<div class="sitebg"></div>
How can I make a button fade in/out on a loop while moving down with css animations? so far I got the fade in/out working fine. But I cant get them both to work at the same time.
<div class="down-arrow"><button class="down-button animate-flicker" type="button">VVV</button></div>
#keyframes flickerAnimation {
from {top:0px; opacity: 0; }
to {top:200px;}
}
#-o-keyframes flickerAnimation {
from {top:0px; opacity: 0; }
to {top:200px;}
}
#-moz-keyframes flickerAnimation {
from {top:0px; opacity: 0; }
to {top:200px;}
}
#-webkit-keyframes flickerAnimation {
from {top:0px; opacity: 0; }
to {top:200px;}
}
.animate-flicker {
animation: flickerAnimation 1s infinite alternate;
-webkit-animation: flickerAnimation 1s infinite alternate;
-moz-animation: flickerAnimation 1s infinite alternate;
-o-animation: flickerAnimation 1s infinite alternate;
}
https://jsfiddle.net/ywn9w5L9/3/
Working JSFiddle.
You just need to add a position attribute to your animate-flicker class in your existing css.
Check my code snippet below :
#
keyframes flickerAnimation {
0 % {
top: 0;
opacity: 0;
}
100 % {
top: 200px;
opacity: 1;
}
}
# - o - keyframes flickerAnimation {
from {
top: 0px;
opacity: 0;
}
to {
top: 200px;
}
}
# - moz - keyframes flickerAnimation {
from {
top: 0px;
opacity: 0;
}
to {
top: 200px;
}
}
# - webkit - keyframes flickerAnimation {
from {
top: 0px;
opacity: 0;
}
to {
top: 200px;
}
}
.animate - flicker {
position: absolute;
animation: flickerAnimation 1s infinite alternate; - webkit - animation: flickerAnimation 1s infinite alternate; - moz - animation: flickerAnimation 1s infinite alternate; - o - animation: flickerAnimation 1s infinite alternate;
}
<div class="down-arrow">
<button class="down-button animate-flicker" type="button">VVV</button>
</div>
Hope this helps.
I'm trying to use this code for a website.
I'm using CSS3 Keyframe and animations for it with a simple list
#animation ul { /* The list with elements */
position: relative;
text-align: center;
width: 200px;
}
#animation li { /* Common styles for the list elements */
position: absolute;
left:0;
top:0;
width: 100%;
opacity: 0;
padding: 10px;
}
#animation li:nth-of-type(1) { /* First element of the list */
background-color: lightgreen;
-webkit-animation: fadein 6s ease-in-out -4s infinite alternate; /* delay = -duration * 66%. Note the negative delay to skip the "keyframes delay" */
-moz-animation: fadein 6s ease-in-out -4s infinite alternate;
animation: fadein 6s ease-in-out -4s infinite alternate;
}
#animation li:nth-of-type(2) { /* Second element of the list */
background-color: yellow;
-webkit-animation: fadein 6s ease-in-out 0s infinite alternate;
-moz-animation: fadein 6s ease-in-out 0s infinite alternate;
animation: fadein 6s ease-in-out 0s infinite alternate;
}
#animation li:nth-of-type(3) { /* Third element of the list */
background-color: lightblue;
-webkit-animation: fadein 6s ease-in-out 4s infinite alternate; /* delay = duration * 66% */
-moz-animation: fadein 6s ease-in-out 4s infinite alternate;
animation: fadein 6s ease-in-out 4s infinite alternate;
}
/* Defines the animation keyframes */
#-webkit-keyframes fadein {
0% { /* "Delay" of the animation - 66% of the duration time (100 - 100/number of elements) */
opacity: 0;
}
66% { /* Actual beginning of the fade in animation */
opacity: 0;
}
76% { /* The fade in animation takes 10% of the duration time */
opacity: 1;
}
100% {
opacity: 1;
}
}
#-moz-keyframes fadein {
0% {
opacity: 0;
}
66% {
opacity: 0;
}
76% {
opacity: 1;
}
100% {
opacity: 1;
}
}
#keyframes fadein {
0% {
opacity: 0;
}
66% {
opacity: 0;
}
76% {
opacity: 1;
}
100% {
opacity: 1;
}
}
<div id="animation">
<ul>
<li>This is</li>
<li>CSS3 looped</li>
<li>animation</li>
</ul>
</div>
I want to set 5 elements instead of 3 but when I edit this code with 5 elements, it's not the same result..
Thanks for the help !
You have to change the time intervels that you have mentioned . Check the below code.
#animation ul { /* The list with elements */
position: relative;
text-align: center;
width: 200px;
}
#animation li { /* Common styles for the list elements */
position: absolute;
left:0;
top:0;
width: 100%;
opacity: 0;
padding: 10px;
}
#animation li:nth-of-type(1) { /* First element of the list */
background-color: lightgreen;
-webkit-animation: fadein 6s ease-in-out -4s infinite alternate; /* delay = -duration * 66%. Note the negative delay to skip the "keyframes delay" */
-moz-animation: fadein 6s ease-in-out -4s infinite alternate;
animation: fadein 6s ease-in-out -4s infinite alternate;
}
#animation li:nth-of-type(2) { /* Second element of the list */
background-color: yellow;
-webkit-animation: fadein 6s ease-in-out 0s infinite alternate;
-moz-animation: fadein 6s ease-in-out 0s infinite alternate;
animation: fadein 6s ease-in-out 0s infinite alternate;
}
#animation li:nth-of-type(3) { /* Third element of the list */
background-color: lightblue;
-webkit-animation: fadein 6s ease-in-out 4s infinite alternate; /* delay = duration * 66% */
-moz-animation: fadein 6s ease-in-out 4s infinite alternate;
animation: fadein 6s ease-in-out 4s infinite alternate;
}
#animation li:nth-of-type(4) { /* fourth element of the list */
background-color: pink;
-webkit-animation: fadein 6s ease-in-out 8s infinite alternate; /* delay = duration * 66% */
-moz-animation: fadein 6s ease-in-out 8s infinite alternate;
animation: fadein 6s ease-in-out 8s infinite alternate;
}
#animation li:nth-of-type(5) { /* fifth element of the list */
background-color: red;
-webkit-animation: fadein 6s ease-in-out 12s infinite alternate;
-moz-animation: fadein 6s ease-in-out 12s infinite alternate;
animation: fadein 6s ease-in-out 12s infinite alternate;
}
/* Defines the animation keyframes */
#-webkit-keyframes fadein {
0% { /* "Delay" of the animation - 66% of the duration time (100 - 100/number of elements) */
opacity: 0;
}
66% { /* Actual beginning of the fade in animation */
opacity: 0;
}
76% { /* The fade in animation takes 10% of the duration time */
opacity: 1;
}
100% {
opacity: 1;
}
}
#-moz-keyframes fadein {
0% {
opacity: 0;
}
66% {
opacity: 0;
}
76% {
opacity: 1;
}
100% {
opacity: 1;
}
}
#keyframes fadein {
0% {
opacity: 0;
}
66% {
opacity: 0;
}
76% {
opacity: 1;
}
100% {
opacity: 1;
}
}
<div id="animation">
<ul>
<li>This is</li>
<li>CSS3 looped</li>
<li>animation</li>
<li>example</li>
<li>here</li>
</ul>
</div>
I'm trying to, on li:hover, have one child <div> animate its width, at x seconds, from 0 to 100% and then a given number of seconds later animate another div the exact same way.
This is my code and it isn't working the way that I want it to.
li {
margin-bottom: -1px;
#top, #bottom {
height: 1px;
width: 0;
display: block;
background: $white;
}
#bottom {
-o-transition:.25s;
-ms-transition:.25s;
-moz-transition:.25s;
-webkit-transition:.25s;
transition:.25s;
}
#top {
-moz-animation: fadein 3s ease-in 3s forwards; /* Firefox */
-webkit-animation: fadein 3s ease-in 3s forwards; /* Safari and Chrome */
-o-animation: fadein 3s ease-in 3s forwards; /* Opera */
animation: fadein 3s ease-in 3s forwards;
}
&:hover {
#bottom {
-o-transition:.25s;
-ms-transition:.25s;
-moz-transition:.25s;
-webkit-transition:.25s;
transition:.25s;
width: 100%;
}
#top {
-moz-animation: fadein 3s ease-in 3s forwards; /* Firefox */
-webkit-animation: fadein 3s ease-in 3s forwards; /* Safari and Chrome */
-o-animation: fadein 3s ease-in 3s forwards; /* Opera */
animation: fadein 3s ease-in 3s forwards;
width: 100%;
}
}
}
Could someone explain to me what it is I am doing wrong?
You cannot use the animation property without defining keyframes.
So I'm trying to animate some text dropping down once its finished animating.
The problem is it just disappears after it's finished, even though I set the opacity to 1# 100%.
/* text animation */
#-webkit-keyframes textAnimation {
0% {
opacity: 0;
-webkit-transform: translateY(-200%);
}
10% {
opacity: 1;
-webkit-transform: translateY(0%);
}
20% {
opacity: 1;
-webkit-transform: translateY(0%);
}
100% {
opacity: 1;
-webkit-transform: translateY(0%);
}
}
.text-animation {
z-index: 1000;
width: 100%;
text-align: center;
opacity: 0;
-webkit-animation: textAnimation 2s linear 2s;
-moz-animation: textAnimation 2s linear 2s;
-o-animation: textAnimation 2s linear 2s;
-ms-animation: textAnimation 2s linear 2s;
animation: textAnimation 2s linear 2s;
-webkit-animation-iteration-count: 1;
-webkit-animation-delay: 1s;
-moz-animation-delay: 1s;
-o-animation-delay: 1s;
-ms-animation-delay: 1s;
animation-delay: 1s;
}
/* text animation */
I just don't understand what the problem is here...
This worked for me.
If you set the end state in the class and not add a delay.
#-webkit-keyframes textAnimation {
0% { opacity: 0; -webkit-transform: translateY(-200%); }
33% { opacity: 1; -webkit-transform: translateY(-200%); }
100% { opacity: 1; -webkit-transform: translateY(0%); }
}
.text-animation {
color:#fff;
font-size:32px;
width: 100%;
text-align: center;
opacity: 1;
-webkit-animation: textAnimation 3s linear;
-moz-animation: textAnimation 3s linear;
-o-animation: textAnimation 3s linear;
-ms-animation: textAnimation 3s linear;
animation: textAnimation 3s linear;
}
In you .text-animation declaration add this :
-webkit-animation-fill-mode: forwards;
Thanks to it, your animation will stay to the last keyframe state. (here, opacity 0).
You can see the result here : http://codepen.io/joe/pen/CkbcL
Source : https://developer.mozilla.org/en-US/docs/CSS/animation-fill-mode