Eu tenho uma pergunta sobre como obter uma altura div. Estou ciente .height()
e innerHeight()
, mas nenhum deles faz o trabalho para mim neste caso. O fato é que, neste caso, eu tenho uma div que está sobrecarregada, uma largura excedente: scroll e a div tem uma altura fixa.
Se eu uso .height()
ou innerHeight()
, os dois me dão a altura da área visível, mas se eu quero que o excesso seja levado em conta, como devo proceder?
.scrollHeight
função DOM não funcionará no IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )scrollHeight
às vezes também retorna zero quando está oculto (ou seu pai está oculto), irritantemente.overflow: hidden
: /document.getElementById('your_div').scrollHeight
Para obter mais informações sobre
.scrollHeight
propriedade, consulte os documentos :fonte
Outra possibilidade seria colocar o html em um não transbordamento: elemento oculto colocado 'fora' da tela, como uma posição absoluta superior e esquerda, depois 5000px, e depois ler a altura desses elementos. É feio, mas funciona bem.
fonte
Acabei de criar outra solução para isso, onde não é mais necessário usar um valor muito alto a muito alto. Ele precisa de algumas linhas de código javascript para calcular a altura interna do DIV recolhido, mas depois disso, é tudo CSS.
1) Buscando e ajustando a altura
Busque a altura interna do elemento recolhido (usando
scrollHeight
). Meu elemento tem uma classe.section__accordeon__content
e na verdade eu executo isso em umforEach()
loop para definir a altura de todos os painéis, mas você entendeu.2) Use a variável CSS para expandir o item ativo
Em seguida, use a variável CSS para definir o
max-height
valor quando o item tiver uma.active
classe.Exemplo final
Portanto, o exemplo completo é o seguinte: primeiro faça um loop em todos os painéis do acordeão e armazene seus
scrollHeight
valores como variáveis CSS. Em seguida, use a variável CSS como omax-height
valor no estado ativo / expandido / aberto do elemento.Javascript:
CSS:
E aí está. Uma animação de altura máxima adaptável usando apenas CSS e algumas linhas de código JavaScript (não é necessário jQuery).
Espero que isso ajude alguém no futuro (ou meu futuro eu para referência).
fonte
Para aqueles que não estão transbordando, mas escondidos por margem negativa:
(feio, mas apenas um que funciona até agora)
fonte
Outra solução simples (não muito elegante, mas também não muito feia) é colocar um interior
div / span
e obter sua altura ($(this).find('span).height()
).Aqui está um exemplo de uso desta estratégia:
(Este exemplo específico está usando este truque para animar a altura máxima e evitando o atraso da animação ao recolher (ao usar um número alto para a propriedade altura máxima).
fonte