I'm not very familiar with css nor css animations. I have made a fade-in animation for some pictures. They do work great, but not on an old Safari browser.
A friend of mine uses Safari 5.1.10 and the pictures don't get displayed.
What can I do that it will play the animation or how can I tell the browser "if you're too old for that stuff then just ignore the animation and display the pictures"?
And here is the css:
.column-image > div picture > img{
opacity: 0;
animation-name: fadein;
animation-duration: 3s;
animation-iteration-count: 1;
animation-fill-mode: forwards;
}
#c1163 > div > div:nth-child(2) > div picture > img{
animation-delay: 0.5s;
}
#c1163 > div > div:nth-child(6) > div picture > img{
animation-delay: 1s;
}
#c1163 > div > div:nth-child(7) > div picture > img{
animation-delay: 1.5s;
}
#c1163 > div > div:nth-child(11) > div picture > img{
animation-delay: 2s;
}
#c1163 > div > div:nth-child(12) > div picture > img{
animation-delay: 2.5s;
}
#keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-moz-keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-webkit-keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-o-keyframes fadein {
from {
opacity:0;
}
to {
opacity: 1;
}
}
This is because you need to add vendor prefixes to the animation attributes because in older versions they're considered 'experimental'. Check out the support for Animations on Can I Use? Safari 5.1 requires the -webkit- prefix.
You code should work when changed to the following:
.column-image > div picture > img{
opacity: 0;
animation-name: fadein;
animation-duration: 3s;
animation-iteration-count: 1;
animation-fill-mode: forwards;
-webkit-animation-name: fadein;
-webkit-animation-duration: 3s;
-webkit-animation-iteration-count: 1;
-webkit-animation-fill-mode: forwards;
}
#c1163 > div > div:nth-child(2) > div picture > img{
animation-delay: 0.5s;
-webkit-animation-delay: 0.5s;
}
#c1163 > div > div:nth-child(6) > div picture > img{
animation-delay: 1s;
-webkit-animation-delay: 1s;
}
#c1163 > div > div:nth-child(7) > div picture > img{
animation-delay: 1.5s;
-webkit-animation-delay: 1.5s;
}
#c1163 > div > div:nth-child(11) > div picture > img{
animation-delay: 2s;
-webkit-animation-delay: 2s;
}
#c1163 > div > div:nth-child(12) > div picture > img{
animation-delay: 2.5s;
-webkit-animation-delay: 2.5s;
}
#keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-moz-keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-webkit-keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
#-o-keyframes fadein {
from {
opacity:0;
}
to {
opacity: 1;
}
}
The opacity attribute is okay and has pretty good support and that does not have a prefix to add. There are other vendor prefixes for other browsers too as you've used already, but you'll be fine with just the webkit prefix for the animation ones (keep the prefixed keyframe prefixes though).
Related
I created a crossfade using CSS, but I am having difficulties with the timing. I want 4 seconds delay or 4 seconds between each image but it's not working.
#cf {
position:absolute;
margin:0 auto;
width: 100%;
height: 100%;
top: 0;
}
#cf img {
position:absolute;
left:0;
-webkit-transition: opacity 1s ease-in-out;
-moz-transition: opacity 1s ease-in-out;
-o-transition: opacity 1s ease-in-out;
transition: opacity 1s ease-in-out;
z-index: -1;
}
#-webkit-keyframes cf4FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% {
opacity:0;
}
}
#-moz-keyframes cf4FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% {
opacity:0;
}
}
#-o-keyframes cf4FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% {
opacity:0;
}
}
#keyframes cf3FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% {
opacity:0;
}
}
#cf img {
animation-name: cf3FadeInOut;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 4s;
animation-direction: alternate;
}
#cf img:nth-of-type(1) { /* Wakame */
-webkit-animation-delay: 24s;
-moz-animation-delay: 24s;
-o-animation-delay: 24s;
animation-delay: 24s;
}
#cf img:nth-of-type(2) { /*Meraki */
-webkit-animation-delay: 20s;
-moz-animation-delay: 20s;
-o-animation-delay: 20s;
animation-delay: 20s;
}
#cf img:nth-of-type(3) { /* Trabzoni */
-webkit-animation-delay: 16s;
-moz-animation-delay: 16s;
-o-animation-delay: 16s;
animation-delay: 16s;
}
#cf img:nth-of-type(4) { /* SPS */
-webkit-animation-delay: 12s;
-moz-animation-delay: 12s;
-o-animation-delay: 12s;
animation-delay: 12s;
}
#cf img:nth-of-type(5) { /* Balad */
-webkit-animation-delay: 8s;
-moz-animation-delay: 8s;
-o-animation-delay: 8s;
animation-delay: 8s;
}
#cf img:nth-of-type(6) { /* Wesal */
-webkit-animation-delay: 4s;
-moz-animation-delay: 4s;
-o-animation-delay: 4s;
animation-delay: 4s;
}
<div id="cf">
<img class="img-responsive" src="http://ddragon.leagueoflegends.com/cdn/img/champion/splash/Ezreal_0.jpg" />
<img class="img-responsive" src="http://vignette2.wikia.nocookie.net/leagueoflegends/images/6/6b/Ezreal_NottinghamSkin.jpg/revision/latest?cb=20160518164441" />
<img class="img-responsive" src="https://s-media-cache-ak0.pinimg.com/originals/a3/99/59/a399593448b739ee3cb164f74f22d89a.jpg" />
<img class="img-responsive" src="https://i.ytimg.com/vi/nOmafJzhUrk/maxresdefault.jpg" />
<img class="img-responsive" src="http://art-of-lol.com/wp-content/uploads/2015/12/ezreal_by_cglas-d8smd2g.jpg" />
<img class="img-responsive" src="http://pre14.deviantart.net/81ae/th/pre/i/2015/345/5/c/ezreal_by_tanzenkat-d9jrcvc.jpg" />
</div>
Also, besides the timing, when the images crossfade, after the second image, it keeps going back to the first while the rest won't display or very quickly display and fade.
I want 4 seconds delay or 4 seconds between each image but it's not
working
In order to get the timing right, you need to keep in mind some calculations.
Determine how long each image should take to fade in. Let's say you want 1 second for the image to fade in from 0 opacity to 1.
Determine how long each image should remain visible. Let's say you want the image to stay at 1 opacity for 4 seconds.
Determine how long should the next image take to start. This will become the interval between the two images. This should be greater than what you got at step #2. You had 1s to show up, and 4s to keep it shown. So this would be at least 5 seconds. Apply this in increments to each image's animation-delay.
Multiply this number by the total number of your images. This will become to total animation-duration. In this case, you calculate 5s in step #3 and you have 6 images. So your animation-duration will be 5 x 6 = 30 i.e 30 seconds.
Divide 100% by the number you got in step #4. This will become the keyframes. In this case, you have 30s of total animation-duration. So your keyframes will be in steps of 100% / 30 = 3.33 i.e 3.33% of each keyframe. This each frame will represent 1 second.
Extrapolate your step #1 and #2 values on these frames. i.e. for 3.33% you will have opacity: 1 to show the image after 1 second. Then for each of 6.66%, 9.99%, and 13.33% it will remain as opacity:1. i.e. for 4 seconds starting at 0, the image will remain visible. Then on frame 16.65 revert the opacity back to 0. i.e. at 5th second the image will fade out. And then shall remain hidden until 100% i.e. until all remaining 25 seconds.
Putting this all together, you get:
From Step #3:
#cf img:nth-child(1) { animation-delay: 0s; }
#cf img:nth-child(2) { animation-delay: 5s; }
#cf img:nth-child(3) { animation-delay: 10s; }
#cf img:nth-child(4) { animation-delay: 15s; }
#cf img:nth-child(5) { animation-delay: 20s; }
#cf img:nth-child(6) { animation-delay: 25s; }
From Step #4:
#cf img { animation: fader 30s linear infinite; }
And, from Steps #5 and #6 (extrapolated from steps #1 and #2):
#keyframes fader {
0% { opacity: 0; }
03.33% { opacity: 1; }
06.66% { opacity: 1; }
09.99% { opacity: 1; }
13.33% { opacity: 1; }
16.65% { opacity: 0; }
100% { opacity: 0; }
}
That's it. Here is the complete snippet:
Snippet:
html, body { height: 100%; width: 100%; overflow: hidden; }
#cf {
position: relative; margin: 0 auto;
width: 100%; height: 100%;
}
#cf img {
position: absolute; left: 0; top: 0; opacity: 0;
animation: fader 30s linear infinite;
}
#cf img:nth-child(1) { animation-delay: 0s; }
#cf img:nth-child(2) { animation-delay: 5s; }
#cf img:nth-child(3) { animation-delay: 10s; }
#cf img:nth-child(4) { animation-delay: 15s; }
#cf img:nth-child(5) { animation-delay: 20s; }
#cf img:nth-child(6) { animation-delay: 25s; }
#keyframes fader {
0% { opacity: 0; }
03.33% { opacity: 1; }
06.66% { opacity: 1; }
09.99% { opacity: 1; }
13.33% { opacity: 1; }
16.65% { opacity: 0; }
100% { opacity: 0; }
}
<div id="cf">
<img class="img-responsive" src="http://ddragon.leagueoflegends.com/cdn/img/champion/splash/Ezreal_0.jpg" />
<img class="img-responsive" src="http://vignette2.wikia.nocookie.net/leagueoflegends/images/6/6b/Ezreal_NottinghamSkin.jpg/revision/latest?cb=20160518164441" />
<img class="img-responsive" src="https://s-media-cache-ak0.pinimg.com/originals/a3/99/59/a399593448b739ee3cb164f74f22d89a.jpg" />
<img class="img-responsive" src="https://i.ytimg.com/vi/nOmafJzhUrk/maxresdefault.jpg" />
<img class="img-responsive" src="http://art-of-lol.com/wp-content/uploads/2015/12/ezreal_by_cglas-d8smd2g.jpg" />
<img class="img-responsive" src="http://pre14.deviantart.net/81ae/th/pre/i/2015/345/5/c/ezreal_by_tanzenkat-d9jrcvc.jpg" />
</div>
I've got this CSS:
#-webkit-keyframes sliderFadeInOut {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#-moz-keyframes sliderFadeInOut {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#-o-keyframes sliderFadeInOut {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#keyframes sliderFadeInOut {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#slider {
background-size: cover;
position: fixed;
top: 100px;
bottom: 0px;
height:calc(100%-135px);
width: 100%;
}
#slider img {
border: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
margin: 0px;
width: 100%;
height: 100%;
position:absolute;
left:0;
-webkit-transition: opacity 1s ease-in-out;
-moz-transition: opacity 1s ease-in-out;
-o-transition: opacity 1s ease-in-out;
transition: opacity 1s ease-in-out;
}
#slider img {
-webkit-animation-name: sliderFadeInOut;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-duration: 10s;
-moz-animation-name: sliderFadeInOut;
-moz-animation-timing-function: ease-in-out;
-moz-animation-iteration-count: infinite;
-moz-animation-duration: 8s;
-o-animation-name: sliderFadeInOut;
-o-animation-timing-function: ease-in-out;
-o-animation-iteration-count: infinite;
-o-animation-duration: 8s;
animation-name: sliderFadeInOut;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 8s;
}
#slider img:nth-of-type(1) {
-webkit-animation-delay: 6s;
-moz-animation-delay: 6s;
-o-animation-delay: 6s;
animation-delay: 6s;
}
#slider img:nth-of-type(2) {
-webkit-animation-delay: 4s;
-moz-animation-delay: 4s;
-o-animation-delay: 4s;
animation-delay: 4s;
}
#slider img:nth-of-type(3) {
-webkit-animation-delay: 2s;
-moz-animation-delay: 2s;
-o-animation-delay: 2s;
animation-delay: 2s;
}
#slider img:nth-of-type(4) {
-webkit-animation-delay: 0;
-moz-animation-delay: 0;
-o-animation-delay: 0;
animation-delay: 0;
}
I'm learning CSS Animations, but I didn't find out how to set the display time of one image.
I tried to change the animation delay but that only causes trouble..
Do you have an idea how to do this ?
Best regards
There were several things that needed some attention. Here's how I accomplished it, though there are other ways.
For the animation itself:
#keyframes sliderFadeInOut {
0% {
opacity:0;
}
17% {
opacity:1;
}
25% {
opacity:1;
}
92% {
opacity:1;
}
100% {
opacity:0;
}
}
This causes the image to fade in, then fade out at whatever animation-duration we set.
Set the animation-iteration-count to 1, so the animation runs once.
animation-iteration-count: 1;
Each image in the stack needs to be timed to appear, then disappear as the next image in the stack becomes visible. To do this, use animation-delay and increase it for each image in the stack.
#slider img:nth-child(1) {
animation-delay: 0s;
}
#slider img:nth-child(2) {
animation-delay: 4s;
opacity:0;
}
#slider img:nth-child(3) {
animation-delay: 8s;
opacity:0;
}
#slider img:nth-child(4) {
animation-delay: 12s;
opacity:0;
}
The staggered animation-delay properties cause the first image in the stack to be shown initially. It's animation takes 5 seconds and results in the image disappearing. At 4 seconds, the 2nd image in the stack starts it's animation, appearing just as the first image is disappearing. And then so on for the 3rd and 4th images.
In the code above there's also an initial opacity property for the 2nd, 3rd and 4th images. This is necessary to hide them initially.
As it's setup now the images will loop only once. Some minor tweaking to animation-delay and animation-iteration-count would cause it to loop infinitely.
Here's the working demo.
My Code for showing divs with fade-in effect is as here
#-webkit-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
#-moz-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
#keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
.fade-in {
opacity:0;
-webkit-animation:fadeIn ease-in 1;
-moz-animation:fadeIn ease-in 1;
animation:fadeIn ease-in 1;
-webkit-animation-fill-mode:forwards;
-moz-animation-fill-mode:forwards;
animation-fill-mode:forwards;
-webkit-animation-duration:2s;
-moz-animation-duration:2s;
animation-duration:2s;
}
.fade-in.one
{
-webkit-animation-delay: 1.7s;
-moz-animation-delay: 1.7s;
animation-delay: 1.7s;
}
Then i am using that to a div which needs to fade in while loading.
<div class="fade-in one">
<label>Message Box</label>
This box will show some messages
</div>
This code works fine in chrome and firefox as well, but in ie it is showing no animation.
Kindly help in fixing this problem. I have tried many changes in the code, and IE versions as well. But no joy. Please help ....
I am trying to change background images automatically by using css3. I have 9 images to change in background. The problem I am facing is, it displays only first and last image in sliding but not the 2, 3, 4, 5, 6, 7, 8. I have following code:
<img id="img1" src="images/1.gif">
<img id="img2" src="images/2.gif">
<img id="img3" src="images/3.gif">
<img id="img4" src="images/4.gif">
<img id="img5" src="images/5.gif">
<img id="img6" src="images/6.gif">
<img id="img7" src="images/7.gif">
<img id="img8" src="images/8.gif">
<img id="img9" src="images/9.gif">
and here is the CSS:
#img1, #img2, #img3, #img4, #img5, #img6, #img7, #img8, #img9 {
width:610px;
height:610px;
position:scroll;
z-index:-1;
animation-name: test;
animation-duration: 90s;
opacity:0;
}
#img2 {
animation-delay:10s;
-webkit-animation-delay:10s
}
#img3 {
animation-delay:20s;
-webkit-animation-delay:20s
}
#img4 {
animation-delay:30s;
-webkit-animation-delay:30s
}
#img5 {
animation-delay:40s;
-webkit-animation-delay:40s
}
#img6 {
animation-delay:50s;
-webkit-animation-delay:50s
}
#img7 {
animation-delay:60s;
-webkit-animation-delay:60s
}
#img8 {
animation-delay:70s;
-webkit-animation-delay:70s
}
#img9 {
animation-delay:80s;
-webkit-animation-delay:80s
}
#-webkit-keyframes test {
0% {
opacity: 1;
}
50% {
opacity: 1;
}
100% {
opacity: 1;
}
}
#keyframes test {
0% {
opacity: 1;
}
50% {
opacity: 1;
}
100% {
opacity: 1;
}
}
The time of delay for each slide from 1 to 8 is 10s except image9, which has delay time 8.60s.
Please help where I am going wrong. :(
Okay I have made a JS Fiddle, and I think i've come up with what you want.
http://jsfiddle.net/d48vdxmv/2/
Basically, you need to wrap your images in a container first:
<div id="container">
<img src="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_01.jpg">
<img src="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_02.jpg">
<img src="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_03.jpg">
<img src="http://imaging.nikon.com/lineup/dslr/df/img/sample/img_04.jpg">
</div>
Then in the CSS, set the container to be relative position, and the images to be absolute so they stack ontop of each other.
#container {
position:relative;
height:610px;
width:610px;
}
#container img {
position:absolute;
left:0;
}
Then add your keyframes, with the different browser variations
#-webkit-keyframes imgFade {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#-moz-keyframes imgFade {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#-o-keyframes imgFade {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
#keyframes imgFade {
0% {
opacity:1;
}
17% {
opacity:1;
}
25% {
opacity:0;
}
92% {
opacity:0;
}
100% {
opacity:1;
}
}
Then your animation details for all browsers
#container img {
-webkit-animation-name: imgFade;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-duration: 8s;
-moz-animation-name: imgFade;
-moz-animation-timing-function: ease-in-out;
-moz-animation-iteration-count: infinite;
-moz-animation-duration: 8s;
-o-animation-name: imgFade;
-o-animation-timing-function: ease-in-out;
-o-animation-iteration-count: infinite;
-o-animation-duration: 8s;
animation-name: imgFade;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 8s;
}
And finally your duration times for each image
#container img:nth-of-type(1) {
-webkit-animation-delay: 6s;
-moz-animation-delay: 6s;
-o-animation-delay: 6s;
animation-delay: 6s;
}
#container img:nth-of-type(2) {
-webkit-animation-delay: 4s;
-moz-animation-delay: 4s;
-o-animation-delay: 4s;
animation-delay: 4s;
}
#container img:nth-of-type(3) {
-webkit-animation-delay: 2s;
-moz-animation-delay: 2s;
-o-animation-delay: 2s;
animation-delay: 2s;
}
#container img:nth-of-type(4) {
-webkit-animation-delay: 0;
-moz-animation-delay: 0;
-o-animation-delay: 0;
animation-delay: 0;
}
so I'm trying to fade 3 images, one on top of each other slowly so you can see each image for a few secs before the next one fades on top. I'm following this tutorial here. However for some reason my images seem to fade over each other too fast and I can't control the timing well.
Here is my preview page. You are suppose to see a bird, then tomatoes then a boat, but right now it just all fades on top of each other and ends up on the boat.
I'm following Demo 1 and Demo 3, any ideas why my animation is off? Thanks in advance! :)
My jsfiddle:
http://jsfiddle.net/leongaban/TPjWG/
CODE:
<style>
#-webkit-keyframes cf4FadeInOut {
0% {
opacity:0;
}
25% {
opacity:1;
}
50% {
opacity:1;
}
100% {
opacity:1;
}
}
#-moz-keyframes cf4FadeInOut {
0% {
opacity:0;
}
25% {
opacity:1;
}
50% {
opacity:1;
}
100% {
opacity:1;
}
}
#-ms-keyframes cf4FadeInOut {
0% {
opacity:0;
}
25% {
opacity:1;
}
50% {
opacity:1;
}
100% {
opacity:1;
}
}
#cf4a {
position:relative;
height:250px;
width:300px;
margin:0 auto;
}
#cf4a img {
position:absolute;
left:0;
}
#cf4a img {
-webkit-animation-name: cf4FadeInOut;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: 1;
-webkit-animation-duration: 30s;
-moz-animation-name: cf4FadeInOut;
-moz-animation-timing-function: ease-in-out;
-moz-animation-iteration-count: 1;
-moz-animation-duration: 30s;
-ms-animation-name: cf4FadeInOut;
-ms-animation-timing-function: ease-in-out;
-ms-animation-iteration-count: 1;
-ms-animation-duration: 30s;
}
#cf4a img:nth-of-type(1) {
-webkit-animation-delay: 0;
-moz-animation-delay: 0;
-ms-animation-delay: 0;
}
#cf4a img:nth-of-type(2) {
-webkit-animation-delay: 30s;
-moz-animation-delay: 30s;
-ms-animation-delay: 30s;
}
#cf4a img:nth-of-type(3) {
-webkit-animation-delay: 60s;
-moz-animation-delay: 60s;
-ms-animation-delay: 60s;
}
</style>
<div id="cf4a">
<img src="img/bird1.jpg" />
<img src="img/tomato2.jpg" />
<img src="img/boat3.jpg" />
</div>
I believe part of your issue is z-index ordering during the animation and lack of overlap in the timing of the animations (in relation to that z-index).
Using a fade-out only technique (since you appear to be doing a one time animation of the images). I have a solution with a working demo tested in Firefox and Chrome (IE9 does not support animations, so you must be gearing up for IE10 with your initial use of -ms- extensions). Since I am only fading out once, no animation is needed on the final a tag, as it is unveiled last and remains (and is the default for non-CSS3 animating browsers).
The demo uses the following CSS code (same HTML as your original):
CSS
#-webkit-keyframes cf4FadeOut1 {
0% {
opacity:1;
z-index: 100;
}
80% { /* 6 sec trans on 30s animation */
opacity:1;
z-index: 100;
}
100% {
opacity:0;
z-index: 100;
}
}
#-moz-keyframes cf4FadeOut1 {
0% {
opacity:1;
z-index: 100;
}
80% { /* 6 sec trans on 30s animation */
opacity:1;
z-index: 100;
}
100% {
opacity:0;
z-index: 100;
}
}
#-ms-keyframes cf4FadeOut1 {
0% {
opacity:1;
z-index: 100;
}
80% { /* 6 sec trans on 30s animation */
opacity:1;
z-index: 100;
}
100% {
opacity:0;
z-index: 100;
}
}
#-webkit-keyframes cf4FadeOut2 {
0% {
opacity:1;
z-index: 2;
}
90% { /* 6 sec trans on 60s animation */
opacity:1;
z-index: 2;
}
100% {
opacity:0;
z-index: 2;
}
}
#-moz-keyframes cf4FadeOut2 {
0% {
opacity:1;
z-index: 2;
}
90% { /* 6 sec trans on 60s animation */
opacity:1;
z-index: 2;
}
100% {
opacity:0;
z-index: 2;
}
}
#-ms-keyframes cf4FadeOut2 {
0% {
opacity:1;
z-index: 2;
}
90% { /* 6 sec trans on 60s animation */
opacity:1;
z-index: 2;
}
100% {
opacity:0;
z-index: 2;
}
}
#cf4a {
position:relative;
height:250px;
width:300px;
margin:0 auto;
}
#cf4a a {
position:absolute;
left:0;
z-index: 0;
}
#cf4a a {
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: 1;
-webkit-animation-delay: 0;
-moz-animation-timing-function: ease-in-out;
-moz-animation-iteration-count: 1;
-moz-animation-delay: 0;
-ms-animation-timing-function: ease-in-out;
-ms-animation-iteration-count: 1;
-ms-animation-delay: 0;
}
#cf4a a:nth-of-type(1) {
-webkit-animation-name: cf4FadeOut1;
-moz-animation-name: cf4FadeOut1;
-ms-animation-name: cf4FadeOut1;
-webkit-animation-duration: 30s;
-moz-animation-duration: 30s;
-ms-animation-duration: 30s;
}
#cf4a a:nth-of-type(2) {
-webkit-animation-name: cf4FadeOut2;
-moz-animation-name: cf4FadeOut2;
-ms-animation-name: cf4FadeOut2;
-webkit-animation-duration: 60s;
-moz-animation-duration: 60s;
-ms-animation-duration: 60s;
}
In your fiddle and demo page you have the images wrapped in <a> tags. This causes the error to be in your use of :nth-of-type().
All your images are being affected by the :nth-of-type(1)
declaration since they are all 'first-child' elements within the <a> tags.
I made some changes and got it working slightly better than before. However, I still can't explain why the animation doesn't work properly when the image changes from the last one to the first one.
<head>
<title> CSS alpha animation test </title>
<meta charset="utf-8" />
</head>
<body>
<style>
#-webkit-keyframes cf4FadeInOut {
0% {
opacity:0;
}
45% {
opacity:0;
}
55% {
opacity:1;
}
100% {
opacity:1;
}
}
#cf4a {
position:relative;
height:250px;
width:300px;
margin:0 auto;
}
#cf4a img {
position:absolute;
left:0;
}
#cf4a img {
-webkit-animation-name: cf4FadeInOut;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-duration: 30s;
}
#cf4a img:nth-of-type(1) {
-webkit-animation-delay: 0s;
}
#cf4a img:nth-of-type(2) {
-webkit-animation-delay: 10s;
}
#cf4a img:nth-of-type(3) {
-webkit-animation-delay: 20s;
}
</style>
<div id="cf4a">
<img src="http://leongaban.com/_stack/css_animation/img/bird1.jpg" />
<img src="http://leongaban.com/_stack/css_animation/img/tomato2.jpg" />
<img src="http://leongaban.com/_stack/css_animation/img/boat3.jpg" />
</div>
</body>
</html>
Note that I have removed all the other code for the different browsers and just left the webkit code because I was testing this on chrome. I also changed the percentages complete as in their examples and that made a bit of a difference.
why dont you try using jquery.
function slideSwitch() {
var $active = $('#slideshow IMG.active');
if ( $active.length == 0 ) $active = $('#slideshow IMG:last');
var $next = $active.next().length ? $active.next()
: $('#slideshow IMG:first');
//var $sibs = $active.siblings();
//var rndNum = Math.floor(Math.random() * $sibs.length );
//var $next = $( $sibs[ rndNum ] );
$active.addClass('last-active');
$next.css({opacity: 0.0})
.addClass('active')
.animate({opacity: 1.0}, 1000, function() {
$active.removeClass('active last-active');
});
}
$(function() {
setInterval( "slideSwitch()", 5000 );
});