Показать Меню
falbar Аккордеон меню

Аккордеон меню на CSS

Аккордеон меню

Аккордеон меню – лучший вариант решения вертикального меню для сайта, он идеально подойдет для страниц с обширной навигацией. Главное достоинство аккордеон меню в том, что оно очень компактно, при условии того, что внутренних вкладок может быть очень много. С точки зрения пользователя, вертикальное меню намного удобнее горизонтального, т.к. физиологически человеческая кисть устроена так, что нам проще проводить мышью вертикальные, а не горизонтальные линии. Используя аккордеон меню, мы заботимся и о наших пользователях, и украшаем наш сайт динамическими эффектами, делая его ярче и привлекательнее.

Начнем, как всегда, c HTML структуры. Сразу отмечу, решение нестандартное и для его реализации мы будем использовать элементы HTML5 и некоторые свойства CSS3, что самое необычное, стилизованные чекбоксы. Чекбоксы нам необходимы для того, чтобы отследить при помощи псевдо-класса :checked пункт, который выбрал пользователь.

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

HTML структура:

<div class="conntainer">
	<section class="acc-conntainer">
		<!-- 1 пункт -->
		<div>
			<input id="acc-1" name="accordion-1" type="checkbox" />
			<label for="acc-1">Название первого пункта</label>
			<article class="acc-small">
				Контент первого пункта
			</article>
		</div>
		<!-- 2 пункт -->
		<div>
			<input id="acc-2" name="accordion-1" type="checkbox" />
			<label for="acc-2">Название второго пункта</label>
			<article class="acc-medium">
				Контент второго пункта
			</article>
		</div>
	</section>
</div>

Назначаем стили для нашего аккордеона:

.acc-conntainer{
	width: 400px;
	margin: 50px auto 30px;
	text-align: left;
}
.acc-conntainer label{
	font-family: 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);
}

Подсвечиваем вкладку, на которую пользователь навел курсор:

.acc-conntainer label:hover{
	background-color: #fff;
}

Изменяем стили вкладки открытого блока:

.acc-conntainer input:checked + label,
.acc-conntainer input:checked + label:hover{
	background-color: #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);
}

Отрисовываем стрелочку при наведении на закрытую вкладку:

.acc-conntainer label:hover:after,
.acc-conntainer input:checked + label:hover:after{
	content: '';
	background: transparent url(../img/arrow_down.png) no-repeat center center;
	position: absolute;
	right: 13px;
	top: 7px;
	width: 24px;
	height: 24px;
}

Отрисовываем стрелочку при наведении на открытую вкладку:

.acc-conntainer input:checked + label:hover:after{
	background-image: url(../img/arrow_up.png);
}

Прячем input по которому мы отслеживает выбор пользователя:

.acc-conntainer input{
	display: none;
}

Задаем стили раскрывающегося блока:

.acc-conntainer article{
	background-color: rgba(255, 255, 255, 0.5);
	margin-top: -1px;
	overflow: hidden;
	height: 0px;
	position: relative;
	z-index: 10;
	transition: height 0.3s ease-in-out, box-shadow 0.6s linear; /* Добавляем свойство с префиксами */
}
.acc-conntainer article 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);
}

Создаем плавную механику открытия скрытых блоков:

.acc-conntainer input:checked ~ article{
	transition: height 0.5s ease-in-out, box-shadow 0.1s linear; /* Учитываем более старые браузеры, не забываем про префиксы */
	box-shadow: 0px 0px 0px 1px rgba(155,155,155,0.3);
}

Значение высоты открывающегося блока прячем в несколько классов, во избежание ошибок построения блоков. Приходится задавать фиксированную высоту потому, как для данного аккордеона мы не используем JavaScript и ограничены только возможностями CSS:

.acc-conntainer input:checked ~ article.acc-small{
	height: 140px;
}
.acc-conntainer input:checked ~ article.acc-medium{
	height: 180px;
}
.acc-conntainer input:checked ~ article.acc-large{
	height: 230px;
}

На этом реализация меню в виде аккордеона на CSS закончено.

Источник
tympanus.net

Подписаться на обновления

Комментариев еще не оставлено