Преобразуем аккордеон на jQuery в аккордеон на CSS3

Приходилось ли вам использовать аккордеон в своем проекте? Обычно, для таких задач используется какой-нибудь плагин jQuery или вариант на чистом JavaScript. Назначение аккордеона - демонстрация изображений или списка свойств и особенностей продукта. В таком случае можно легко обойтись только возможностями CSS3? которые позволят обрабатывать событие OnClick и построить анимацию для смены слайдов.

demosourse

 

Версия jQuery

Первая демонстрация нашего урока содержит аккордеон, построенный на плагине jQuery liteAccordion:

<!DOCTYPE HTML>
<html lang="ru">
    <head>
        <meta charset="utf-8" />
        <title>Преобразуем аккордеон jQuery в аккордеон CSS3 | Материалы сайта RUSELLER.COM</title>

        <!-- Файлы CSS -->
        <link href="css/layout.css" rel="stylesheet" />
        <link href="css/liteaccordion.css" rel="stylesheet" />

        <!-- jQuery -->        
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

        <!-- jQuery easing -->
        <script src="js/jquery.easing.1.3.js"></script>

        <!-- Бибилиотека liteAccordion для jQuery -->
        <script src="js/liteaccordion.jquery.js"></script>

        <script>
            $(document).ready(function(){
                $('#js_version').liteAccordion({
                    theme : 'dark',
                    rounded : true,
                    enumerateSlides : true,
                    firstSlide : 1,
                    linkable : true,
                    easing: 'easeInOutSine'
                });
            });
        </script>
    </head>
    <body>
        <header>
            <h2>Преобразуем аккордеон jQuery в аккордеон CSS3</h2>
        </header>

        <h1>Аккордеон jQuery (с использованием liteAccordion)</h1>
        <div id="js_version" class="accordion">
            <ol>
                <li data-slide-name="slide1">
                    <h2><span>Слайд Один</span></h2>
                    <div>
                        <img src="images/1.jpg" alt="Slide One" />
                    </div>
                </li>
                <li data-slide-name="slide2">
                    <h2><span>Слайд Два</span></h2>
                    <div>
                        <img src="images/2.jpg" alt="Slide Two" />
                    </div>
                </li>
                <li data-slide-name="slide3">
                    <h2><span>Слайд Три</span></h2>
                    <div>
                        <img src="images/3.jpg" alt="Slide Three" />
                    </div>
                </li>
                <li data-slide-name="slide4">
                    <h2><span>Слайд Четыре</span></h2>
                    <div>
                        <img src="images/4.jpg" width="768" alt="Slide Four" />
                    </div>
                </li>
                <li data-slide-name="slide5">
                    <h2><span>Слайд Пять</span></h2>
                    <div>
                        <img src="images/5.jpg" alt="Slide Five" />
                    </div>
                </li>
            </ol>
            <noscript>
                <p>Для работы приложения требуется JavaScript</p>
            </noscript>
        </div>
        <a href="index2.html#slide1"><h2>Версия аккордеона на CSS3</h2></a>

    </body>
</html>

В заголовке добавляются все необходимые библиотеки и стили (jQuery, jquery.easing и liteAccordion), а также инициализация плагина. А в теле документа представлена структура аккордеона (упорядоченный список) со слайдами. Типовая структура для аккордеонов. 

 

Аккордеон на CSS3

Теперь построим аккордеон на CSS3. Для начала удалим весь код JavaScript и файл стилей liteaccordion.css. Подготовим собственные стили для нашего проекта. Также добавим ссылки в заголовки слайдов, чтобы получить возможность переключать слайды. в результате изменений структура документа станет следующей:

<!DOCTYPE HTML>
<html lang="ru">
    <head>
        <meta charset="utf-8" />
        <title>Преобразуем аккордеон jQuery в аккордеон на CSS3 | Материалы сайта RUSELLER.COM</title>

        <!-- Файлы CSS -->
        <link href="css/layout.css" rel="stylesheet" />
        <link href="css/main.css" rel="stylesheet" />
    </head>
    <body>
        <header>
            <h2>Преобразуем аккордеон jQuery в аккордеон на CSS3</h2>
        </header>

        <h1>Версия на CSS3</h1>
        <div class="accordion css3accordion">
            <span id="slide1"></span>
            <span id="slide2"></span>
            <span id="slide3"></span>
            <span id="slide4"></span>
            <span id="slide5"></span>
            <ol>
                <li class="slide1">
                    <a href="#slide1"><h2><span>Слайд Один</span></h2></a>
                    <div>
                        <img src="images/1.jpg" alt="Слайд Один" />
                    </div>
                </li>
                <li class="slide2">
                    <a href="#slide2"><h2><span>Слайд Два</span></h2></a>
                    <div>
                        <img src="images/2.jpg" alt="Слайд Два" />
                    </div>
                </li>
                <li class="slide3">
                    <a href="#slide3"><h2><span>Слайд Три</span></h2></a>
                    <div>
                        <img src="images/3.jpg" alt="Слайд Три" />
                    </div>
                </li>
                <li class="slide4">
                    <a href="#slide4"><h2><span>Слайд Четыре</span></h2></a>
                    <div>
                        <img src="images/4.jpg" alt="Слайд Четыре" />
                    </div>
                </li>
                <li class="slide5">
                    <a href="#slide5"><h2><span>Слайд Пять</span></h2></a>
                    <div>
                        <img src="images/5.jpg" alt="Слайд Пять" />
                    </div>
                </li>
            </ol>
        </div>
        <a href="index3.html"><h2>Версия аккордеона на CSS3 с автоматическим проигрыванием</h2></a>

    </body>
</html>

Также добавим несколько элементов span. По умолчанию они будут скрыты, но мы будем использовать их для обработки события Onclick. Теперь создадим стили для аккордеона CSS3 - сначала для внешнего контейнера и внутренних элементов span:

/* Аккордеон CSS3 */
.css3accordion {
    border: 9px solid #353535; 
    border-radius: 6px;
    padding: 5px 5px 6px 0; 
    background: #030303; 
    height: 320px;
    width: 960px;

    /* Тени CSS3 */
    -webkit-box-shadow: 0 -1px 0 #555 inset, 0 5px 15px rgba(0, 0, 0, 0.5); 
    -moz-box-shadow: 0 -1px 0 #555 inset, 0 5px 15px rgba(0, 0, 0, 0.5); 
    -ms-box-shadow: 0 -1px 0 #555 inset, 0 5px 15px rgba(0, 0, 0, 0.5);
    -o-box-shadow: 0 -1px 0 #555 inset, 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 -1px 0 #555 inset, 0 5px 15px rgba(0, 0, 0, 0.5);
}

/* Скрываем первый уровень */
.css3accordion > span {
    display: none
}

И затем определяем стили для остальных элементов:

/* Основные стили и слайды аккордеона */
.css3accordion ol {
    height: 100%;
    list-style: none;
    overflow: hidden;
    position: relative;
}
.css3accordion li {
    float: left;
    height: 100%;
    overflow: hidden;
    position: relative;
    width: 48px;

    /* Переходы CSS3 для слайдов */
    -webkit-transition: all 0.9s ease-in-out;
    -moz-transition: all 0.9s ease-in-out;
    -ms-transition: all 0.9s ease-in-out;
    -o-transition: all 0.9s ease-in-out;
    transition: all 0.9s ease-in-out;
}

.css3accordion li a {
    display: block;
    float: left;
    height: 320px;
    position: relative;
    width: 48px;
}

/* Заголовки слайдов */
.css3accordion  h2 {
    font-size: 16px;
    font-weight: normal;
    height: 48px;
    left: 0;
    line-height: 265%;
    margin: 0;
    position: absolute;
    top: 0;
    width: 320px;
    z-index: 1;

    -webkit-backface-visibility: hidden;
    -webkit-transform: translateX(-100%) rotate(-90deg); 
    -webkit-transform-origin: right top; 
    -moz-transform: translateX(-100%) rotate(-90deg);
    -moz-transform-origin: right top; 
    -ms-transform: translateX(-100%) rotate(-90deg);
    -ms-transform-origin: right top; 
    -o-transform: translateX(-100%) rotate(-90deg); 
    -o-transform-origin: right top; 
    transform: translateX(-100%) rotate(-90deg); 
    transform-origin: right top; 
}
.css3accordion h2 span { 
    background-color: #353535;
    border-radius: 4px;
    color: #fff;
    display: block;
    margin-top: 5px;
    padding-right: 10%;
    text-align: right;

    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
    user-select: none; 
}
.css3accordion h2 span:hover { 
    background-color: #353535;
    background: -webkit-gradient(linear, left top, right top, color-stop(0%,#353535), color-stop(100%,#555555));
    background: -webkit-linear-gradient(left,  #353535 0%,#555555 100%);
    background: -moz-linear-gradient(left,  #353535 0%, #555555 100%);
    background: -ms-linear-gradient(left,  #353535 0%,#555555 100%);
    background: -o-linear-gradient(left,  #353535 0%,#555555 100%);
    background: linear-gradient(left,  #353535 0%,#555555 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#353535', endColorstr='#555555',GradientType=1 );
}

/* Внутреннее содержание слайда */
.css3accordion li div {
    margin-left: 5px;
    padding-left: 48px;
}

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

/* Объект-счетчика */
.css3accordion h2 span:after { 
    color: #080808;
    font-weight: bold;
    left: 10%;
    position: absolute;
    text-shadow: -1px 1px 0 #555555;
    top: 10%;

    /* Вращение CSS3 для счетчика */
    -webkit-transform: rotate(90deg); 
    -moz-transform: rotate(90deg); 
    -ms-transform: rotate(90deg); 
    -o-transform: rotate(90deg); 
    transform: rotate(90deg);
}
/* Значения счетчика */
li.slide1  h2 span:after {
    content: "1";
}
li.slide2  h2 span:after {
    content: "2";
}
li.slide3  h2 span:after {
    content: "3";
}
li.slide4  h2 span:after {
    content: "4";
}
li.slide5  h2 span:after {
    content: "5";
}

И в завершении  реализуем обработку события Onclick:

/* Действия по нажатию кнопки мыши */
#slide1:target ~ ol li.slide1,
#slide2:target ~ ol li.slide2,
#slide3:target ~ ol li.slide3,
#slide4:target ~ ol li.slide4,
#slide5:target ~ ol li.slide5 {
    width: 768px;
}
#slide1:target ~ ol li.slide1 span,
#slide2:target ~ ol li.slide2 span,
#slide3:target ~ ol li.slide3 span,
#slide4:target ~ ol li.slide4 span,
#slide5:target ~ ol li.slide5 span { 
    background: #353535;
    background: -webkit-gradient(linear, left top, right top, color-stop(0%,#353535), color-stop(100%,#555555));
    background: -webkit-linear-gradient(left,  #353535 0%,#555555 100%);
    background: -moz-linear-gradient(left,  #353535 0%, #555555 100%);
    background: -ms-linear-gradient(left,  #353535 0%,#555555 100%);
    background: -o-linear-gradient(left,  #353535 0%,#555555 100%);
    background: linear-gradient(left,  #353535 0%,#555555 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#353535', endColorstr='#555555',GradientType=1 );
}

 

Автоматическое проигрывание

Для реализации автоматического проигрывания отключим обработку события Onclick и изменим анимацию:

/* Автоматическая анимация */
.css3accordion li {
    -webkit-animation-name: anim_slides;
    -webkit-animation-duration: 25.0s;
    -webkit-animation-timing-function: ease-in-out;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: normal;
    -webkit-animation-delay: 0;
    -webkit-animation-play-state: running;
    -webkit-animation-fill-mode: forwards;

    -moz-animation-name: anim_slides;
    -moz-animation-duration: 25.0s;
    -moz-animation-timing-function: ease-in-out;
    -moz-animation-iteration-count: infinite;
    -moz-animation-direction: normal;
    -moz-animation-delay: 0;
    -moz-animation-play-state: running;
    -moz-animation-fill-mode: forwards;
}

.css3accordion li:nth-child(2) {
    -webkit-animation-delay: 5.0s;
    -moz-animation-delay: 5.0s;
}
.css3accordion li:nth-child(3) {
    -webkit-animation-delay: 10.0s;
    -moz-animation-delay: 10.0s;
}
.css3accordion li:nth-child(4) {
    -webkit-animation-delay: 15.0s;
    -moz-animation-delay: 15.0s;
}

.css3accordion li:nth-child(5) {
    -webkit-animation-delay: 20.0s;
    -moz-animation-delay: 20.0s;
}

@-webkit-keyframes anim_slides {
    0% {
        width: 48px;
    }
    20% {
        width: 768px;
    }
    40% {
        width: 48px;
    }
    100% {
        width: 48px;
    }
}
@-moz-keyframes anim_slides {
    0% {
        width: 48px;
    }
    20% {
        width: 768px;
    }
    40% {
        width: 48px;
    }
    100% {
        width: 48px;
    }
}

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.script-tutorials.com/turn-jquery-accordion-into-css3-accordion/
Перевел: Сергей Фастунов
Урок создан: 24 Сентября 2012
Просмотров: 23291
Правила перепечатки


5 последних уроков рубрики "CSS"

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 29 Сентября 2012 16:02
    Димка_
    jQuery кроссбраузерней будет... Зачем прыгать через голову?
    • 29 Сентября 2012 22:55
      hercules
      Согласен, иностранцы ерундой маются...
  • 30 Сентября 2012 11:23
    DarkLifes
    В Опере как всегда не работает и в Explorer тоже на 50 % работоспособность !
    • 1 Октября 2012 16:09
      rubyx
      у меня работает 100% на том и другом:) попробуй обновить их.
  • 30 Сентября 2012 11:44
    ppaull
    Еще один "урок" - бессмысленный и беспощадный!
  • 31 Октября 2012 20:15
    nthanter
    а можно её разместить на единственный файл, к примеру на индек хтмл для стартовой стр..?
  • 22 Мая 2013 23:17
    YuliyaDmytryk
    Огромное спасибо за этот аккордеон на CSS!!! Такой же на jQuery в IE работает не корректно (отображается только последний слайд).
^ Наверх ^