L'obtention d'un élément hauteur intérieure
Comment obtenez-vous un élément de hauteur intérieure, sans rembourrage et les frontières?
Pas de jQuery, juste pur JS, et une solution de navigateur (IE7 inclus)
- Pourquoi ne pas utiliser
border-box
en css? De cette façon, vous n'avez pas à vous soucier de ces choses... Alors vous pouvez utiliseroffsetHeight
qui sera de retour à la bonne hauteur sans la marge. - c'est une question très précise d'un plugin, je fais qui n'a pas de CSS de contrôle, j'ai juste eu à travailler avec ce que j'ai obtenu
- Alors...je suppose que vous pouvez toujours définir la
box-sizing: border-box
, il va vous faire économiser du temps et des maux de tête. - Je ne peux pas, parce que mon plugin fonctionne sur les autres sites, sur lesquels il n'est pas à moi de changer leur CSS paramètres d'une façon qui puisse nuire à la conception
element.style.boxSizing = 'border-box';
- Ne sais pas quel genre de plugin, mais je ne vois pas pourquoi vous ne devriez pas l'utiliser uniquement sur cet élément, je veux dire que vous n'êtes pas changer de CSS d'autres que ce qui est nécessaire pour votre plugin fonctionne.
- oui, MAIS ce css paramètre n'est pas pour les vieux IE, et aussi, il pourrait y avoir un autre code qui fonctionne avec la page web qui pourrait mal calculer des choses, si j'ai un début de changement de CSS. c'est TOUJOURS une mauvaise idée. ne jamais changer, ne fonctionnent qu'avec ce que vous avez quand ce n'est pas votre propre site web
- Peut-être que vous pourriez cloner l'élément, changer la
box-sizing
, puis calculer cela? - en gros une bonne idée, MAIS très lent chose à faire dans mon cas, car j'en ai besoin calculée sur chaque événement scroll. le clonage va tuer les performances de mon plugin, que j'essaie de l'améliorer.
Vous devez vous connecter pour publier un commentaire.
La version ci-dessus va travailler dans les navigateurs modernes. Veuillez vérifier
currentStyle
pour IE navigateurs.parseInt(style.getPropertyValue('height'));
box-sizing
est fixé àborder-box
, vous aurez toujours de retirer le rembourrage et les valeurs limites.Vous pouvez simplement utiliser la
clientHeight
etclientWidth
propriétés.MDN doc web de l'Élément.clientHeight — clientWidth fonctionne exactement de la même manière.
MODIFIER des commentaires:
http://jsfiddle.net/hTGCE/1/ (un peu plus de code que prévu)
dans l'internet, vous trouverez des fonctions comme ceci:
si vous voulez soustraire le rembourrage /border-width est définie dans le css de fichiers et pas de dynamique dans l'attribut style:
et avec le rembourrage de même. ensuite, vous devez calculer.
j'ai eu le même problème et a trouvé qu'il y est pas natif de la croix-plattform solution, mais la solution est facile, mais
style
propriété n'est pas utile pour l'apprentissage de l'élément de style en général, car il ne représente que les déclarations CSS définie dans l'élément inlinestyle
attribut [...]".