$(element).outerWidth(vrai) rapports différemment, en fonction de thème?
J'ai un script jQuery, cela définit un élément de largeur jusqu'à 50% par la normale CSS largeur de l'attribut.
Si je puis sortie de la outerWidth(true)
de cet élément pour obtenir la valeur exacte, en pixels, il n'est parfois pas correspondre à $(window).width()/2
- ci est basée sur le thème que le site offre. Malheureusement je ne peux pas apporter une démo de ce comportement en ligne.
Est-il spécifique attribut CSS qui pourraient causer une telle différence?
Le problème est que le outerWidth()
est de reporting par exemple, 564px
, mais quand je vérifie dans Safari, inspecteur, dit-il 580
. De sorte que le retour de cette fonction est incorrect et j'aimerais être en mesure de savoir ce qui en est la cause.
Démo:
http://users.telenet.be/prullen/this/
http://users.telenet.be/prullen/that/
Le contenu (zone grise lorsque vous cliquez sur l'onglet rouge) est censé être caché sur la charge grâce à une marge négative, mais en raison de la (mauvaise?) de retour de jquery, il n'est pas dans l'un de ces thèmes (montrant légèrement).
de la console.journal des appels :
console.log('window width /2 = ' + $(window).width()/2);
console.log('doc width /2 = ' + $(document).width()/2);
console.log('width = ' + defaults.boxWidth);
console.log('width = ' + $slider.css('width'));
console.log('width = ' + $slider.width());
console.log('width = ' + $slider.outerWidth());
console.log('width = ' + $slider.outerWidth(true));
- Qu'est-ce exactement que vous parlez quand vous dites "thème"? Oui, vous pouvez et devriez mettre une démo en ligne... l'utilisation jsFiddle.net
- Différents HTML mises en page; un de complètement différent de la conception du site, les différents CSS, etc.. (mais pas différent de l'élément).
Vous devez vous connecter pour publier un commentaire.
.outerWidth([includeMargin])
- Retourne la largeur de l'élément, ainsi que de droite et de gauche padding, border, et (éventuellement) de la marge en pixels.Réglage de la
[includeMargin]
option pourtrue
ajoute que les marges de ce numéro:.outerWidth(true)
- Retourne la largeur de l'élément, ainsi que de droite et de gauche padding, border, et de la marge, en pixels..largeur()
- Retourne un sans unité valeur de pixel pas compris à gauche et à droite padding, border, ou la marge.Comme par jQuery docs, la seulement différence entre
.width()
et.css(width)
c'est que le second comprend les unités ("px") oùwidth()
retourne simplement le numéro (sans le "px").Donc, si, par définition,
width()
n'inclut pas les marges, le remplissage et les frontières, on ne peutcss(width)
C'est le réglage de l'élément lui-même (non compris les margin, padding ou frontières) à 50% de son conteneur. Si la fenêtre est le conteneur, puis la largeur de l'élément sera de 50% de l'.
Exemple: Avec une fenêtre de 1160 pixels de large, votre script va créer un élément à 50% de 1160, ou 580 pixels de large (non compris les margin, padding ou frontières).
Lorsque vous regardez le même élément avec
outerWidth(true)
, vous êtes maintenant l'ajout de la marge, de remplissage ou de frontières pour le nombre.À l'aide de mon exemple précédent: Avec une fenêtre de 1160 pixels,
$(window).width()/2
sera 580. En supposant que votre élément est également 580 pixels,.outerWidth(true)
va ajouter (ou soustraire) des marges, ajouter une bordure, et ajouter le remplissage de l'élément lui-même de sorte que vous n'allez pas obtenir 580 à moins de marges, de remplissage et de bordure sont toutes à zéro.Alors, naturellement, avec un "thème" (à l'aide de votre définition), l'élément va probablement avoir un autre padding, border et les marges. Je ne peux pas dire pour sûr, car je ne vois pas tout de votre code.
Simplement utiliser
.width()
en place de.outerWidth(true)
pour garder les choses cohérentes sur l'ensemble de vos thèmes.EDIT:
Dans le Safari de la console, je vois une marge sur le
body
, provoquant ce que vous décrivez. À l'intérieur de votreconsolidated-screen-2.css
feuille vous avez un 20 pixels de la marge de gauche.Vous devez prendre ce corps de marge en compte lorsque vous faites vos calculs.
Depuis votre JavaScript ne permet pas de mettre à jour dynamiquement et ce n'est pas un jsFiddle, je ne peux pas tester plus loin. Lorsque j'ai mis la marge à 0 dans les DOM, je ne peut pas invoquer le JS pour recalculer les numéros sans rechargement de la page, ce qui, évidemment, efface mon DOM sur-ride.
Une solution serait de coller avec
.width()
(ignorer les marges) dans tous les calculs.Une autre solution semble comprendre la configuration de la
body
marge à zéro.EDIT 2:
Vous dire que c'est de déclaration incorrecte, mais j'ai un semi-opaque pixel ruler utilitaire superposées sur mon écran pour la suite et tout est à vérifier...
Cette page dans un 1228 pixel de large fenêtre. Règle vérifie cela.
console.log('width = ' + $slider.outerWidth(true));
= 11881188 plus 40 pixels (
body
la marge gauche/droite) = 1228 (même en tant que dirigeant)Tiroir est ouvert et en règle vérifie qu'il est exactement 614 pixels de large (sans la bordure droite).
console.log('width = ' + $slider.css('width'));
= 594 px;594 plus 20 pixels (
body
marge de gauche) = 614 (même en tant que dirigeant)console.log('width = ' + $slider.width());
= 594594 plus 20 pixels (
body
marge de gauche) = 614 (même en tant que dirigeant)width
ne comprend PAS la marge, de remplissage ou de frontière.width
etouterWidth
. Heureux que vous avez pris conscience de cela et ai eu de travail.width
etouterWidth(true)
sont censés être deux choses différentes. Le premier ne comprend pas le padding, border, ou la marge -- la seconde.Si vous voulez le
outerWidth
à être exactement la moitié de la largeur de la fenêtre, vous devrez explicitement de tenir compte de ces choses: