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

20 апреля 2015 Антон Кулешов 1933 0

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

Реклама

Начнем, как всегда, 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 закончено.

Реклама
Комментариев еще не оставлено
no_avatar
Читайте далее

Социальные кнопки поделиться – пишем сами! Часть 2. Добавляем счетчик

10 июня 2015 Антон Кулешов

Ой, вы, гой еси, дорогие мои читатели! Совсем недавно, каких-то там шесть постов назад, я поднял тему социальных кнопок и очень рад, что статья пришлась вам по душе, и вы используете эти самые кнопки и делитесь материалами с моего сайта. Как я и обещал, продолжаем развивать тему и сегодня прикрутим к нашим кнопкам еще и счетчик, вещь, согласитесь, весьма необходимую и существенную, дабы поднять нашу самооценку до известного уровня и при случае заткнуть за пояс конкурентов, предъявив свои солидные «пузомерки».

Делаем подгрузку контента при прокрутке страницы

16 ноября 2014 Антон Кулешов

В настоящее время на многих сайтах можно увидеть динамически подгружаемый контент при прокрутке страницы. Этот эффект стал одной из хороших альтернатив обычной постраничной навигации. Хотя и у него есть свои недостатки, но удобство этого способа их компенсирует. Из этой статьи вы узнаете, как реализовать такой функционал у себя в проекте используя jQuery плагин jScroll.

Разбираемся, как сделать бегущую строку на сайте

21 января 2015 Антон Кулешов

Если у вас бурно развивающийся блог или информационный сайт, и новые посты появляются довольно часто, то пользователю необходимо как-то сообщать о наиболее важных и «горячих» новостях. Использовать модные ныне слайдеры не совсем для этого удобно, поэтому сегодня мы поговорим о том, как сделать бегущую строку на сайте. Для этого мы используем очень простой плагин на jQuery.