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