Supposons que j'en ai un <div>
que je souhaite centrer dans l'affichage du navigateur (fenêtre d'affichage). Pour ce faire, je dois calculer la largeur et la hauteur de l' <div>
élément.
Que dois-je utiliser? Veuillez inclure des informations sur la compatibilité du navigateur.
javascript
html
xhtml
dhtml
snortasprocket
la source
la source
Réponses:
Vous devez utiliser les propriétés
.offsetWidth
et.offsetHeight
. Notez qu'ils appartiennent à l'élément, non.style
.var width = document.getElementById('foo').offsetWidth;
La fonction
.getBoundingClientRect()
renvoie les dimensions et l'emplacement de l'élément sous forme de nombres à virgule flottante après avoir effectué des transformations CSS.la source
.offsetWidth
et.offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elementsoffsetWidth
sera égal à 0 si l'élément l'estdisplay:none
, alors que le calculwidth
pourrait toujours avoir une valeur positive dans ce cas.visibility:hidden
n'affecte pas leoffsetWidth
.offsetWidth
renvoie la boîte "entière", y compris le contenu, le remplissage et les bordures; tandis queclientWidth
renvoie la taille de la zone de contenu seule (elle aura donc une valeur plus petite chaque fois que l'élément a un remplissage et / ou une bordure non nul). (mod édité pour plus de clarté)Jetez un oeil à
Element.getBoundingClientRect()
.Cette méthode retourne un objet contenant les
width
,height
et d'autres valeurs utiles:Par exemple:
Je crois que cela n'a pas les problèmes qui se produisent
.offsetWidth
et.offsetHeight
où ils reviennent parfois0
(comme discuté dans les commentaires ici )Une autre différence
getBoundingClientRect()
peut renvoyer des pixels fractionnaires, où.offsetWidth
et.offsetHeight
arrondira à l'entier le plus proche.IE8 Remarque :
getBoundingClientRect
ne renvoie pas la hauteur et la largeur sur IE8 et les versions inférieures. *Si vous devez prendre en charge IE8, utilisez
.offsetWidth
et.offsetHeight
:Il convient de noter que l'objet renvoyé par cette méthode n'est pas vraiment un objet normal . Ses propriétés ne sont pas énumérables (donc, par exemple,
Object.keys
ne fonctionne pas immédiatement.)Plus d'informations à ce sujet ici: Comment convertir au mieux un ClientRect / DomRect en un simple objet
Référence:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectla source
offsetHeight
queoffsetWidth
ce ne sera pas le cas.REMARQUE : cette réponse a été écrite en 2008. À l'époque, la meilleure solution multi-navigateur pour la plupart des gens était vraiment d'utiliser jQuery. Je laisse la réponse ici pour la postérité et, si vous utilisez jQuery, c'est un bon moyen de le faire. Si vous utilisez un autre framework ou du JavaScript pur, la réponse acceptée est probablement la voie à suivre.
Depuis jQuery 1.2.6, vous pouvez utiliser l'une des fonctions CSS principales ,
height
etwidth
(ououterHeight
etouterWidth
, selon le cas).la source
Juste au cas où cela serait utile à n'importe qui, je mets une zone de texte, un bouton et divise tout avec le même CSS:
Je l'ai essayé en chrome, firefox et ie-edge, j'ai essayé avec jquery et sans, et je l'ai essayé avec et sans
box-sizing:border-box
. Toujours avec<!DOCTYPE html>
Les resultats:
la source
Selon MDN: Déterminer les dimensions des éléments
offsetWidth
etoffsetHeight
renvoyer la "quantité totale d'espace occupé par un élément, y compris la largeur du contenu visible, les barres de défilement (le cas échéant), le remplissage et la bordure"clientWidth
etclientHeight
renvoyer "l'espace occupé par le contenu affiché, y compris le remplissage, mais pas la bordure, les marges ou les barres de défilement"scrollWidth
etscrollHeight
renvoyer la "taille réelle du contenu, quelle que soit la quantité actuellement visible"Cela dépend donc si le contenu mesuré devrait être hors de la zone visible actuelle.
la source
Il vous suffit de le calculer pour IE7 et les versions antérieures (et uniquement si votre contenu n'a pas de taille fixe). Je suggère d'utiliser des commentaires conditionnels HTML pour limiter le piratage aux anciens IE qui ne prennent pas en charge CSS2. Pour tous les autres navigateurs, utilisez ceci:
C'est la solution parfaite. Il centre
<div>
de n'importe quelle taille et le rétrécit à la taille de son contenu.la source
Il est facile de modifier les styles des éléments mais un peu difficile à lire la valeur.
JavaScript ne peut lire aucune propriété de style d'élément (elem.style) provenant de css (interne / externe), sauf si vous utilisez l'appel de méthode intégré getComputedStyle en javascript.
Élément: l'élément pour lequel lire la valeur.
pseudo: Un pseudo-élément si nécessaire, par exemple :: before. Une chaîne vide ou aucun argument signifie l'élément lui-même.
Le résultat est un objet avec des propriétés de style, comme elem.style, mais maintenant par rapport à toutes les classes CSS.
Par exemple, ici le style ne voit pas la marge:
Vous avez donc modifié votre code javaScript pour inclure le getComputedStyle de l'élément que vous souhaitez obtenir sa largeur / hauteur ou un autre attribut
Valeurs calculées et résolues
Il existe deux concepts en CSS:
Il y a longtemps, getComputedStyle a été créé pour obtenir des valeurs calculées, mais il s'est avéré que les valeurs résolues sont beaucoup plus pratiques et la norme a changé.
Donc, de nos jours, getComputedStyle retourne en fait la valeur résolue de la propriété.
Notez s'il vous plaît:
getComputedStyle requiert le nom complet de la propriété
Il existe d'autres incohérences. À titre d'exemple, certains navigateurs (Chrome) affichent 10 pixels dans le document ci-dessous, et certains d'entre eux (Firefox) - ne le font pas:
pour plus d'informations https://javascript.info/styles-and-classes
la source
element.offsetWidth et element.offsetHeight devraient faire l'affaire, comme suggéré dans le post précédent.
Cependant, si vous souhaitez simplement centrer le contenu, il existe une meilleure façon de le faire. En supposant que vous utilisez xhtml DOCTYPE strict. définissez la marge: 0, la propriété auto et la largeur requise en px sur la balise body. Le contenu est aligné au centre de la page.
la source
... semble CSS aider à mettre div au centre ...
la source
vous pouvez également utiliser ce code:
la source
si vous devez le centrer dans le port d'affichage du navigateur; vous pouvez y arriver avec CSS uniquement
la source
Voici le code de WKWebView qui détermine la hauteur d'un élément Dom spécifique (ne fonctionne pas correctement pour toute la page)
la source
swift
code iOS , non? Pas JavaScript. Je retiens un downvote (b / c cela peut en fait être assez utile) mais veuillez noter que cela ne répond pas à la question, et serait probablement plus approprié sur une autre question, spécifique à iOS. Si aucun n'existe déjà, envisagez peut-être d'en poser une et de répondre par vous-même.Si offsetWidth renvoie 0, vous pouvez obtenir la propriété de largeur de style de l'élément et rechercher un nombre. "100px" -> 100
/\d*/.exec(MyElement.style.width)
la source