Obtenir calculé de la taille de la police de l'élément DOM en JS
Est-il possible de détecter la calculés font-size
d'un élément du DOM, en tenant compte de paramètres génériques fabriqués ailleurs (Dans le body
tag par exemple), des valeurs héritées, et ainsi de suite?
Un cadre d'approche indépendant serait bien, comme je suis en train de travailler sur un script qui devrait fonctionner de manière autonome, mais ce n'est pas une obligation bien sûr.
Contexte: je suis en train de peaufiner CKEditor est sélecteur de polices plugin (source ici), de sorte qu'il indique toujours la taille de la police de la position actuelle du curseur (contre seulement quand, dans une span
qui a explicitement font-size
jeu, ce qui est le comportement actuel).
- "Calculé", comme dans la taille en pixels?
- Pour le scénario actuel: pixels seulement, mais en général, il serait très agréable d'être en mesure d'obtenir à la fois la valeur définie (px,pt,em) et le pixel un.
- si c'est des pixels seulement, vous êtes bon.
pt
,em
etc vont être impossible, seulement IEcurrentStyle
pouvez l'obtenir.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser la non-standard d'IE élément
.currentStyle
bien, sinon, vous pouvez regarder pour le DOM Niveau 2 standardgetComputedStyle
méthode, si disponible :Utilisation:
Plus d'infos:
Edit: Grâce à @Croissant Frais, @kangax et @Pekka pour les commentaires.
Changements:
camelize
fonction, puisque les propriétés contenant hypens, commefont-size
, doit être accessible en tant que camelCase (eg.:fontSize
) sur lacurrentStyle
IE objet.document.defaultView
avant d'accéder àgetComputedStyle
.el.currentStyle
etgetComputedStyle
ne sont pas disponibles, obtenir les CSS des biens parelement.style
.currentStyle
etgetComputedStyle
sont fondamentalement différents: erik.eae.net/archives/2007/07/27/18.54.15getComputedStyle
est incapable d'obtenir le hérité du style, et toujours calcule commepx
, si la valeur a été déclarée commepx
ou pas.document.defaultView.getComputedStyle
, paswindow.getComputedStyle
(MDC s'il se trompe, ou s'il considère que son propre — Mozilla — seulement la mise en œuvre).getComputedStyle
est spécifié pour être un membre deAbstractView
, quidocument.defaultView
met en œuvre, et il n'y a vraiment aucune garantie quewindow == document.defaultView
(ni dans les specs, ni dans la pratique; en fait, Safari 2.x est un bon exemple dewindow != document.defaultView
). Il est intéressant de noter que PPK fait une erreur similaire dans getstyles l'article que vous avez lié à (testdefaultView
surwindow
).currentStyle
acceptera camelized propriétés (par exemple, fontSize), tandis quegetPropertyValue
fonctionne avec la forme originale (font-size).document.defaultView
au lieu dewindow
comme @kangax souligne également ajouté uncamelize
fonction permettant d'obtenir de bonnes propriétés lorsque vous travaillez avec desel.currentStyle
, tout obtenir de la rétroaction est vraiment apprécié!document.defaultView
avant d'accéder àgetComputedStyle
sur elle.$('#elementId')
retourne un objet jQuery tandis que le CMS estgetStyle
fonction s'attend à un élément du DOM. UtilisationgetStyle($('#elementId')[0], 'font-size')
à la place.À surmonter les " em "problème, j'ai rapidement écrit une fonction, si la taille de police dans ie est "em", la fonction calcule avec la police du corps de texte de taille.
Ressemble à jQuery (1.9 au moins) utilise
getComputedStyle()
oucurrentStyle
lui-même lorsque vous utilisez$('#element')[.css][1]('fontSize')
, de sorte que vous ne devriez vraiment pas avoir à s'embêter avec plus compliqué solutions si vous êtes OK à l'aide de jQuery.Testé sous IE 7 À 10, FF et Chrome