Come si ottiene l'altezza interna di un elemento, senza padding e bordi?Come ottenere l'altezza interna di un elemento
No jQuery, solo pura JS, e una soluzione cross-browser (IE7 inclusi)
Come si ottiene l'altezza interna di un elemento, senza padding e bordi?Come ottenere l'altezza interna di un elemento
No jQuery, solo pura JS, e una soluzione cross-browser (IE7 inclusi)
var style = window.getComputedStyle(document.getElementById("Example"), null);
style.getPropertyValue("height");
La versione sopra funzionerà nei browser moderni. Si prega di controllare currentStyle
per i browser IE.
intendi: 'parseInt (style.getPropertyValue ('height'));' – vsync
Internet Explorer restituirà "auto" se non c'è altezza nel css http://jsfiddle.net/Kxsvx/ in modo da non avere l'altezza di esso! – Mic
@Mic quale Internet Explorer? – Fresheyeball
EDIT dai commenti:
http://jsfiddle.net/hTGCE/1/ (un po 'più di codice del previsto)
in internet a trovare le funzioni in questo modo:
function getRectangle(obj) {
var r = { top: 0, left: 0, width: 0, height: 0 };
if(!obj)
return r;
else if(typeof obj == "string")
obj = document.getElementById(obj);
if(typeof obj != "object")
return r;
if(typeof obj.offsetTop != "undefined") {
r.height = parseInt(obj.offsetHeight);
r.width = parseInt(obj.offsetWidth);
r.left = r.top = 0;
while(obj && obj.tagName != "BODY") {
r.top += parseInt(obj.offsetTop);
r.left += parseInt(obj.offsetLeft);
obj = obj.offsetParent;
}
}
return r;
}
se si vuole sottrarre il padding/bordo -width è impostato nel file css e non dinamico nell'attributo style:
var elem = document.getElementById(id);
var borderWidth = 0;
try {
borderWidth = getComputedStyle(elem).getPropertyValue('border-top-width');
} catch(e) {
borderWidth = elem.currentStyle.borderWidth;
}
borderWidth = parseInt(borderWidth.replace("px", ""), 10);
e con l'imbottitura uguale. quindi lo calcoli.
in internet è possibile trovare tutti i tipi di codice della spazzatura. Voglio LA RISPOSTA ULTIMA per questo mistero, non un codice lento, gonfiato ... ma grazie per la risposta :) – vsync
se hai un'altezza dinamica senza un attributo css "altezza" per un elemento il metodo con "getComputedStyle" non sarà lavoro. O mi sbaglio? – Mic
funziona, l'ho appena provato – vsync
Ho avuto lo stesso problema e scoperto non esiste una soluzione nativa plattform croce, ma la soluzione è facile però
var actual_h = element.offsetHeight;
if(parseInt(element.style.paddingTop.replace('px','')) > 0){
actual_h=actual_h - parseInt(element.style.paddingTop.replace('px',''));
}
if(parseInt(element.style.paddingBottom.replace('px','')) > 0){
actual_h=actual_h - parseInt(element.style.paddingBottom.replace('px',''));
}
Tieni presente che, come MDN [afferma] (https: //developer.mozilla. org/it-it/docs/Web/API/HTMLElement/style # Getting_style_information), "La proprietà' style' non è utile per conoscere lo stile dell'elemento in generale, dal momento che rappresenta solo le dichiarazioni CSS impostate nell'elemento inline ' attributo style' [...] ". Il dimensionamento della casella – Spooky
non funziona in IE7 – Chandrakant
Perché non utilizzare 'border-box' in css? In questo modo non devi preoccuparti di queste cose ... Quindi puoi usare "offsetHeight" che restituirà l'altezza corretta senza il margine. – elclanrs
questa è una domanda molto specifica per un plugin che faccio senza controllo CSS, devo solo lavorare con quello che ho ottenuto – vsync
Quindi ... Immagino che tu possa ancora impostare il 'dimensionamento della scatola: border-box', Ti farò risparmiare tempo e mal di testa. – elclanrs