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%;
}
В итоге получаем результат