В этом уроке мы будем создавать слайдер изображений только с помощью CSS3. Свойства CSS3, которые мы будем использовать в этом уроке, работают только в последних версиях браузеров. Не рекомендуется использовать его в ваших профессиональных проектах, так как, возможно это не будет работать должным образом. Используйте это руководство просто для экспериментов с последними функциями CSS3.
Шаг 1 – HTML
Мы создадим два неупорядоченных списка, по одному для эскизов и один для изображений. Чтобы связать миниатюру с соответствующим изображением, мы будем добавлять идентификатор для каждого изображения.
<div class="slider-wrapper"> <ul class="s-thumbs"> <li><a href="#slide-1"><img src="img/thumb1.png" alt="" /></a></li> <li><a href="#slide-2"><img src="img/thumb2.png" alt="" /></a></li> <li><a href="#slide-3"><img src="img/thumb3.png" alt="" /></a></li> <li><a href="#slide-4"><img src="img/thumb4.png" alt="" /></a></li> <li><a href="#slide-5"><img src="img/thumb5.png" alt="" /></a></li> <li><a href="#slide-6"><img src="img/thumb6.png" alt="" /></a></li> <li><a href="#slide-7"><img src="img/thumb7.png" alt="" /></a></li> </ul> <ul class="s-slides"> <li id="slide-1"><img src="img/slide1.png" alt="" /></li> <li id="slide-2"><img src="img/slide2.png" alt="" /></li> <li id="slide-3"><img src="img/slide3.png" alt="" /></li> <li id="slide-4"><img src="img/slide4.png" alt="" /></li> <li id="slide-5"><img src="img/slide5.png" alt="" /></li> <li id="slide-6"><img src="img/slide6.png" alt="" /></li> <li id="slide-7"><img src="img/slide7.png" alt="" /></li> </ul> </div>
Шаг 2 – Основной код CSS
На этом этапе мы создадим основной стиль слайдера. Для этого мы сбросим поля и отступы всех элементов слайдера, дадим им фиксированную ширину / высоту и положение.
.slider-wrapper ul, .slider-wrapper li, .slider-wrapper div, .slider-wrapper img, .slider-wrapper a { margin: 0; padding: 0; border: none; outline: none; list-style: none; } .slider-wrapper { width: 508px; overflow: hidden; } ul.s-thumbs li { float: left; } ul.s-slides, ul.s-slides li, ul.s-slides a, ul.s-slides img { width: 500px; height: 350px; position: relative; } ul.s-slides { overflow: hidden; clear: both; } ul.s-slides li { position: absolute; z-index: 50; }
Шаг 3 – CSS3 Стиль
Теперь мы добавим Стили CSS3, чтобы слайдер выглядел лучше. Здесь мы будем использовать такие CSS3 свойства, как тени, закругленные углы и т.д. Обратите внимание, мы будем использовать различные префиксы для каждого браузера. Это необходимо потому, что эти свойства всё ещё в разработке в некоторых браузерах, и мы должны добавить префиксы, чтобы охватить их.
ul.s-thumbs li { float: left; margin-bottom: 10px; margin-right: 11px; } ul.s-thumbs li:last-child { margin-left: 1px; margin-right: 0; } ul.s-thumbs a { display: block; position: relative; width: 55px; height: 55px; border: 4px solid transparent; -webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out; -o-transition: all 0.25s ease-in-out; -ms-transition: all 0.25s ease-in-out; transition: all 0.25s ease-in-out; font: bold 12px/25px Arial, sans-serif; color: #515151; text-decoration: none; text-shadow: 1px 1px 0px rgba(255,255,255,.25), inset 1px 1px 0px rgba(0,0,0,.15); } ul.s-thumbs img { -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,.5); -moz-box-shadow: 1px 1px 5px rgba(0,0,0,.5); box-shadow: 1px 1px 5px rgba(0,0,0,.5); } ul.s-thumbs a:hover, ul.s-slides { border: 4px solid #141517; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0px 1px 0px rgba(255,255,255,.05); -moz-box-shadow: 0px 1px 0px rgba(255,255,255,.05); box-shadow: 0px 1px 0px rgba(255,255,255,.05); }
Шаг 4 – Описание изображения
На этом этапе мы добавим описание, оно будет появляться при наведении курсора на изображение. Мы создадим это, используя некоторые CSS3 стили и, прежде всего селектор, чтобы добавить стрелку к элементу.
HTML
Чтобы создать бокс, добавим тег “span” с текстом для привязки.
<ul class="s-thumbs"> <li><a href="#slide-1"><img src="img/thumb1.png" alt="" /><span>Image 1</span></a></li> <li><a href="#slide-2"><img src="img/thumb2.png" alt="" /><span>Image 2</span></a></li> <li><a href="#slide-3"><img src="img/thumb3.png" alt="" /><span>Image 3</span></a></li> <li><a href="#slide-4"><img src="img/thumb4.png" alt="" /><span>Image 4</span></a></li> <li><a href="#slide-5"><img src="img/thumb5.png" alt="" /><span>Image 5</span></a></li> <li><a href="#slide-6"><img src="img/thumb6.png" alt="" /><span>Image 6</span></a></li> <li><a href="#slide-7"><img src="img/thumb7.png" alt="" /><span>Image 7</span></a></li> </ul>
CSS
Чтобы создать бокс, мы добавим фиксированную ширину, чтобы иметь возможность центрировать его на изображение, и добавим теней и градиентов, чтобы сделать его лучше. Чтобы создать стрелку только с помощью CSS мы будем использовать трюк с границей бокса.
ul.s-thumbs li a:hover span { position: absolute; z-index: 101; bottom: -30px; left: -22px; display: block; width: 100px; height: 25px; text-align: center; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0px 1px 0px rgba(0,0,0,.4); -moz-box-shadow: 0px 1px 0px rgba(0,0,0,.4); box-shadow: 0px 1px 0px rgba(0,0,0,.4); -webkit-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out; -o-transition: all 0.25s ease-in-out; -ms-transition: all 0.25s ease-in-out; transition: all 0.25s ease-in-out; background: #ffffff; /* Old browsers */ background: -moz-linear-gradient(top, #ffffff 0%, #bcbcbc 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#bcbcbc)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ffffff 0%,#bcbcbc 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ffffff 0%,#bcbcbc 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #ffffff 0%,#bcbcbc 100%); /* IE10+ */ background: linear-gradient(top, #ffffff 0%,#bcbcbc 100%); /* W3C */ } ul.s-thumbs li a:hover span:before { width: 0; height: 0; border-bottom: 5px solid #ffffff; border-left: 5px solid transparent; border-right: 5px solid transparent; content: ''; position: absolute; top: -5px; left: 44px; } ul.s-thumbs li:first-child a:hover span { left: -3px; } ul.s-thumbs li:first-child a:hover span:before { left: 25px; } ul.s-thumbs li:last-child a:hover span { left: auto; right: -3px; } ul.s-thumbs li:last-child a:hover span:before { left: auto; right: 26px; }
Шаг 5 – Переходы
Сейчас мы начинаем создавать переходы слайдера. Что бы создать разнообразные переходы для каждого изображения, мы добавим разные классы ко всем изображениям.
HTML
<ul class="s-slides"> <li id="slide-1" class="slideLeft"><img src="img/slide1.png" alt="" /></li> <li id="slide-2" class="slideRight"><img src="img/slide2.png" alt="" /></li> <li id="slide-3" class="slideTop"><img src="img/slide3.png" alt="" /></li> <li id="slide-4" class="slideBottom"><img src="img/slide4.png" alt="" /></li> <li id="slide-5" class="zoomIn"><img src="img/slide5.png" alt="" /></li> <li id="slide-6" class="zoomOut"><img src="img/slide6.png" alt="" /></li> <li id="slide-7" class="rotate"><img src="img/slide7.png" alt="" /></li> </ul>
CSS
Для создания переходов мы будем использовать @keyframes. Анимация создается припомощи постепенного изменения от одного набора стилей CSS к другому. Чтобы указать, когда анимация начнется, изменится и завершится, мы будем использовать проценты, тое-есть 0% – начало анимации и 100% – когда анимация завершена. Давайте начнем создавать эту анимацию ..
Сдвиг изображения слева
В начале анимации, изображение будет позиционированно с отрицательным значением (слева 500px), когда анимация завершается, изображение будет позиционироваться 0px слева. Установив длительность анимации до 1 секунды мы получим слайд эффект слева на право.
/* Slide Left */ @-webkit-keyframes 'slideLeft' { 0% { left: -500px; } 100% { left: 0; } } ul.s-slides li.slideLeft:target { z-index: 100; -webkit-animation-name: slideLeft; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Сдвиг изображения справа
/* Slide Right */ @-webkit-keyframes 'slideRight' { 0% { left: 500px; } 100% { left: 0; } } ul.s-slides li.slideRight:target { z-index: 100; -webkit-animation-name: slideRight; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Сдвиг изображения сверху
/* Slide Top */ @-webkit-keyframes 'slideTop' { 0% { top: -350px; } 100% { top: 0; } } ul.s-slides li.slideTop:target { z-index: 100; -webkit-animation-name: slideTop; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Сдвиг изображения снизу
/* Slide Bottom */ @-webkit-keyframes 'slideBottom' { 0% { top: 350px; } 100% { top: 0; } } ul.s-slides li.slideBottom:target { z-index: 100; -webkit-animation-name: slideBottom; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Внутреннее увеличение изображение
Для создания зумирующего перехода, мыбудем использовать трансформирующие свойства CSS3. В начале анимации изображение будет иметь размер в 10% и к окончанию вернётся к своему оригинальному размеру. Мы поместим его с отступом в 4px сверху, чтобы исправить пробел, который появляется в нижней части.
/* Zoom In */ @-webkit-keyframes 'zoomIn' { 0% { -webkit-transform: scale(0.1); } 100% { -webkit-transform: none; } } ul.s-slides li.zoomIn:target { z-index: 100; top: 4px; -webkit-animation-name: zoomIn; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Вращение и увеличение изображение
/* Rotate */ @-webkit-keyframes 'rotate' { 0% { -webkit-transform: rotate(-360deg) scale(0.1); } 100% { -webkit-transform: none; } } ul.s-slides li.rotate:target { z-index: 100; top: 4px; -webkit-animation-name: rotate; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Внешнее увеличение изображение
/* Zoom Out */ @-webkit-keyframes 'zoomOut' { 0% { -webkit-transform: scale(2); } 100% { -webkit-transform: none; } } ul.s-slides li.zoomOut:target { z-index: 100; -webkit-animation-name: zoomOut; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Шаг 6 – Изображение “без цели”
При нажатии на новую миниатюру предыдущий активный слайд исчезнет, и появится последний во время перехода между слайдами. Чтобы исправить это, мы должны добавить нецелевой стиль с более высоким Z-индексом в новом переходе.
/* Not Target */ @-webkit-keyframes 'notTarget' { 0% { z-index: 75; } 100% { z-index: 75; } } ul.s-slides li:not(:target) { -webkit-animation-name: notTarget; -webkit-animation-duration: 1s; -webkit-animation-iteration-count: 1; }
Шаг 7 – Первый видимый слайд
Когда слайдер загрузится, появится последнее изображение. Для того, чтобы выбрать первое видимое изображение слайдера, мы создадим класс с более высоким Z-индексом и вам нужно будет только добавить этот класс для слайдера, который вы хотите видеть, пока слайдер загружается.
/* First Slide */ ul.s-slides li.first { z-index: 60; }
Шаг 7 – Загрузка слайдера
В этом шаге мы скроем анимацию при загрузке, потому что, когда загружается слайдер, он будет ждать 1 секунду, чтобы перейти к первому слайду. Если мы не хотим видеть этот переход, мы скроем его на 1 секунду.
/* Slider Load */ @-webkit-keyframes 'load' { 0% { opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; } } .slider-wrapper { -webkit-animation-name: load; -webkit-animation-duration: 2s; -webkit-transition-timing-function: ease-in-out; -webkit-animation-iteration-count: 1; }
Пример: