Comment obtenez-vous la hauteur rendue d'un élément?
Disons que vous avez un <div>
élément avec du contenu à l'intérieur. Ce contenu à l'intérieur va étirer la hauteur du <div>
. Comment obtenir la hauteur "rendue" lorsque vous n'avez pas explicitement défini la hauteur. Évidemment, j'ai essayé:
var h = document.getElementById('someDiv').style.height;
Y a-t-il une astuce pour le faire? J'utilise jQuery si cela aide.
javascript
jquery
css
height
BuddyJoe
la source
la source
Réponses:
Ça devrait être
avec jQuery. Cela récupère la hauteur du premier élément de l'ensemble encapsulé sous forme de nombre.
Essayer d'utiliser
ne fonctionne que si vous avez défini la propriété en premier lieu. Pas très utile!
la source
Essayez l'un des:
clientHeight
comprend la hauteur et le rembourrage vertical.offsetHeight
inclut la hauteur, le rembourrage vertical et les bordures verticales.scrollHeight
inclut la hauteur du document contenu (serait supérieure à la hauteur en cas de défilement), le remplissage vertical et les bordures verticales.la source
.clientWidth/.clientHeight
n'incluez PAS la largeur du défilement si le défilement est affiché. Si vous souhaitez inclure la largeur du défilement, vous pouvez utiliser à laelement.getBoundingClientRect().width
placeNON JQUERY car il y avait un tas de liens utilisant
elem.style.height
en haut de ces réponses ...HAUTEUR INTÉRIEURE:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
HAUTEUR EXTÉRIEURE:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Ou l'une de mes références préférées: http://youmightnotneedjquery.com/
la source
Vous pouvez utiliser
.outerHeight()
à cette fin.Il vous donnera la hauteur de rendu totale de l'élément. De plus, vous n'avez besoin de définir aucun
css-height
élément. Par mesure de précaution, vous pouvez conserver sa hauteur automatiquement afin qu'elle puisse être rendue selon la hauteur du contenu.Pour une vue claire de ces fonctions, vous pouvez aller sur le site de jQuery ou un article détaillé ici .
cela effacera la différence entre
.height()
/innerHeight()
/outerHeight()
la source
J'utilise ceci pour obtenir la hauteur d'un élément (retourne float) :
Cela fonctionne également lorsque vous utilisez le DOM virtuel . Je l'utilise dans Vue comme ceci:
la source
puis simplement:
style.height
la source
Certainement utiliser
ou
Je poste ceci comme une réponse supplémentaire car il y a quelques choses importantes que je viens d'apprendre.
Je suis presque tombé dans le piège en ce moment d'utiliser offsetHeight. C'est ce qui s'est passé :
En voici juste une partie:
Oui, il regarde les deux défilement et décalage. Si cela échoue, il regarde encore plus loin, en tenant compte des problèmes de compatibilité du navigateur et du CSS. En d'autres termes STUFF I DONT CARE ABOUT - or want to.
Mais je n'ai pas à le faire. Merci jQuery!
Morale de l'histoire: si jQuery a une méthode pour quelque chose, c'est probablement pour une bonne raison, probablement liée à la compatibilité.
Si vous n'avez pas lu la liste des méthodes jQuery récemment, je vous suggère de jeter un œil.
la source
la source
elem.getBoundingClientRect().height
J'ai créé un code simple qui n'a même pas besoin de JQuery et qui va probablement aider certaines personnes. Il obtient la hauteur totale de 'ID1' après le chargement et l'utilise sur 'ID2'
Il suffit ensuite de régler le corps pour le charger
la source
Hm nous pouvons obtenir la géométrie de l'élément ...
Et ce simple JS?
la source
var geometry; geometry={};
peut simplement êtrevar geometry={};
Je pense que la meilleure façon de le faire en 2020 est d'utiliser des js simples et
getBoundingClientRect().height;
Voici un exemple
En plus de
height
cette façon, nous avons également accès à un tas d'autres choses sur lediv
.la source
Est-ce donc la réponse?
"Si vous devez calculer quelque chose sans le montrer, définissez l'élément sur
visibility:hidden
etposition:absolute
ajoutez-le à l'arborescence DOM, récupérez l'offsetHeight et supprimez-le. (C'est ce que fait la bibliothèque de prototypes derrière les lignes la dernière fois que j'ai vérifié)."J'ai le même problème sur un certain nombre d'éléments. Il n'y a pas de jQuery ou de Prototype à utiliser sur le site mais je suis tout à fait d'accord pour emprunter la technique si ça marche. Comme exemple de certaines choses qui n'ont pas fonctionné, suivies de ce qui a fonctionné, j'ai le code suivant:
qui essaie tout et n'importe quoi pour obtenir un résultat nul. ClientHeight sans effet. Avec les éléments problématiques, je reçois généralement NaN dans la base et zéro dans les hauteurs de décalage et de défilement. J'ai ensuite essayé la solution Ajouter DOM et clientRects pour voir si cela fonctionne ici.
29 juin 2011, j'ai en effet mis à jour le code pour essayer à la fois d'ajouter à DOM et clientHeight avec de meilleurs résultats que ce à quoi je m'attendais.
1) clientHeight était également égal à 0.
2) Dom m'a en fait donné une hauteur qui était super.
3) ClientRects renvoie un résultat presque identique à la technique DOM.
Étant donné que les éléments ajoutés sont de nature fluide, lorsqu'ils sont ajoutés à un élément DOM Temp autrement vide, ils sont rendus en fonction de la largeur de ce conteneur. Cela devient bizarre, car c'est 30 pixels plus court qu'il ne finit par le faire.
J'ai ajouté quelques instantanés pour illustrer comment la hauteur est calculée différemment.
Les différences de hauteur sont évidentes. Je pourrais certainement ajouter un positionnement absolu et caché mais je suis sûr que cela n'aura aucun effet. J'ai continué à être convaincu que cela ne fonctionnerait pas!
(Je m'éloigne davantage) La hauteur sort (rend) plus bas que la vraie hauteur rendue. Cela pourrait être résolu en définissant la largeur de l'élément DOM Temp pour qu'il corresponde au parent existant et pourrait être fait assez précisément en théorie. Je ne sais pas non plus ce qui résulterait de leur suppression et de leur ajout à leur emplacement actuel. Comme ils sont arrivés par une technique innerHTML, je chercherai à utiliser cette approche différente.
* CEPENDANT * Rien de tout cela n'était nécessaire. En fait, cela a fonctionné comme annoncé et a retourné la bonne hauteur !!!
Quand j'ai été en mesure de rendre les menus à nouveau incroyablement visibles, DOM avait renvoyé la bonne hauteur selon la disposition fluide en haut de la page (279 px). Le code ci-dessus utilise également getClientRects qui retourne 280 px.
Ceci est illustré dans l'instantané suivant (extrait de Chrome une fois qu'il a fonctionné.)
Maintenant, je n'ai aucune idée de pourquoi ce truc de prototype fonctionne, mais il semble que ce soit le cas. Alternativement, getClientRects fonctionne également.
Je soupçonne que la cause de tous ces problèmes avec ces éléments particuliers était l'utilisation de innerHTML au lieu d'appendChild, mais c'est de la pure spéculation à ce stade.
la source
offsetHeight
, d'habitude.Si vous devez calculer quelque chose mais ne pas l'afficher, définissez l'élément sur
visibility:hidden
etposition:absolute
, ajoutez-le à l'arborescence DOM, récupérez leoffsetHeight
et supprimez-le. (C'est ce que fait la bibliothèque de prototypes en arrière-plan la dernière fois que j'ai vérifié).la source
Parfois, offsetHeight retournera zéro parce que l'élément que vous avez créé n'a pas encore été rendu dans le Dom. J'ai écrit cette fonction pour de telles circonstances:
la source
Si vous utilisez déjà jQuery, votre meilleur pari est
.outerHeight()
ou.height()
, comme cela a été indiqué.Sans jQuery, vous pouvez vérifier le dimensionnement de la boîte en cours d'utilisation et ajouter divers rembourrages + bordures + clientHeight, ou vous pouvez utiliser getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
sera maintenant une chaîne comme un "53.825px".Et je ne trouve pas la référence, mais je pense que j'ai entendu dire que cela
getComputedStyle()
peut coûter cher, donc ce n'est probablement pas quelque chose que vous voulez appeler à chaquewindow.onscroll
événement (mais alors, jQuery ne l'est pas non plusheight()
).la source
getComputedStyle
, utilisezparseInt(h, 10)
pour obtenir un entier pour les calculs.Avec MooTools :
$('someDiv').getSize().y
la source
Si j'ai bien compris votre question, alors peut-être que quelque chose comme ça aiderait:
la source
Avez-vous défini la hauteur dans le CSS spécifiquement? Si vous ne l'avez pas, vous devez utiliser
offsetHeight;
plutôt queheight
la source