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

Аккордеон на сайт на 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%; } 


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