Keine einzige Antwort macht das, was in Vanilla JS gefragt wurde, und ich möchte eine Vanille-Antwort, also habe ich es selbst gemacht.
clientWidth enthält Polsterung und offsetWidth enthält alles andere ( jsfiddle link ). Was Sie wollen, ist, den berechneten Stil zu erhalten ( jsfiddle Link ).
function getInnerWidth(elem) {
return parseFloat(window.getComputedStyle(elem).width);
}
BEARBEITEN: getComputedStyleist nicht Standard und kann Werte in anderen Einheiten als Pixel zurückgeben. Einige Browser geben auch einen Wert zurück, der die Bildlaufleiste berücksichtigt, wenn das Element einen hat (was wiederum einen anderen Wert als die in CSS festgelegte Breite ergibt). Wenn das Element über eine Bildlaufleiste verfügt, müssen Sie die Breite manuell berechnen, indem Sie die Ränder und Auffüllungen aus dem entfernen offsetWidth.
function getInnerWidth(elem) {
var style = window.getComputedStyle(elem);
return elem.offsetWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) - parseFloat(style.borderLeft) - parseFloat(style.borderRight) - parseFloat(style.marginLeft) - parseFloat(style.marginRight);
}
Trotz alledem ist dies wahrscheinlich keine Antwort, die ich mit meiner aktuellen Erfahrung empfehlen würde, und ich würde auf Methoden zurückgreifen, die nicht so sehr auf JavaScript basieren.