• Как убрать закрытие вкладки аккордеона при нажатии на кнопку?

    mizutsune
    @mizutsune
    Frontend Developer
    Если немного подправить ваш скрипт, то можно сделать так:

    const accordions = document.querySelectorAll('.accordion');
    const accordionsButtons = document.querySelectorAll(".accordion__tittle")
    const accordionsDataboxes =  document.querySelectorAll(".accordion__content");
    
    accordions.forEach(n => {
         const currentButton = n.querySelector(".accordion__tittle");
         const currentDatabox = n.querySelector(".accordion__content");
    
         const toggleActiveElements = () => {
              accordionsButtons.forEach(v => {
                   if (v !== currentButton) {
                        v.classList.remove("open");
                   }
              });
    
              accordionsDataboxes.forEach(v => {
                   if (v !== currentDatabox) {
                        v.classList.remove("open");
                        v.style.setProperty("--height", "0px");
                   }
              });
    
              currentButton.classList.toggle("open");
              currentDatabox.classList.toggle("open");
    
              currentDatabox.classList.contains("open")
                   ? currentDatabox.style.setProperty("--height", `${currentDatabox.scrollHeight}px`)
                   : currentDatabox.style.setProperty("--height", "0px");
         };
    
         currentButton.addEventListener("click", toggleActiveElements);
    });


    И добавить строчку в CSS:

    .accordion__content.open {
        max-height: var(--height, 0);
      }
    Ответ написан
    1 комментарий
  • Почему не работает аккордеон?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Самое время подумать =)

    Наверное, потому, что класс вы переключаете как раз у .accordion :
    self.classList.toggle('open');

    Хотя вроде и получаете нужные элементы:
    const control = self.querySelector('.accordion__control');
    const content = self.querySelector('.accordion__content');


    Ну и стоит учесть, что стили у вас прописаны для .accordion__tittle.open, а получаете вы .accordion__control.

    Этих наводок достаточно, что бы самому найти решение проблемы?
    Ответ написан
    1 комментарий
  • Как работает наследственность стилей в этом случае?

    SPART4K
    @SPART4K
    Middle Front-end Developer (Vue.js/Nuxt.js)
    Можете использовать !important
    .class {
        color: red !important;
    }

    Или в другом случае подключать локальные стили ниже уровнем чем стили библиотеки
    То-есть в таком порядке
    1: Стили библиотеки
    2: Ваши стили в вашем файле
    Сначала применяются стили в первом подключении а далее следующий файлом они перезаписываются

    В целом использовать !important не очень хорошая практика, можно обращаться точнее по селектору, но иногда приходится
    https://codernet.ru/articles/web/kak_pereopredelit...
    Ответ написан
    1 комментарий
  • Как работает наследственность стилей в этом случае?

    mizutsune
    @mizutsune
    Frontend Developer
    Если это касается именно Swiper, то решается это дело без !important и других лишних действий. Достаточно указать для кнопок управления слайдером кастомные селекторы и назначить нужные стили:

    new Swiper('.swiper', {
      navigation: {
        nextEl: '.my-awesome-slider-button-next',
        prevEl: '.my-awesome-slider-button-prev',
      },
    });


    .my-awesome-slider-button-prev { /* ...styles */ };
    .my-awesome-slider-button-next { /* ...styles */ };
    Ответ написан
    1 комментарий