Создать сайт, Создать сайт Воронеж, Moguta CMS, Wlad007 для Moguta CMS, Настройка и установка интернет-магазинов и лендингов на Moguta.CMS, Редактирование шаблонов и плагинов интернет-магазинов на Moguta
Вернуться к списку статей

Аккордеон на сайт на CSS

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

HTML
<div class="accordion">
	<ul>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Краткое описание (набор слов)</h2>
			<div class="msg">
				<p>Эта страница была написана на HTML и CSS. Я не использовал Normalize и CSS Reset, префиксы так же прописывал руками, была куча времени, да и объём не особо велик. Вы же, чтобы сэкономить время и нервы, вполне можете использовать все эти полезные инструменты. В последствии все эти знания вам обязательно пригодятся на масштабных проектах.
					<p>
						Ну, а всё что в демо можно легко реализовать в простом HTML и CSS, тем более что вся работа аккордеона построена без подключения javascript.
						<p>Вся работа аккордеона построена на использовании скрытых чекбоксов (checkbox) в связке с псевдоклассом <strong>checked</strong>.
						</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Миниатюра слева</h2>
			<div class="msg">
				<p><img src="https://placehold.it/250x200" class="img-left">Как видите в примере я использовал миниатюры изображений с возможностью расположения как с левого края так и с правого( увидите в третьей секции аккордеона).

					<p>Миниатюрам задан размер в 25% от базового размера изображений используемых в аккордноне, 100% от родительского контейнера, так что изображения будут легко подстраиваться под любые размеры базового блока.
						<p>Медиа-запросы использовал для создания гибкого реагирования элемента(аккордеон) на различные размеры экранов пользовательских устройств.
						</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Миниатюра справа</h2>
			<div class="msg">
				<p><img src="https://placehold.it/250x200" class="img-right">Чтобы отправить миниатюру вправо достаточно в тег img прописать <strong>class="img-right</strong>, если влево соответственно добпвляем <strong>class="img-left</strong>.
					<p>Размер миниатюр регулируется изменением процентных значений в css.Для этого достаточно найти нужный селектор, например <strong>.msg img.img-left</strong> и уже в свойстве <strong>width: 25%;</strong> экспериментировать с значениями</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Полноразмерная картинка</h2>
			<div class="msg">
				<p><img src="https://placehold.it/960x600" class="large-img">
					Встроенному изображению, размер которого 100% от родительского контейнера прописываем <strong>class="large-img"</strong>. Реальный размер картинки может быть большим чем секция аккордеона, но она легко впишется в блок аккордеона.
				</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Встроенное видео</h2>
			<div class="msg">
				<div class="video-responsive">
					<iframe width="1151" height="668" src="https://www.youtube.com/embed/7-JzoOlK2Jk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
				</div>
				<p>В аккордеоне вы можете использовать встроенное видео с популярных видео хостингов использующих <strong>iframe, object, embed</strong>. Видео полностью отзывчвы и идеально впишутся в любые размеры блоков аккордеона.</p>
			</div>
		</li>
	</ul>
</div><div class="accordion">
	<ul>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Краткое описание (набор слов)</h2>
			<div class="msg">
				<p>Эта страница была написана на HTML и CSS. Я не использовал Normalize и CSS Reset, префиксы так же прописывал руками, была куча времени, да и объём не особо велик. Вы же, чтобы сэкономить время и нервы, вполне можете использовать все эти полезные инструменты. В последствии все эти знания вам обязательно пригодятся на масштабных проектах.
					<p>
						Ну, а всё что в демо можно легко реализовать в простом HTML и CSS, тем более что вся работа аккордеона построена без подключения javascript.
						<p>Вся работа аккордеона построена на использовании скрытых чекбоксов (checkbox) в связке с псевдоклассом <strong>checked</strong>.
						</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Миниатюра слева</h2>
			<div class="msg">
				<p><img src="https://placehold.it/250x200" class="img-left">Как видите в примере я использовал миниатюры изображений с возможностью расположения как с левого края так и с правого( увидите в третьей секции аккордеона).

					<p>Миниатюрам задан размер в 25% от базового размера изображений используемых в аккордноне, 100% от родительского контейнера, так что изображения будут легко подстраиваться под любые размеры базового блока.
						<p>Медиа-запросы использовал для создания гибкого реагирования элемента(аккордеон) на различные размеры экранов пользовательских устройств.
						</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Миниатюра справа</h2>
			<div class="msg">
				<p><img src="https://placehold.it/250x200" class="img-right">Чтобы отправить миниатюру вправо достаточно в тег img прописать <strong>class="img-right</strong>, если влево соответственно добпвляем <strong>class="img-left</strong>.
					<p>Размер миниатюр регулируется изменением процентных значений в css.Для этого достаточно найти нужный селектор, например <strong>.msg img.img-left</strong> и уже в свойстве <strong>width: 25%;</strong> экспериментировать с значениями</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Полноразмерная картинка</h2>
			<div class="msg">
				<p><img src="https://placehold.it/960x600" class="large-img">
					Встроенному изображению, размер которого 100% от родительского контейнера прописываем <strong>class="large-img"</strong>. Реальный размер картинки может быть большим чем секция аккордеона, но она легко впишется в блок аккордеона.
				</p>
			</div>
		</li>
		<li>
			<input type="checkbox" checked>
			<i></i>
			<h2 class="title_block">Встроенное видео</h2>
			<div class="msg">
				<div class="video-responsive">
					<iframe width="1151" height="668" src="https://www.youtube.com/embed/7-JzoOlK2Jk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
				</div>
				<p>В аккордеоне вы можете использовать встроенное видео с популярных видео хостингов использующих <strong>iframe, object, embed</strong>. Видео полностью отзывчвы и идеально впишутся в любые размеры блоков аккордеона.</p>
			</div>
		</li>
	</ul>
</div>


CSS
/* 
* Формируем базовый контейнер аккордеона 
*/
.accordion {
	width: 100%;
	/*
ширина произвольная выбирается
*в зависимостиот места размещения 
*/
	max-width: 600px;
	min-height: 0;
	display: block;
	/* относительное позиционирование */
	position: relative;
	margin: 0 auto;
	padding: 0;
	background-color: #fefffa;
	overflow: hidden;
}
/* заголовки панелей аккордеона */
.accordion h2 {
	font-size: 16px;
	font-weight: 300;
	letter-spacing: 1px;
	display: block;
	margin: 0;
	padding: 10px 25px;
	cursor: pointer;
	color: #f4f4f4;
	background: #2d8bbb;
	border-top: 1px solid #3face4;
	border-bottom: 1px solid #2479a5;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}
/* заголовки панелей аккордеона при наведении
* в данном варианте не срабатывает
*/
/* .accordion h2:hover {
    display: block;
    background-color: #005049;
}
*/

/* Формируем блоки с содерханием */
.msg {
	position: relative;
	overflow: hidden;
	max-height: 800px;
	opacity: 1;
	transform: translate(0, 0);
}

/* оформляем параграфы */
.msg p {
	color: rgba(48, 69, 92, 0.8);
	font-size: 13px;
	line-height: 20px;
	letter-spacing: 1px;
	padding: 0 20px;
}

/* Позаботимся о небольших экранах */
@media (max-width: 550px) {
	.accordion {
		box-sizing: border-box;
		transform: translate(0, 0);
		max-width: 100%;
		min-height: 100%;
		margin: 0;
		left: 0;
	}
}

/* Формируем неупорядоченный список */
.accordion ul {
	list-style: none;
	perspective: 900;
	padding: 0;
	margin: 0;
}

/* Определяем и формируем отдельный элемент списка 
 * в который поместим скрытый флажек,
 * заголовок панелей и блок с содержанием
*/
.accordion ul li {
	position: relative;
	padding: 0;
	margin: 0;
}

/* устанавливаем время ожидания перед воспроизведением анимации 
 * на основе нумерации в дереве элементов
*/
.accordion ul li:nth-of-type(1) {
	animation-delay: 0.5s;
}
.accordion ul li:nth-of-type(2) {
	animation-delay: 0.75s;
}
.accordion ul li:nth-of-type(3) {
	animation-delay: 1s;
}
.accordion ul li:last-of-type {
	padding-bottom: 0;
}

/* Сформируем  указатель переключения состояния аккордеона */
.accordion ul li i {
	position: absolute;
	transform: translate(-6px, 0);
	margin-top: 16px;
	/* расположим указатель на панели заголовка справа */
	right: 25px;
}

/* "Рисуем " сам указатель */
.accordion ul li i:before,
.accordion ul li i:after {
	content: "";
	position: absolute;
	background-color: #eee;
	width: 3px;
	height: 9px;
}
/* Добавляем элемент трансформации указателя при переключении */
.accordion ul li i:before {
	transform: translate(-2px, 0) rotate(45deg);
}
.accordion ul li i:after {
	transform: translate(2px, 0) rotate(-45deg);
}

/* Делаем чекбокс скрытым*/
.accordion ul li input[type="checkbox"] {
	position: absolute;
	cursor: pointer;
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0;
	opacity: 0;
}
/* Когда у флажка установлен checked  
 * блок с содержанием скрыт
*/
.accordion ul li input[type="checkbox"]:checked ~ div.msg {
	margin-top: 0;
	max-height: 0;
	opacity: 0;
	transform: translate(0, 50%);
}
/* А указатель показывает вниз */
.accordion ul li input[type="checkbox"]:checked ~ i:before {
	transform: translate(2px, 0) rotate(45deg);
}
.accordion ul li input[type="checkbox"]:checked ~ i:after {
	transform: translate(-2px, 0) rotate(-45deg);
}
/*  Устанавливаем эффект перехода
 * между двумя состояниями указателя 
*/
div.msg,
ul li i:before,
ul li i:after {
	transition: all 0.5s ease-in-out;
}
/**
 * Изображения внутри аккордеона
 * ...сделаем их отзывчивыми
 */
.accordion .msg img {
	width: 100%;
	height: auto;
	-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),
		0 6px 20px 0 rgba(0, 0, 0, 0.19);
	-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),
		0 6px 20px 0 rgba(0, 0, 0, 0.19);
	box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}

/* полноразмерная картинка */
.msg img .large-img {
	width: 100%;
	margin-bottom: 10px;
}
/* миниатюра слева */
.msg img.img-left {
	width: 25%;
	float: left;
	margin: 5px 15px 5px 0;
}
/* миниатюра справа */
.msg img.img-right {
	width: 25%;
	float: right;
	margin: 5px 0 5px 15px;
}

/* Встраеваемое видео */
.video-responsive {
	margin: 20px;
	position: relative;
	padding-bottom: 56.25%;
	height: 0;
	overflow: hidden;
	-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),
		0 6px 20px 0 rgba(0, 0, 0, 0.19);
	-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2),
		0 6px 20px 0 rgba(0, 0, 0, 0.19);
	box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
/* Предусмотри использование кода встраиваемого видео
 *через iframe, object или embed */
.video-responsive iframe,
.video-responsive object,
.video-responsive embed {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}


В итоге получаем результат