Сегодня мы научимся, как создать довольно простой анимированные аккордеон с помощью класса CSS3 :target.

Что такое аккордеон

Если вы разрабатываете с юзабилити, то аккордеон может быть очень полезен, особенно при организации содержания. Основное преимущество заключается в упаковке контента и економии пространства.

HTML5

Будем использовать новый HTML5 элемент section При использовании новых элементов HTML5, как этот, для старых браузеров, вам необходимо использовать следующий трюк:

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

Для простоты здесь я просто использовал де-факто скрипт для включения HTML5 элементов в Internet Explorer, так называемый html5shiv.

<!--[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>
  • Каждая секция содержит название и конечно, его содержание.

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.

Другие способы установки