Всех с наступающим старым Новым годом! Сегодня создадим полноэкранное фоновое слайд-шоу, используя только CSS. Мы сделаем показ изображений с различными эффектами перехода между ними, а кроме того, с помощью CSS сделаем наложение анимированных заголовков.
Обратите внимание, что наша страничка будет работать только в тех браузерах, где поддерживается CSS анимация, а именно
IE: 10.0;
Firefox: 16.0, 5.0 -moz-;
Chrome: 43.0, 4.0 -webkit-;
Safari: 4.0 -webkit-;
Opera: 12.1, 12.0 -o-;
iOS Safari: 9, 7.1 -webkit-;
Opera Mini: —;
Android Browser: 44, 4.1 -webkit-;
Chrome for Android: 44;
Эта заметка является результатом недавних экспериментов с CSS3 при подготовке титульной страницы очередного сайта. Если хотите узнать больше, то обращайтесь сюда:
Для слайд-шоу используем неупорядоченный список < ul >. Используем тег < li >, где разместим изображение и заголовок к нему:
Image 01
никологоры· Церковь·Спаса·преображенья
Фоновые изображения будут показаны в режиме слайд-шоу.
CSS
В первую очередь добавим стиль для неупорядоченного списка. Здесь изображение растягиваем на всю область просмотра. Кроме того, используем псевдо-элемент :after для определения местоположения рисунка в верхней части экрана:
Изображение слайд-шоу будем позиционировать абсолютно со 100% шириной и высотой. Так как на изображение накладывается текст, то фоновый цвет сделаем прозрачным. Значение свойства background-size установим в значение cover, что бы фоновое изображение покрывало всю область просмотра и, следовательно, занимало весь экран. Непрозрачность устанавливается равной 0. При анимации мы будем изменять это значение:
Сеанс анимации будет продолжаться 36 секунд и запускаться бесконечно. Но давайте рассмотрим детали и, прежде всего, разделим стили для изображения и заголовка:
.cb-slideshow li div {
z-index: 1000;
position: absolute;
bottom: 30px;
left: 0px;
width: 100%;
text-align: center;
opacity: 0;
color: #fff;
animation: titleAnimation 36s linear infinite 0s;
}
.cb-slideshow li div h3 {
font-family: 'BebasNeueRegular', 'Arial Narrow', Arial, sans-serif;
font-size: 240px;
padding: 0;
line-height: 200px;
}
Анимации для названия раздела также будет продолжаться 36 секунд.
Теперь определим свойства фоновых изображений и задержки времени для каждого кадра таким образом, чтобы каждое следующее изображение слайд-шоу и заголовок появлялись через 6 секунд после предыдущего:
Теперь подробно рассмотрим анимационные свойства слайд-шоу. Каждый сеанс занимает 36 секунд. За эти 36 секунд изменим непрозрачность от 0 до 1 за 8% этого времени. Далее, в течение 17% времени непрозрачность сохраняется. При достижении 25% времени непрозрачности должно быть установлена в 0 и оставаться такой до конца.
Теперь, почему именно эти значения? Мы хотим видеть каждое изображение в течение 6 секунд и знаем, что в конце цикла должно появиться первое изображение для начала следующего цикла. У нас есть 6 изображений и полный сеанс до окончания занимает 36 секунд. Нам нужно вычислить «время» соответствующего значения непрозрачности. Зная, что наше второе изображение будет показано через 6 секунд, мы должны знать процентиль анимации, который потребуется для постепенного исчезновения первого изображения. Разделив 6 на 36, получим 0,166…, которые и есть те самые 16% каждого шага ключевого кадра. Если мы не хотим, чтобы наше изображение просто исчезло в это время, то определим интервал шага и установим его в половину того, что получили, то есть 8%. Это тот самый момент, когда изображение будет показано полностью, прежде чем начнет растворятся до 17% и полностью исчезнет на уровне 25%.
Для браузеров, которые не поддерживают анимацию, мы просто будем показывать последнее изображение слайд-шоу, установив его непрозрачность в 1:
.no-cssanimations.cb-slideshow li span{
opacity: 1;
}
Класс no-cssanimations добавляется с помощью Modernizr.
Позаботимся о размере шрифта заголовка для небольших девайсов. Для этого используем медиа-запросы и подберём соответствующий размер для наименьшей ширины:
@media screen and (max-width: 1140px) {
.cb-slideshow li div h3 { font-size: 140px }
}
@media screen and (max-width: 600px) {
.cb-slideshow li div h3 { font-size: 80px }
}
Вот и все для самой простой версии слайд-шоу! Попробуем немного оживить переходы.
Пример альтернативной анимации
С анимацией показа изображений и их названия можно немного поиграть.
В следующем варианте анимации будем немного вращать и масштабировать изображение: