Простой аккордеон на CSS3

Не так давно я писал о применении псевдо класса :target. В сегодняшнем уроке вы узнаете, как создать простой аккордеон, используя этот элемент CSS3.

Что такое аккордеон?
Если вы никогда не сталкивались с подобным элементом, то хочу сказать, что аккордеон - это прекрасное решение вопроса размещения контента на странице. Основная выгода – экономия места на странице.

HTML5
Для демонстрации примера я буду использовать лишь один новый HTML5 элемент, который называется section. Когда мы ориентируемся на старые браузеры, нам необходимо воспользоваться следующим трюком:

<script>document.createElement('section');</script>

А для Internet Explorer я использую следующую уловку:

<!--[if lt IE 9]>
  <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

Разметка
Давайте, наконец, закончим с теорией и приступим к практике:

<div class="accordion">
        <section id="one">
                <h2><a href="#one">Heading 1</a></h2>
                <div>
                        <p>content</p>
                </div>
        </section>
</div>

Секция accordion будет содержать всё содержимое аккордеона;
Каждый элемент section содержит заголовок и контент;
CSS
section
{
        display: block;
}
 
.accordion
{
        background-color: #eee;
        border: 1px solid #ccc;
        width: 600px;
        padding: 10px;
        margin: 50px auto;
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
        border-radius: 3px;
        -moz-box-shadow: 0 1px 0 #999;
        -webkit-box-shadow: 0 1px 0 #999;
        box-shadow: 0 1px 0 #999;
}
 
.accordion section
{
        border-bottom: 1px solid #ccc;
        margin: 5px;
        background-color: #fff;
        background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
        background-image: -webkit-linear-gradient(top, #fff, #eee);
        background-image:    -moz-linear-gradient(top, #fff, #eee);
        background-image:     -ms-linear-gradient(top, #fff, #eee);
        background-image:      -o-linear-gradient(top, #fff, #eee);
        background-image:         linear-gradient(top, #fff, #eee);
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        border-radius: 5px;
}
 
.accordion h2,
 .accordion p
{
        margin: 0;
}
 
.accordion p
{
        padding: 10px;
}
 
.accordion h2 a
{
        display: block;
        position: relative;
        font: 14px/1 'Trebuchet MS', 'Lucida Sans';
        padding: 10px;
        color: #333;
        text-decoration: none;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        border-radius: 5px;
}
 
.accordion h2 a:hover
{
        background: #fff;
}
 
.accordion h2 + div
{
        height: 0;
        overflow: hidden;
        -moz-transition: height 0.3s ease-in-out;
        -webkit-transition: height 0.3s ease-in-out;
        -o-transition: height 0.3s ease-in-out;
        transition: height 0.3s ease-in-out;
}
 
.accordion :target h2 a:after
{
    content: '';
        position: absolute;
        right: 10px;
        top: 50%;
        margin-top: -3px;
        border-top: 5px solid #333;
        border-left: 5px solid transparent;
        border-right: 5px solid transparent;
}
 
.accordion :target h2 + div
{
        height: 100px;
}


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

Для тех из вас, кого это не устраивает, приглашаю посетить вот эту страницу для того, чтобы познакомиться с точно таким же примером, только на jQuery.
Теги:
аккордеон, CSS3
Добавлено: 27 Апреля 2018 17:47:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...