Небольшое слайд-шоу с эффектом постепенного затухания.
Эффект затухания этого небольшого слайд-шоу очень легко реализовать с помощью CSS3. Эффект обеспечивает плавнуюую и мягкую смену элементов. И главное, эффект представленный здесь обходится без JavaScript.
Можно любой «DIV» контейнер, в том числе и с текстом, настроить на эффект с мягким, постепенным затуханием.
В этом примере описано небольшое слайд-шоу с затуханием (FADE) пяти изображений и показаны шаги, необходимые для его создания.
Для начала расположим фотографии друг за другом в ряд в отдельном контейнере «DIV» с именем «stapel», как видно в HTML:
<div id="stapel">
<img src="reisen_suedtirol201005.jpg" width="800" height="551"
alt="Gesamtansicht der Lobiser Schupfen">
<img src="reisen_suedtirol201004.jpg" width="800" height="551"
alt="Lobiser Schupfen">
<img src="reisen_suedtirol201003.jpg" width="800" height="551"
alt="Lobiser Schupfen">
<img src="reisen_suedtirol201002.jpg" width="800" height="551"
alt="Gabel-Spitze - Am Ende des Knuttental">
<img src="reisen_suedtirol201001.jpg" width="800" height="551"
alt="Schnee im Knuttental bei Rein in Taufers">
</div>Изображения в контейнере «DIV» «stapel» выровнены абсолютно с помощью CSS.
Это гарантирует, что изображения отображаются в одном месте, без сдвига.
#stapel {
height: 34.438em;
width: 50em;
margin: -2.5em auto 1.2em;
border: 5px solid #eee;
box-shadow: 1px 1px 5px 2px #777;
}
#stapel img {
position: absolute;
height: 34.438em;
width: 50em;
}К этому моменту все изображения будут сложены и будет видно последнюю картину. А для тех браузеров, которые не могут отображать следующую анимацию (например, IE8), на этом всё закончится и будет видно только последнее изображение.
Поскольку изображения должны плавно появляться и сменяться, устанавливаем «opacity: 0» и в свойствах анимации CSS3 добавляется элемент «#stapel img«.
Для всей анимации (смена всех пяти изображений), выбрано 30 секунд. И так как эта анимация должна работать в бесконечном цикле, свойство «animation-iteration-count» используется с необходимой величины «infinite».
#stapel img {
position: absolute;
height: 34.438em;
width: 50em;
opacity: 0;
animation-duration: 30s;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
}Или сокращенные обозначения:
#stapel img {
position: absolute;
height: 34.438em;
width: 50em;
opacity: 0;
animation: 30s ease-in-out infinite;
}Теперь нужно назначить различное время анимации для каждого изображения.
Можно назначить каждому изображению свой »класс» и, таким образом, решить в индивидуальном порядке. Но в этом случае назначим анимациям получат собственные имена и использовуем псевдо-класс «nth-of-type«. Информация, содержащаяся в CSS для образования имен и эффекта перехода выглядит следующим образом:
#stapel img:nth-of-type(1) {
animation-name: fade1;
}
#stapel img:nth-of-type(2) {
animation-name: fade2;
}
#stapel img:nth-of-type(3) {
animation-name: fade3;
}
#stapel img:nth-of-type(4) {
animation-name: fade4;
}
#stapel img:nth-of-type(5) {
animation-name: fade5;
}
@keyframes fade1 {
0% {opacity:1;}
10% {opacity:1;}
20% {opacity:0;}
30% {opacity:0;}
40% {opacity:0;}
50% {opacity:0;}
60% {opacity:0;}
70% {opacity:0;}
80% {opacity:0;}
90% {opacity:0;}
100% {opacity:1;}
}
@keyframes fade2 {
0% {opacity:0;}
10% {opacity:0;}
20% {opacity:1;}
30% {opacity:1;}
40% {opacity:0;}
50% {opacity:0;}
60% {opacity:0;}
70% {opacity:0;}
80% {opacity:0;}
90% {opacity:0;}
100% {opacity:0;}
}
@keyframes fade3 {
0% {opacity:0;}
10% {opacity:0;}
20% {opacity:0;}
30% {opacity:0;}
40% {opacity:1;}
50% {opacity:1;}
60% {opacity:0;}
70% {opacity:0;}
80% {opacity:0;}
90% {opacity:0;}
100% {opacity:0;}
}
@keyframes fade4 {
0% {opacity:0;}
10% {opacity:0;}
20% {opacity:0;}
30% {opacity:0;}
40% {opacity:0;}
50% {opacity:0;}
60% {opacity:1;}
70% {opacity:1;}
80% {opacity:0;}
90% {opacity:0;}
100% {opacity:0;}
}
@keyframes fade5 {
0% {opacity:0;}
10% {opacity:0;}
20% {opacity:0;}
30% {opacity:0;}
40% {opacity:0;}
50% {opacity:0;}
60% {opacity:0;}
70% {opacity:0;}
80% {opacity:1;}
90% {opacity:1;}
100% {opacity:0;}
}
Для эффекта перехода, можно изменить прозрачность изображений следующим образом.
Первое изображение начинает медленно растворяется через 10% выделенного времени, пока полностью не исчезнет после 20%, «opacity: 0«. В течение этого времени, второе изображение начинает медленно проявляться, таким образом, что после 15%, когда первое изображение наполовину растворилось, второе изображение становится наполовину видимо. других изображений происходит таким же образом.
И так как в правилах «@keyframes» должно происходить только изменение состояний, а также одинаковые значения могут быть объединены, CSS получается совсем небольшим:
@keyframes fade1 {
0%, 10%, 100% {opacity:1;}
20%, 90% {opacity:0;}
}
@keyframes fade2 {
0%, 10%, 40%, 100% {opacity:0;}
20%, 30% {opacity:1;}
}
@keyframes fade3 {
0%, 30%, 60%, 100% {opacity:0;}
40%, 50% {opacity:1;}
}
@keyframes fade4 {
0%, 50%, 80%, 100% {opacity:0;}
60%, 70% {opacity:1;}
}
@keyframes fade5 {
0%, 70%, 100% {opacity:0;}
80%, 90% {opacity:1;}
}Оптимизированные данные
Поскольку отдельные правила «@ KeyFrames» для всех изображений одинаковы, можно использовать только одно правило, но с расположенными последовательно значениями времени запуска для всех изображений. Это означает, что информация о анимации (продолжительность анимации и характер перехода) больше не находится в «#stapel IMG«, а может быть определена для каждого изображения в правилах «@ KeyFrames«.
Расчет времени анимации и старта. В скобках указаны значения для этого небольшого слайд-шоу:
A: Количество изображений (5)
Z: Время, которое изображение полностью видно (4 секунды)
D: Длительность перехода (2 секунды)
G = ( Z + D ) * A: Полное время анимации (30 секунд)
S = G / A: Сдвиг времени старта (6 секунд)
Время старта сдвигается последовательно на 6 секунд. Таким образом, анимация для первого изображения начинается с 0 секунд, второе изображение после 6 секунд, следующее через 12 секунд, и так далее.
Новый и гораздо меньший CSS со всеми подробностями:
#stapel {
height: 34.438em;
width: 50em;
margin: -2.5em auto 1.2em;
border: 5px solid #eee;
box-shadow: 1px 1px 5px 2px #777;
}
#stapel img {
position: absolute;
height: 34.438em;
width: 50em;
opacity: 0;
}
#stapel img:nth-of-type(1) {
animation: fade 30s ease-in-out infinite;
}
#stapel img:nth-of-type(2) {
animation: fade 30s 6s ease-in-out infinite;
}
#stapel img:nth-of-type(3) {
animation: fade 30s 12s ease-in-out infinite;
}
#stapel img:nth-of-type(4) {
animation: fade 30s 18s ease-in-out infinite;
}
#stapel img:nth-of-type(5) {
animation: fade 30s 24s ease-in-out infinite;
}
@keyframes fade {
6.66%, 20% {opacity:1;}
0%, 26.66%, 100% {opacity:0;}
}Чего не хватает, так это объяснения того, как рассчитать проценты непрозрачности «opacity» определенные в правилах «@KeyFrames«.

Что бы так же, при первом проходе анимации, то есть от 0 до 30 секунд, было видно затухание изображения, непрозрачность должна быть установлена на 0% «opacity: 0».
Другие проценты рассчитываются в соответствии со схемой, описанной выше. В скобках указаны значения для этого небольшого слайд-шоу:
A: Количество изображений (5)
Z: Время, которое изображение полностью видно (4 секунды)
D: Длительность перехода (2 секунды)
G = ( Z + D ) * A: Полное время анимации (30 секунд)
S = G / A: Сдвиг времени старта (6 секунд)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — —
{opacity:0;} — = 0%
{opacity:1;} — [ 100% * D / G ] = 6,66%
{opacity:1;} — [ 100% / A ] = 20%
{opacity:0;} — [ 100% * ( Z + ( 2 * D ) ) / G ] = 26,66%
{opacity:0;} — = 100%
Готово и, при этом, конец оптимизации!
С помощью этих простых средств были созданы красивые и плавные переходы в слайд-шоу, пример которого можно посмотреть ниже:
