Простые слайдеры на css примеры. Адаптивный слайдер на CSS с креативным эффектом. Потрясное слайд-шоу jQuery «Skitter»

Слайдер без использования JavaScript с крутым эффектом перелистывания слайдов. Отлично адаптируется под любые устройства. Исходники в наличии.

Особенность: слайдер на CSS

Слайдер на чистом CSS — это готовый слайдер с автоматическим переключением слайдов без помощи JS-скриптов. Как правило, такой вид слайдеров ценится начинающими разработчиками или в том случае, когда нет возможности\необходимость подключать библиотеки.

Разумеется, проще воспользоваться специальными плагинами для создания слайдеров (таких очень много, на том же jQuery). Но данный слайдер соблазняет своим необычным эффектом перелистывания слайдов. При чем, с высокой производительностью.

Как использовать этот пример у себя на сайте

По ссылке выше, Вы можете скачать архив, в котором будет располагаться файл slider-css.html . Теоретически, все, что Вам необходимо для запуска слайдера на CSS на Вашем сайте, находится в этом файле. Вот Ваш алгоритм действий:

1. Копируем все стили блока слайдера, они находятся в теге

...

Обратите внимание, что контейнер.untitled имеет свойства position: absolute и возможно, Вам придется немного адаптировать его под себя.

2. Все слайды обернуты в

...

< div class = "untitled" >

< div class = "untitled__slides" >

. . .

< / div >

< / div >

3. В самом HTML-коде слайда разобраться несложно

London Scout Unsplash Profile

< div class = "untitled__slide" >

< div class = "untitled__slideBg" > < / div >

< div class = "untitled__slideContent" >

< span > London < / span >

< span > Scout < / span >

< a class = "button" href = "https://unsplash.com/@scoutthecity" target = "/black" > Unsplash Profile < / a >

Работая над книгой о jquery , я столкнулся с тем, что многие мои подписчики просили меня рассказать в ней как на jquery написать скрипт слайдера. Пардон, дорогие друзья! На дворе XXI век и, на наше счастье, нам доступны все прелести CSS3 , позволяющие реализовать подобные вещи без единой строчки javascript .

Часть 1.

Для начала, поясню тем, кто не знает что такое слайдер. Слайдер - это определенный ширины блок, занимающий часть веб-страницы, или же всю ее целиком. Основная его особенность в изменяющемся в автоматическом или ручном режиме контенте. В качестве контента могут выступать как графические изображения, так и некий текст.

Конечно, вы можете поинтересоваться: зачем изобретать велосипед, если полно реализаций слайдеров на javascript? Вот мои аргументы:

  • CSS эффекты работают быстрее. Это хорошо заметно на мобильных устройствах.
  • Чтобы создать слайдер не требуются навыки программирования.
  • Итак, для нашего примера, вам нужно четыре изображения, хотя в своем проекте вы можете сделать полоску с таким количеством изображений, какое вам нужно. Единственным условием является то, что все изображения должны быть одинакового размера. Еще, забыл вам сказать, наш слайдер будет адаптивным (да-да, адаптивная верстка , вы не ошиблись) и вы сможете использовать его в любых своих проектах для любых устройств. Но, довольно болтовни, у меня уже руки чешутся написать мега-код. Начнем с HTML :

    Я оставил пустым атрибут alt , чтобы сэкономить место, Вы же можете его заполнить сами, исходя из ваших SEO запросов и для информирования пользователей, отключивших в браузере показ картинок. Хочу также обратить ваше внимание на то, что первое изображение (alladin.jpg ) будет присутствовать и в конце полосы, что позволит нашему слайдеру прокручиваться циклично без рывков.

    Для удобства width составляет 80% окна, а max-width соответствует размеру каждой отдельной фотографии (1000 пикселей в нашем примере), поскольку нам не нужно растянутое изображение:

    Slider { width: 80%; max-width: 1000px; }

    В нашем коде CSS, ширина figure выражена в процентном отношении к div , в котором она расположена. То есть, если полоса изображений содержит пять фотографий, а div выдает всего одно, ширина figure увеличивается в пять раз, что составляет 500% ширины контейнера div:

    Параметр font-size: 0 выкачивает из figure весь воздух, удаляя свободное пространство вокруг изображений и между ними. position: relative позволяет легко перемещать figure во время анимации.

    Нам нужно поровну разделить фотографии внутри полосы изображений. Формула очень проста: если мы предположим, что ширина figure составляет 100%, каждое изображение должно занимать 1/5 горизонтального пространства:

    Возникает потребность в использовании следующего CSS правила:

    Imagestrip img { width: 20%; height: auto; }

    Теперь поменяем свойство overflow для div:

    Slider { width: 80%; max-width: 1000px; overflow: hidden }

    Наконец, нам надо сделать так, чтобы полоса изображений перемещалась слева направо. Если ширина контейнера div составляет 100%, каждое движение полосы изображений влево будет измеряться в процентных долях этого расстояния:

    @keyframes slidy { 20% { left: 0%; } 25% { left: -100%; } 45% { left: -100%; } 50% { left: -200%; } 70% { left: -200%; } 75% { left: -300%; } 95% { left: -300%; } 100% { left: -400%; } }

    Каждое изображение на слайдере будет заключено в div и будет перемещаться на 5%.

    Slider figure { position: relative; width: 500%; animation: 30s slidy infinite; font-size: 0; padding: 0; margin: 0; left: 0; }

    Часть 2.

    Мы сделали мега-крутой слайдер без javascript . А давайте, прежде чем пойти почивать на лаврах, добавим в него кнопки управления. Точнее, не в него (с ним мне уже лень возиться), а создадим новый.


    Так, наш HTML код:

    Теперь позаботимся об анимации наших слайдов. К сожалению, для разного числа слайдов она будет отличаться:

    /* для слайдера из двух слайдов */ @keyframes slider__item-autoplay_count_2 { 0%{opacity:0;} 20%{opacity:1;} 50%{opacity:1;} 70%{opacity:0;} 100%{opacity:0;} } /* для слайдера из трех слайдов */ @keyframes slider__item-autoplay_count_3 { 0%{opacity:0;} 10%{opacity:1;} 33% {opacity:1;} 43% {opacity:0;} 100%{opacity:0;} } /* для слайдера из четырех слайдов */ @keyframes slider__item-autoplay_count_4 { 0%{opacity:0;} 8% {opacity:1;} 25% {opacity:1;} 33% {opacity:0;} 100%{opacity:0;} } /* для слайдера из пяти слайдов */ @keyframes slider__item-autoplay_count_5 { 0%{opacity:0;} 7% {opacity:1;} 20%{opacity:1;} 27% {opacity:0;} 100%{opacity:0;} }

    Печально, не так ли? Кроме того, не забудьте, что для Оперы, Хрома, ИЕ, и Мозиллы нужно написать все тоже самое, но с соответствующим префиксом. Теперь напишем код для анимации наших слайдов (здесь и далее будет показан код для трех слайдов. Код для большего числа сайтов Вы можете увидеть в коде примера):

    Slider_count_3 .item { -moz-animation: slider__item-autoplay_count_3 15s infinite; -webkit-animation: slider__item-autoplay_count_3 15s infinite; -o-animation: slider__item-autoplay_count_3 15s infinite; animation: slider__item-autoplay_count_3 15s infinite; } .item:nth-of-type(2) { -moz-animation-delay:5s; -webkit-animation-delay:5s; -o-animation-delay:5s; animation-delay:5s; } .item:nth-of-type(3) { -moz-animation-delay:10s; -webkit-animation-delay:10s; -o-animation-delay:10s; animation-delay:10s; }

    Как видите, для первой пары нулевое смещение не меняется. Кроме того, смещение не зависит от количества слайдов, поэтому его можно описать один раз для максимального числа слайдов. Теперь сделаем так, чтобы слайды не менялись, когда пользователь навел курсор мыши на наш слайдер:

    Slider:hover .item { -moz-animation-play-state: paused; -webkit-animation-play-state: paused; -o-animation-play-state: paused; animation-play-state: paused; }

    Наконец, мы с вами добрались до переключения наших слайдов. Как известно, есть целый ряд событий, позволяющих менять свойства элемента при помощи CSS. Для клика мыши нам могут помочь псевдоклассы :focus , :target , или :checked у одного из элементов страницы. Псевдокласс:focus может быть только у одного элемента на страницу, :target засоряет историю браузера и требует наличие тега ; псевдокласс:checked запоминает состояние до ухода со страницы, и, в случае радиокнопок, может быть выбран только у одного элемента в группе. Воспользуемся этим. Вставим перед следующий HTML код

    А после :

    1 2 3

    /* Стиль слайдеров в состоянии "не выбран" */ .slider .item ~ .item { opacity: 0.0; } /* Стиль слайдеров в состоянии "выбран" */ .slider input:nth-of-type(1):checked ~ .item:nth-of-type(1), .slider input:nth-of-type(2):checked ~ .item:nth-of-type(2), .slider input:nth-of-type(3):checked ~ .item:nth-of-type(3), .slider input:nth-of-type(4):checked ~ .item:nth-of-type(4), .slider input:nth-of-type(5):checked ~ .item:nth-of-type(5) { opacity: 1.0; }

    Мы использовали переключение свойства opacity слайда-контейнера с картинкой. Это связано с тем, что в div-контейнер, в отличие от элемента img, можно поместить любую дополнительную информацию (например, название слайда). Конечно, если бы мы пользовались Javascript, мы могли бы воспользоваться атрибутом data. Но мы с вами договорились, помните?)) Для слайдов укажем свойства transition, чтобы переключение происходило плавно, а не рывками.

    Slider .item { -moz-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear; transition: opacity 0.2s linear; }

    Остановка анимации всех слайдов и кнопок при выборе любого слайда осуществим при помощи следующего CSS кода:

    Slider input:checked ~ .item { opacity: 0.0; -moz-animation: none; -webkit-animation: none; -o-animation: none; animation: none; }

    Для поддержки некоторых старых браузеров мы не анимируем первый слайд, установив для него opacity: 1.0 , но при этом мы поимеем проблему: при плавном переключении двух других слайдов между собой, первый слайд просвечивает. Для ликвидации этого бага устанавливаем задержку transition-delay для всех слайдов, кроме выбранного, а для него сделаем z-index больше, чем у всех остальных слайдов:

    Slider .item { opacity: 1.0; -moz-transition: opacity 0.0s linear 0.2s; -webkit-transition: opacity 0.0s linear 0.2s; -o-transition: opacity 0.0s linear 0.2s; transition: opacity 0.0s linear 0.2s; } .slider input:nth-of-type(1):checked ~ .item:nth-of-type(1), .slider input:nth-of-type(2):checked ~ .item:nth-of-type(2), .slider input:nth-of-type(3):checked ~ .item:nth-of-type(3), .slider input:nth-of-type(4):checked ~ .item:nth-of-type(4), .slider input:nth-of-type(5):checked ~ .item:nth-of-type(5) { transition: opacity 0.2s linear; -moz-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear; z-index: 6; }

    Чтобы слайды не конфликтовали с другими элементами сайта (например, не перекрывали выпадающее меню с z-index менее или равным 6), создаем свой контекст для блока путем задания минимально, необходимого для видимости, z-index:

    Slider { position: relative; z-index: 0; }

    Вот собственно говоря и все. Осталось только спозиционировать наши элементы с помощью нижеследующего CSS кода и можно радоваться:

    Slider { position: relative; z-index:0; } .slider input { display: none; } .slider label { bottom: 10px; display: inline-block; z-index: 2; width: 26px; height: 27px; background: #f4f4f5; border: 1px solid #e6e6e6; border-bottom-color: #bfbfbf; border-radius: 4px; box-shadow: inset 0 1px 0 #ffffff, 0 1px 2px #000000; text-align: center; cursor: pointer; font: 14px/27px arial, tahoma; color: #333; } .slider .selector_list { position: absolute; bottom: 15px; right: 15px; z-index: 11; } .slider .item { position: relative; width:100%; } .slider .item ~ .item { position: absolute; top: 0px; left: 0px; }

    Вот такой адаптивный слайдер без Javascript на CSS3 у вас должен получиться в итоге.













    Здравствуйте уважаемые начинающие веб-мастера.

    Вот самый простой в мире слайдер на чистом CSS.

    К преимуществам такого слайдера можно отнести лёгкость и безопасность, а так же то, что его сможет сделать и установить на свой сайт даже самый начинающий веб-мастер.

    А недостаток в том, что только на CSS невозможно сделать повтор цикла.

    Но если учесть, что восемь картинок прокручиваются более 30 секунд, то этого времени вполне достаточно посетителю для просмотра страницы.

    И если слайдер установлен в шапке сайта, то её уж точно никто полминуты рассматривать не будет.

    Эффекты появления картинок можно изменить по своему вкусу, и в соответствии с возможностями CSS3. Давайте смотреть где и как это можно сделать.





    Слайдер CSS

    /* Блок слайдера */
    #slaid {
    /* Задаём относительное позиционирование */
    position : relative ;
    /*Размер и рамка блока*/
    width : 400px ;
    height : 200px ;
    border : 2px solid #333 ;
    border-radius : 5px ;
    }
    /* Групповой селектор для 7-ми картинок */
    .image1,
    .image2,
    .image3,
    .image4,
    .image5,
    .image6,
    .image7 {
    /* Позиционируем абсолютно относительно блока */
    position : absolute ;
    /* Делаем их полностью прозрачными */
    opacity : 0 ;
    width : 400px ;
    height : 200px ;
    }
    /* Подключаем анимацию к первой картинке */
    .image1 {
    animation : one-image 8s 1s ease alternate ;
    }
    /* Анимация последующих картинок выполняется с задержкой начала необходимой для прокрутки предыдущих изображений */
    .image2 {
    animation : two-image 8s 5s ease alternate ;
    }
    .image3 {
    animation : three-image 8s 10s ease alternate ;
    }
    .image4 {
    animation : four-image 8s 14s ease alternate ;
    }
    .image5 {
    animation : five-image 8s 18s ease alternate ;
    }
    .image6 {
    animation : six-image 8s 22s ease alternate ;
    }
    .image7 {
    animation : seven-image 8s 26s ease alternate ;
    }
    /* Последняя картинка не прозрачная остаётся видной после прокрутки */
    .image8 {
    position : absolute;
    width : 400px ;
    height : 200px ;
    animation : eight-image 34s ease alternate ;
    }
    /* Анимации для первой картинки */
    @keyframes one-image {

    /* Задаём изменение прозрачности. Здесь можно добавить вращение, перемещение из-за границ блока или появление из центра (масштабирование) */
    0% {
    opacity : 1 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }
    /* Анимация для следующих 6-и картинок */
    @keyframes two-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }

    @keyframes three-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }

    @keyframes four-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }

    @keyframes five-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }

    @keyframes six-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }

    @keyframes seven-image {
    0% {
    opacity : 0 ;
    }
    50% {
    opacity : 1 ;
    }
    100% {
    opacity : 0 ;
    }
    }
    /* Анимация для восьмой картинки */
    @keyframes eight-image {
    /* остаётся прозрачной пока не прокрутятся предыдущие */
    0% {
    opacity : 0 ;
    }
    87% {
    opacity : 0 ;
    }
    /*Становиться видимой в конце работы слайдера */
    100% {
    opacity : 1 ;
    }
    }














    И на всякий случай — чтобы появилась возможность прокрутить слайдер ещё раз можно добавить следующий код:


    var CLN; onload = function () {CLN = document.getElementById ("slaid").cloneNode (3)}

    При этом под слайдером появится кнопка которую можно назвать как Вам угодно и оформить в CSS.

    P.S. Если постараться и подогнать интервалы показа картинок в @keyframes, то карусель можно сделать непрерывной.

    У меня получилось. Можно посмотреть вот . Текст в баннерах прокручивается свойствами анимации без скрипта.

    Правда получилось сделать только с тремя картинками.

    P.P.S. Теперь подобные баннеры и на этом сайте под шапкой сайта.

    Желаю творческих успехов.

    1. Превосходное jQuery слайд-шоу

    Большое эффектное слайд-шоу с использованием jQuery технологий.

    2. jQuery плагин «Scale Carousel»

    Масштабируемое слайд-шоу с использованием jQuery. Вы сможете задать размеры для слайд-шоу, которые вам больше всего подходят.

    3. jQuery плагин «slideJS»

    Слайдер изображений с текстовым описанием.

    4. Плагин «JSliderNews» 5. CSS3 jQuery слайдер

    При наведении курсора на стрелки навигации появляется круглая миниатюра следующего слайда.

    6. Симпатичный jQuery слайдер «Presentation Cycle»

    jQuery слайдер с индикатором загрузки изображений. Предусмотрена автоматическая смена слайдов.

    7. jQuery плагин «Parallax Slider»

    Слайдер с объемным фоновым эффектом. Изюминка этого слайдера в движение фона, который состоит из нескольких слоев, каждый из которых прокручивается с различной скоростью. В итоге получается имитация объемного эффекта. Выглядит очень красиво, вы можете сами в этом убедиться. Более плавно эффект отображается в таких браузерах как: Opera, Google Chrome, IE.

    8. Свежий, легкий jQuery слайдер «bxSlider 3.0»

    На демонстрационной странице в разделе «examples» вы сможете найти ссылки на все возможные варианты использования этого плагина.

    9. jQuery слайдер изображений, плагин «slideJS»

    Стильный jQuery слайдер, безусловно сможет украсить ваш проект.

    10. jQuery плагин слайд-шоу «Easy Slides» v1.1

    Простой в использовании JQuery плагин для создания слайд-шоу.

    11. Плагин «jQuery Slidy»

    Легкий jQuery плагин в различном исполнении. Предусмотрена автоматическая смена слайдов.

    12. jQuery CSS галерея с автоматической сменой слайдов

    Если посетитель в течении определенного времени не нажмет на стрелки «Вперед» или «Назад», то галерея начнет прокручиваться автоматически.

    13. jQuery слайдер «Nivo Slider»

    Очень профессиональный качественный легкий плагин с валидным кодом. Предусмотрено много различных эффектов смены слайдов.

    14. jQuery слайдер «MobilySlider»

    Свежий слайдер. jQuery слайдер с различными эффектами смены изображений.

    15. jQuery Плагин «Slider²»

    Легкий слайдер с автоматической сменой слайдов.

    16. Свежий javascript слайдер

    Слайдер с автоматической сменой изображений.

    Плагин для реализации слайд-шоу с автоматической сменой слайдов. Есть возможность управлять показом с помощью миниатюр изображений.

    jQuery CSS слайдер изображений с использованием плагина NivoSlider .

    19. jQuery слайдер«jShowOff»

    Плагин для ротации содержимого. Три варианта использования: без навигации (с автоматической сменой в формате слайд-шоу), с навигацией в виде кнопок, с навигацией в виде миниатюр изображений.

    20. Плагин «Shutter Effect Portfolio»

    Свежий jQuery плагин для оформления портфолио фотографа. В галерее реализован интересный эффект смены изображений. Фотографии сменяют друг друга с эффектом похожим на работу затвора объектива.

    21. Легкий javascript CSS слайдер «TinySlider 2»

    Реализация слайдера изображений с использованием javascript и CSS.

    22. Обалденный слайдер «Tinycircleslider»

    Стильный круглый слайдер. Переход между изображениями осуществляется с помощью перетаскивания по окружности ползунка в виде красного круга. Отлично впишется в ваш сайт, если вы в дизайне используете круглые элементы.

    23. Слайдер изображений на jQuery

    Легкий слайдер «Slider Kit». Слайдер представлен в различном исполнении: вертикальный и горизонтальный. Также реализованы различные виды навигации между изображениями: с помощью кнопок «Вперед» и «Назад», с помощью колеса мыши, с помощью клика мыши по слайду.

    24. Галерея с миниатюрами «Slider Kit»

    Галерея «Slider Kit». Прокрутка миниатюр осуществляется как в вертикальном так и горизонтальном направлении. Переход между изображениями осуществляется с помощью: колеса мыши, щелчка мыши или наведения курсора на миниатюру.

    25. jQuery слайдер содержимого «Slider Kit»

    Вертикальный и горизонтальный слайдер контента на jQuery.

    26. jQuery слайд-шоу «Slider Kit»

    Слайд-шоу с автоматической сменой слайдов.

    27. Легкий профессиональный javascript CSS3 слайдер

    Аккуратный слайдер на jQuery и CSS3, созданный в 2011 году.

    jQuery слайд-шоу с миниатюрами.

    29. Простое jQuery слайд-шоу

    Слайд-шоу с кнопками навигации.

    30. Потрясное слайд-шоу jQuery «Skitter»

    jQuery плагин «Skitter» для создания потрясающего слайд-шоу. Плагин поддерживает 22 (!) вида различных анимационных эффектов при смене изображений. Может работать с двумя вариантами навигации по слайдам: с помощью номеров слайдов и с помощью миниатюр. Обязательно посмотрите демонстрацию, очень качественная находка. Используемые технологии: CSS, HTML, jQuery, PHP.

    31. Слайд-шоу «Awkward»

    Функциональное слайд-шоу. В виде слайдов могут выступать: простые изображения, изображения с подписями, изображения с всплывающими подсказками, видео-ролики. Для навигации можно использовать стрелки, ссылки на номера слайдов и клавиши вправо/влево на клавиатуре. Слайд-шоу выполнено в нескольких вариантах: с миниатюрами и без них. Для просмотра всех вариантов пройдитесь по ссылкам Demo #1 - Demo #6 расположенным сверху на демонстрационной странице.

    Очень оригинальное оформление слайдера изображений, напоминающее веер. Анимированная смена слайдов. Навигация между изображениями осуществляется с помощью стрелок. Предусмотрена также автоматическая смена, которую можно включать и выключать с помощью кнопки Play/Pause, расположенной сверху.

    Анимированный jQuery слайдер. Фоновые изображения автоматически масштабируются при изменении размеров окна браузера. Для каждого изображения выплывает блок с описанием.

    34. «Flux Slider» слайдер на jQuery и CSS3

    Новый jQuery слайдер. Несколько классных анимированных эффектов при смене слайдов.

    35. jQuery плагин «jSwitch»

    Анимированная jQuery галерея.

    Легкое слайд-шоу на jQuery c автоматической сменой слайдов.

    37. Новая версия плагина «SlideDeck 1.2.2»

    Профессиональный слайдер контента. Возможны варианты с автоматической сменой слайдо, а также вариант с использованием колеса мыши для перехода между слайдами.

    38. jQuery слайдер «Sudo Slider»

    Легкий сладер изображений на jQuery. Очень много вариантов реализации: горизонтальная и вертикальная смена изображений, со ссылками на номер слайда и без них, с подписями изображений и без, различные эффекты смены изображений. Есть функция автоматической смены слайдов. Ссылки на все примеры реализации можно найти на демонстрационной странице .

    39. jQuery CSS3 слайд-шоу

    Слайд-шоу с миниатюрами поддерживает режим автоматической смены слайдов.

    40. jQuery cлайдер «Flux Slider»

    Слайдер с множеством эффектов смены изображений.

    41. Простой jQuery слайдер

    Стильный слайдер изображений на jQuery.

  • HTML
  • С развитием CSS3, возможности верстки растут экспоненциально. Всё больше функционала можно реализовать на «чистом» CSS. В этом посте показан процесс разработки интерактивного циклического слайдера без единой строчки JavaScript. Автоматическая ротация, выбор любого слайда с плавным переходом – на «чистом» CSS . Пример в действии

    Общая информация.Стандарты и префиксы Свойства transition, animation и transform уже давно, в том или ином виде, реализованы во всех популярных браузерах. 6 июня 2012 года W3C объявил, что эта часть разрабатываемого стандарта CSS 3.0 кардинально меняться не будет, и рекомендовал реализовать её всем браузерам уже сегодня.

    Для front-end разработчиков это означает появление стандарта, на который можно опираться. Теперь не надо бояться, что в будущем какой-либо браузер откажется от своего префиксного нестандартного свойства – ведь оно будет продублировано стандартным свойством и заменит его при необходимости.

    Устаревшие версии Internet Explorer, к которым скоро можно будет отнести даже 9 версию, не поддерживают transition, animation и transform ни в каком виде. Но их доля всё ещё превышает 10%.Для IE7-9 предлагается js-«заглушка», а эффекта плавного переключения между слайдами – ничего.

    Почему CSS, а не JS?Есть множество задач, которые можно решить при помощи CSS: интерактивные галереи, многоуровневые выпадающие меню, построение и анимация трёхмерных диаграмм… Зачем же использовать CSS, когда можно все сделать на JS, особенно учитывая массу готовых наработок? Основные аргументы могут быть такими:
    • В большинстве случаев, CSS эффекты работают быстрее, поскольку за их исполнением следят исключительно движки браузеров. Это особенно хорошо заметно на мобильных устройствах.
    • Для реализации задачи не требуется знание JS и вообще любых языков программирования. Правка же CSS, как правило, доступна даже рядовому пользователю. Причём «наломать дров» в CSS значительно сложнее, нежели в JS.
    РеализацияБЭМ Итак, для именования CSS классов использовалась методология Блок Элемент Модификатор (БЭМ). Суть в том, что вёрстка основана на компоновке страницы из независимых блоков. Согласно БЭМ у блока могут быть элементы, но только внутри блока.

    Классы слайдера:
    .slider /* Блок, содержащий ленту изображений */ .slider__radio /* Радиокнопка */ .slider__item /* Слайд */ .slider__img /* Картинка внутри слайда */ .slider__number-list /* Контейнер с кнопками переключения */ .slider__number /* Кнопка включения связанного с ней слайда */ .slider__number-after /* внедрён для поддержки IE7 и IE8, которые не поддерживают псевдоэлементы:after и::after соответственно */ .slider_count_X /* Модификатор, определяющий количество слайдов X */

    Анимация Анимационная последовательность по ключевым кадрам для трёх слайдов выглядит следующим образом:
    @keyframes slider__item-autoplay_count_3 { 0%{opacity:0;} 10%{opacity:1;} 33% {opacity:1;} 43% {opacity:0;} 100%{opacity:0;} }
    Особенность реализации слайдера в том, что всем слайдам и всем кнопкам присваивается одна и та же анимация:
    slider_count_3 .slider__item, slider_count_3 .slider__number-after { -moz-animation: slider__item-autoplay_count_3 15s infinite; -webkit-animation: slider__item-autoplay_count_3 15s infinite; -o-animation: slider__item-autoplay_count_3 15s infinite; animation: slider__item-autoplay_count_3 15s infinite; }
    Такой подход позволяет серьезно сократить объем кода, ведь все анимации пока ещё приходится дублировать их префиксными версиями (@-webkit-keyframes, @-moz-keyframes и @-o-keyframes), а каждую такую «стопку» правил надо отдельно описывать для каждого требуемого (заказчиком) числа слайдов. Если отдельно описывать анимацию ещё и для каждого слайда, то объем кода может составить десятки килобайт.

    Чтобы этого избежать, но последовательно анимировать все слайды и кнопки при помощи одной анимации, достаточно расставить смещение начала анимации во времени для каждой пары слайд + кнопка:
    .slider__item:nth-of-type(2), .slider__number:nth-of-type(2) > .slider__number-after { -moz-animation-delay:5s; -webkit-animation-delay:5s; -o-animation-delay:5s; animation-delay:5s; } .slider__item:nth-of-type(3), .slider__number:nth-of-type(3) > .slider__number-after { -moz-animation-delay:10s; -webkit-animation-delay:10s; -o-animation-delay:10s; animation-delay:10s; } ...
    Для первой пары остаётся значение по-умолчанию – нулевое смещение.

    Также важно, что смещение не зависит от количества слайдов, и может быть описано один раз для их максимального количества.

    В итоге плавный анимированный переход между слайдами выглядит так:


    Пауза при наведении курсора Для случая, когда пользователь хочет задержать слайд на экране, но не хочет отключать ротацию, можно использовать режим паузы по наведению курсора над слайдом:
    .slider:hover .slider__item, .slider:hover .slider__number-after { -moz-animation-play-state: paused; -webkit-animation-play-state: paused; -o-animation-play-state: paused; animation-play-state: paused; } Переключение по клику Есть целый ряд CSS «событий», переключающих состояние html элемента. Если говорить о клике мыши, то это появление псевдоклассов:focus, :target, или:checked у одного из элементов страницы. Псевдокласс:focus может быть не более чем у одного элемента на страницу единовременно; псевдокласс:target засоряет историю браузера и требует наличие тега «a»; псевдокласс:checked запоминает состояние до ухода со страницы, плюс, в случае радиокнопок, является дискретным переключателем, когда выбран может быть только один элемент конкретной группы – то, что нужно.
    .slider__radio {стили не выбранной радиокнопки} .slider__radio:checked {стили выбранной радиокнопки}

    В селекторах ниже уровня 4 переключить состояние произвольного элемента (например, opacity слайда) можно только в связке с радиокнопкой, при помощи селекторов соседей + и ~. Переключить можно как стили соседа, так и стили потомков соседа, но в любом случае сосед должен находиться после радиокнопки.
    /* Стиль первого слайда в состоянии «не выбран» */ .slider__radio:nth-of-type(1) ~ .slider__item:nth-of-type(1) { opacity: 0.0; } /* Стиль первого слайда в состоянии «выбран» */ .slider__radio:nth-of-type(1):checked ~ .slider__item:nth-of-type(1) { opacity: 1.0; }
    Было использовано переключение opacity слайда – контейнера, который содержит картинку. Это более универсальный способ, чем переключение свойств картинки, поскольку в div-контейнер, в отличие от пустого элемента img, можно поместить любую дополнительную информацию (например, название слайда, или связанное описание, включая ссылки).
    Для слайдов указаны свойства transition, которые позволяют сделать переключение между ними плавным.
    .slider__item { -moz-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear; transition: opacity 0.2s linear; }

    Остановка ротации при выборе слайда При выборе пользователем любого слайда необходимо остановить анимацию всех слайдов и кнопок. Это связано с тем, что приоритет значений свойств запущенной анимации всегда выше всех остальных значений тех же свойств (можно перебивать даже inline свойства с!important`ом).

    Поскольку анимация, пусть и одинаковая по структуре, есть у каждого слайда, а выключать надо анимацию всех слайдов (иначе в плавном переходе будут участвовать три слайда), все радиокнопки надо располагать до первого слайда.
    ... ...
    Более того, все кнопки (лейблы радиокнопок) надо группировать в отдельном блоке и помещать после радиокнопок, иначе могут возникнуть проблемы с универсальным позиционированием лейблов для произвольного числа слайдов.

    Остановка анимации всех слайдов и кнопок при выборе любого слайда задаётся следующим образом:
    .slider__radio:checked ~ .slider__item, .slider__radio:checked ~ .slider__number-list > .slider__number-after { opacity: 0.0; -moz-animation: none; -webkit-animation: none; -o-animation: none; animation: none; }

    Произвольное число слайдов Сделать универсальный слайдер под любое число слайдов невозможно, потому что под каждое число требуется своя «стопка» CSS-правил анимации. Каждую такую «стопку» (если она описана) можно подключать через модификатор блока slider:
    .slider_count_X
    где X – число слайдов.

    Для поддержки некоторых старых браузеров первый слайд не анимируется. По этой причине контейнер первой картинки имеет opacity всегда равный 1.0. Возникает проблема: при плавном переключении двух других слайдов между собой, первый просвечивает (это может быть и background родителя блока slider). Для удаления эффекта просвечивания устанавливается задержка transition-delay для всех слайдов, кроме выбранного; для выбранного же устанавливается z-index больше, чем у всех остальных:
    .slider__item { opacity: 1.0; position: relative; -moz-transition: opacity 0.0s linear 0.2s; -webkit-transition: opacity 0.0s linear 0.2s; -o-transition: opacity 0.0s linear 0.2s; transition: opacity 0.0s linear 0.2s; } .slider__radio:nth-of-type(1):checked ~ .slider__item:nth-of-type(1), .slider__radio:nth-of-type(2):checked ~ .slider__item:nth-of-type(2), .slider__radio:nth-of-type(3):checked ~ .slider__item:nth-of-type(3), .slider__radio:nth-of-type(4):checked ~ .slider__item:nth-of-type(4), .slider__radio:nth-of-type(5):checked ~ .slider__item:nth-of-type(5){ -moz-transition: opacity 0.2s linear; -webkit-transition: opacity 0.2s linear; -o-transition: opacity 0.2s linear; transition: opacity 0.2s linear; z-index: 6; }
    Чтобы слайды не конфликтовали с другими элементами сайта (например, не перекрывали выпадающее меню с z-index менее или равным 6), создаём свой контекст (stacking context) для блока путём задания минимально, необходимого для видимости, z-index`а:
    .slider { z-index: 0; }

    Итак Уже сегодня, без навыков программирования и специализированных библиотек, до своей окончательной стандартизации, CSS 3.0 позволяет реализовывать сложные и интересные задачи. Описанный интерактивный слайдер, на текущий момент, полностью работоспособно у 80% пользователей рунета. Для большей части оставшихся пользователей, а именно для пользователей браузеров IE7-9, можно использовать js-«заглушку», которая реализует основной функционал слайдера.

    Рабочий пример можно увидеть