J'ai une question sur la façon d'obtenir une hauteur div. Je suis au courant de .height()
et innerHeight()
, mais aucun d'entre eux ne fait le travail à ma place dans ce cas. Le truc, c'est que dans ce cas, j'ai un div qui déborde la largeur d'un débordement: scroll et le div a une hauteur fixe.
Si j'utilise .height()
ou innerHeight()
, les deux me donnent la hauteur de la zone visible, mais si je veux que le survol soit pris en compte, comment dois-je procéder?
.scrollHeight
fonction DOM ne fonctionnera pas dans IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )scrollHeight
renvoie aussi parfois zéro lorsqu'il est masqué (ou que son parent est masqué), ce qui est ennuyeux.overflow: hidden
: /document.getElementById('your_div').scrollHeight
Pour plus d'informations sur la
.scrollHeight
propriété, reportez-vous à la documentation :la source
Une autre possibilité serait de placer le html dans un non débordement: élément caché placé "hors" de l'écran, comme une position absolue en haut et à gauche lesse puis 5000px, puis lire cet élément en hauteur. C'est moche, mais ça marche bien.
la source
Je viens de concocter une autre solution pour cela, où il n'est plus nécessaire d'utiliser une valeur -much to high-max-height. Il faut quelques lignes de code javascript pour calculer la hauteur intérieure du DIV réduit, mais après cela, tout est en CSS.
1) Récupération et réglage de la hauteur
Récupère la hauteur intérieure de l'élément réduit (à l'aide de
scrollHeight
). Mon élément a une classe.section__accordeon__content
et je l'exécute en fait dans uneforEach()
boucle pour définir la hauteur de tous les panneaux, mais vous voyez l'idée.2) Utilisez la variable CSS pour développer l'élément actif
Ensuite, utilisez la variable CSS pour définir la
max-height
valeur lorsque l'élément a une.active
classe.Exemple final
Ainsi, l'exemple complet est le suivant: commencez par parcourir tous les panneaux d'accordéon et stockez leurs
scrollHeight
valeurs sous forme de variables CSS. Ensuite, utilisez la variable CSS commemax-height
valeur sur l'état actif / développé / ouvert de l'élément.Javascript:
CSS:
Et voila. Une animation adaptative de hauteur maximale utilisant uniquement CSS et quelques lignes de code JavaScript (aucun jQuery requis).
J'espère que cela aidera quelqu'un dans le futur (ou mon futur moi pour référence).
la source
Pour ceux qui ne débordent pas mais se cachent par marge négative:
(moche mais un seul qui fonctionne jusqu'à présent)
la source
Une autre solution simple (pas très élégante, mais pas trop moche aussi) est de placer un intérieur
div / span
puis de prendre sa hauteur ($(this).find('span).height()
).Voici un exemple d'utilisation de cette stratégie:
(Cet exemple spécifique utilise cette astuce pour animer la hauteur max et éviter le retard d'animation lors de la réduction (lors de l'utilisation d'un nombre élevé pour la propriété max-height).
la source