Aucune réponse ne fait ce qui a été demandé en JS vanille, et je veux une réponse vanille donc je l'ai faite moi-même.
La largeur du client inclut le rembourrage et la largeur de l'offset inclut tout le reste ( lien jsfiddle ). Ce que vous voulez, c'est obtenir le style calculé ( lien jsfiddle ).
function getInnerWidth(elem) {
return parseFloat(window.getComputedStyle(elem).width);
}
EDITAR: getComputedStyle
n'est pas standard, et peut retourner des valeurs dans des unités autres que les pixels. Certains navigateurs renvoient également une valeur qui prend en compte la barre de défilement si l'élément en possède une (ce qui donne une valeur différente de la largeur définie dans CSS). Si l'élément est doté d'une barre de défilement, vous devrez calculer manuellement la largeur en supprimant les marges et les marges de l'élément. 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);
}
Cela dit, ce n'est probablement pas une réponse que je recommanderais de suivre avec mon expérience actuelle, et j'aurais recours à des méthodes qui ne reposent pas autant sur JavaScript.