Задавайте вопросы по курсам WordPress

Спойлер css3 без jquery

Сегодня я начинаю выкладывать примеры работы с css3, которые могут пригодиться при его изучении. Недавно рыская в Интернет я наткнулся на вот такой нехитрый пример спойлера созданного на css3 и решил поделиться им с вами.

Пример работы смотрите тут.

Создаем структуру для будущего спойлера

<div class="ac-container">
    <div>
        
        <input id="ac-1" name="accordion-1" type="checkbox" />
        <section class="ac-small">
            <p>Мне очень нравиться учиться с сайтом wp-admin.com.ua, он научил меня делать такие классные спойлеры  </p>
        </section>
        <label for="ac-1">Первая вкладка спойлера</label>
        
    </div>    

<div>    
        <input id="ac-2" name="accordion-2" type="checkbox" />
        <section class="ac-small">
            <p>Вы нажали на вкладку... </p>
        </section>
        <label for="ac-2">Вторая вкладка спойлера</label>
</div>
</div>

Вот структура и готова, дальше думаю, будет правильно создать и подключить стили для нашего спойлера. Как я и говорил, наши вкладки, буду работать на чистом css3 и без всяких скриптов.

Стили для спойлера

.ac-container{
    width: 400px;
    margin: 10px auto 30px auto;
    text-align: left;
}
.ac-container label{
    font-family: 'BebasNeueRegular', 'Arial Narrow', Arial, sans-serif;
    padding: 5px 20px;
    position: relative;
    z-index: 20;
    display: block;
    height: 30px;
    cursor: pointer;
    color: #777;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
    line-height: 33px;
    font-size: 19px;
    background: #ffffff;
    background: -moz-linear-gradient(top, #ffffff 1%, #eaeaea 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ffffff), color-stop(100%,#eaeaea));
    background: -webkit-linear-gradient(top, #ffffff 1%,#eaeaea 100%);
    background: -o-linear-gradient(top, #ffffff 1%,#eaeaea 100%);
    background: -ms-linear-gradient(top, #ffffff 1%,#eaeaea 100%);
    background: linear-gradient(top, #ffffff 1%,#eaeaea 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eaeaea',GradientType=0 );
    box-shadow: 
        0px 0px 0px 1px rgba(155,155,155,0.3), 
        1px 0px 0px 0px rgba(255,255,255,0.9) inset, 
        0px 2px 2px rgba(0,0,0,0.1);
}
.ac-container label:hover{
    background: #fff;
}
.ac-container input:checked + label,
.ac-container input:checked + label:hover{
    background: #c6e1ec;
    color: #3d7489;
    text-shadow: 0px 1px 1px rgba(255,255,255, 0.6);
    box-shadow: 
        0px 0px 0px 1px rgba(155,155,155,0.3), 
        0px 2px 2px rgba(0,0,0,0.1);
}

.ac-container input{
    display: none;
}
.ac-container section{
    background: rgba(255, 255, 255, 0.5);
    margin-top: -1px;
    overflow: hidden;
    max-height: 0px;
    position: relative;
    z-index: 10;
    -webkit-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -moz-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -o-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -ms-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
}
.ac-container section p{
    font-style: italic;
    color: #777;
    line-height: 23px;
    font-size: 14px;
    padding: 20px;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
}
.ac-container input:checked ~ section{
    -webkit-transition: max-height 0.5s ease-in-out, box-shadow 0.1s linear;
    -moz-transition: max-height 0.5s ease-in-out, box-shadow 0.1s linear;
    -o-transition: max-height 0.5s ease-in-out, box-shadow 0.1s linear;
    -ms-transition: max-height 0.5s ease-in-out, box-shadow 0.1s linear;
    transition: max-height 0.5s ease-in-out, box-shadow 0.1s linear;
    box-shadow: 0px 0px 0px 1px rgba(155,155,155,0.3);
}
.ac-container input:checked ~ section.ac-small{
    max-height: 500px; /*auto*/
}

Чтобы понять, как все работает, надо сначала понять, что делает атрибут for в теге <label>. Атрибут for указывает отношение метки Label к нужному чекбоксу. Эта особенность позволяет писать тег label отдельно от input, а при щелчке на label будет происходить имитация щелчка по самому чекбоксу.

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

Стиль закрывающий все спойлеры при загрузке

.ac-container section{
    background: rgba(255, 255, 255, 0.5);
    margin-top: -1px;
    overflow: hidden;
    max-height: 0px;
    position: relative;
    z-index: 10;
    -webkit-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -moz-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -o-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    -ms-transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
    transition: max-height 0.3s ease-in-out, box-shadow 0.6s linear;
}

Стиль позволяющий открыть спойлер, чекбокс которого в состоянии checked

.ac-container input:checked ~ section.ac-small{
    max-height: 500px; /*auto*/
}

Пример сам по себе интересный, в ближайшем будущем когда все браузер будут хорошо работать с CSS3 его можно будет использовать и тем самым ускорять работу вашего сайта. Пока я протестировал в браузерах FF, Opera, IE, Chrome, Safari, Yandex и пример показал себя вполне сносно, не считая маленьких нюансов, думаю использовать начинать уже можно.

Мы с вами рассмотрели основные моменты работы, касающиеся этого примера. Если есть вопросы или поправки, пишите в комментариях, благодарности тоже принимаются. По вопросам CSS и HTML могу посоветовать почитать сайт htmlbook.ru, мне он служит отличным справочником.

Просмотреть работу спойлера можно на сайте jsfiddle.net. На этом мой урок по css3 подошел к концу, предлагайте новые скрипты на обзор.


Купить хостинг WordPress
/* Репетитор по wordpress
Услуги репетитора онлайн. Список курсов которые я веду
  • Базовый курс по веб-дизайну;
  • Верстка сайтов;
  • Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
  • Разработка сайтов на PHP.
Подробнее читайте на странице репетитор по WordPress
*/

Николаенко Максим

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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Шаблоны для WordPress
Самый лучший хостинг в Украине
Стабильный хостинг для Drupal