Не так давно я писал о применении псевдо класса :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.