Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

112
Visualizações
Set dynamic height to the block with JS

Transition does not work with height: auto. So I need to calculate and set the block's dynamic height with JavaScript to make the transition property work. This is an example of my code:

<div class="accordion__item">
   <div class="accordion__icon">
      <div class="accordion__content">
      </div>
   </div>
</div>

const accItems = document.querySelectorAll('.accordion__item');

accItems.forEach((item) => {
  const icon = item.querySelector('.accordion__icon');
  const content = item.querySelector('.accordion__content');

    item.addEventListener("click", () => {
    if (item.classList.contains('open')) {

    item.classList.remove('open');
    icon.classList.remove('open');
    content.classList.remove('open');
    
    } else {
    const accOpen = document.querySelectorAll('.open');

    accOpen.forEach((open) => {
    open.classList.remove('open');
    });

    item.classList.add('open');
    icon.classList.add('open');
    content.classList.add('open');
    }
    });
});

How can I do this?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

It's not ideal but there is not much we can do with transitioning height.

For a workaround, give your open class a max-height property that is larger than your expect the largest open element to get. From there you can transition the max-height property.

There are also some optimizations you can make to your event listener callback. I don't believe you need to add open to all the elements in the accordion, just the item itself.

Try something like this:

const accItems = document.querySelectorAll('.accordion__item');

accItems.forEach((item) => {
    item.addEventListener("click", () => {
       const openItems = document.querySelectorAll(".open")
       openItems.forEach(open => open.classList.toggle("open"))
       item.classList.toggle("open")
    }
});

Then in your css:

.open {
  max-height: 200px
}

.accordion__item {
  max-height: 0;
  transition: max-height 200ms ease;
}
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda