БлогNot. Баян-меню

Баян-меню

Это такой аккордеон, точней, аккордеон-меню, вот прямо в работе (кликаем по "клавишам" с подписями, сработало, по меньшей мере, в текущем Firefox и IE11):

Хоронили тёщу...

Порвали три баяна...

Смеялась даже обезьяна

Что такое Юриюрич?
  • Коммуняка
  • Волчара
  • Античитер
  • Запутинка
Lorem ipsum?

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Рыба, рыба!

В раскрывающихся блоках может быть любая разметка и даже скрипты (клик по элементам списка на второй клавише).

Написать такое несложно, немного стилей + разметки + яваскрипта, ниже прилагается полный валидный листинг документа HTML5, предполагается, что он будет сохранён в кодировке Юникода utf-8.

В моём случае в разделе с id="bayan" располагаем пары разделов с class="bayan_hdr" и class="tabs_text"

<!DOCTYPE html>
<html lang="ru">
<head>
 <title>Баян (аккордеон-меню)</title>
 <meta charset="utf-8">
 <style>
  #bayan {
   margin: 10px 10%;
  }
  #bayan > .bayan_hdr {
   color: blue;
   cursor: pointer;
   margin: 5px 0;
   padding: .5em .5em .5em .5em;
   border-radius: 5px;
   border: 1px dotted #ccc;
   background: #eee;
   color: #333;
  }
  #bayan > .bayan_hdr.bayan_selected {
   border: 1px dotted #06f;
   background: #08f;
   color: #fff;
  }
  #bayan > .tabs_text {
   height: 0;
   overflow: hidden;
   color: #333;
   padding: 0 15px;
   transition: height .66s;
  }
  .tabs_text {
   font: 12px sans-serif;
   text-align: justify;
  }
 </style>
</head>
<body>	

 <div id="bayan">
  <div class="bayan_hdr">Хоронили тёщу...</div>
   <div class="tabs_text" id="tabs-1">
    <p>Порвали три баяна...</p>
    <p>Смеялась даже обезьяна</p>
   </div>
   <div class="bayan_hdr">Что такое Юриюрич?</div>
   <div class="tabs_text" id="tabs-2">
     <ul>
      <li onclick="alert('Да-да');">Коммуняка</li>
      <li onclick="alert('Нет-да');">Волчара</li>
      <li onclick="alert('Да-нет');">Античитер</li>
      <li onclick="alert('Да-да-нет-да');">Запутинка</li>
     </ul>
   </div>
   <div class="bayan_hdr">Lorem ipsum?</div>
   <div class="tabs_text" id="tabs-3">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 
    nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat 
    nulla pariatur. Excepteur sint occaecat cupidatat non proident, 
    sunt in culpa qui officia deserunt mollit anim id est laborum. 
    <a href="https://ru.wikipedia.org/wiki/Lorem_ipsum" target="_blank">Рыба, рыба!</a></p>
   </div>
 </div>
 <script>
  var bayan = document.getElementById('bayan');
  bayan.addEventListener('click', change);

  function change(event) {
   var targetEl = event.target;
   if (targetEl.className !== 'bayan_hdr') return; 
   hideAll();
   if (!targetEl.classList.contains('bayan_selected')) {
    targetEl.classList.add ('bayan_selected');
    showText (targetEl.nextElementSibling);
   }
  }
  function hideAll() {
   var bayan_hdrEl = bayan.querySelectorAll('.bayan_hdr');
   var divEl = bayan.querySelectorAll('.tabs_text');
   for (var i = 0; i < bayan_hdrEl.length; i++) 
    bayan_hdrEl[i].classList.remove('bayan_selected');
   for (var i = 0; i < divEl.length; i++) 
    divEl[i].style.height = '0';
  }
  function showText(textEl) {
   textEl.style.height = textEl.scrollHeight + 'px';
  }
 </script>

</body>
</html>

Горизонтальные вкладки есть в этой заметке.


теги: javascript css html вебдезигн

30.10.2019, 21:21; рейтинг: 57