Comment obtenir le réel de rendu de police lorsqu'elle n'est pas définie dans le CSS?
Comment puis-je obtenir le véritable visage de police et taille de police d'un élément lors de la CSS font-face
et font-size
propriétés ne sont pas définis?
Par exemple, le code JavaScript
object.style.fontFamily
ne retourne aucune valeur. C'est assez évident, en supposant que le CSS n'a pas appliqué un style de object
n'importe où. Mais, bien sûr, une certaine police est utilisée pour rendre le texte, probablement le système de police ou le navigateur internet par défaut de la police.
Peut donc, par exemple, JavaScript obtenir ce rendu de police?
- Java ou Flash peut le faire. JS - ne peut pas vous donner les noms de la police, mais vous pouvez essayer pour détecter la police par le déchiffrage de rendu du texte dans le canevas.
- Ne sais pas si c'est pour vous, mais j'ai l'habitude d'utiliser WhatFont bookmarklet pour comprendre ce que la police utilisée sur une page, donc il y aura peut être quelques idées qui pourraient vous aider, si il détecte correctement les polices dont vous parlez...
- Pourquoi voulez-vous faire? ..Je ne pas de deuxième deviner les questions de l'Empereur, mais, j'ai toujours été un rebelle, de toute façon.
- Lol! 😉 Je veux déterminer le nombre de cols pour un textarea en fonction de la police définis pour le textarea, depuis
cols
est un attribut obligatoire pour les textarea en XHTML. - Les personnes qui ont besoin de cette information pour des raisons de débogage, plutôt que d'avoir à obtenir par programmation avec JavaScript, devrait découvrez stackoverflow.com/questions/884177/... à la place. Certains navigateurs outils de dev offrent cette information.
Vous devez vous connecter pour publier un commentaire.
Je suggère à cette fonction:
Utilisation:
Remarque:
getComputedStyle
ne fonctionne pas avec IE8.Démo Live: http://jsfiddle.net/4mxzE/
element.currentStyle
à la place: quirksmode.org/dom/getstyles.htmlelement
à$(selector).get(index)
. Le.get()
méthode renvoie l'élément du DOM(s) sélectionné par$(selector)
. Assurez-vous de définirindex = 0
même si il n'y a qu'un seul élément sélectionné, depuis.get()
sans params retournera un tableau.[0]
pour accéder au premier élément d'un objet jquery. Pas besoin de méthode lorsque vous pouvez y accéder directement par l'index de tableau.getComputedStyle
renvoie "valeurs calculées" au lieu de "recours à des valeurs" (voir les exemples ici).null
etgetPropertyValue
. Quelque chose lignegetComputedStyle(document.body)["font-size"];
semble également fonctionner, mais votre approche peut-être mieux.Il n'y a pas de norme, méthode fiable pour déterminer la police utilisée. Les réponses précédentes ici, le rapport du style fontFamily valeur de style, mais qui peut être une liste de noms de police et n'a pas d'identifier précisément les réelle de police rendus (ce qui était le réelle question posée ici).
(Comme indiqué dans certains commentaires, il y a des façons de deviner à la police par l'inspection des signaux visuels, mais qui n'est pas susceptible d'être fiable à 100%.)
Vous pouvez trouver les informations sur le rendu de la police dans Chrome/Firefox Developer Tools. Essayez de l'inspection du paragraphe dans l'extrait de code suivant:
CSS:
HTML:
En Chrome Developer Tools (testé sur 55.0.2883.75 m 64-bit) vous obtenez les informations suivantes:
Dans Firefox, Outils de développement (testé sur 47.0.2 avec
about:config > devtools.fontinspector.enabled = true
) vous obtenez les informations suivantes:Consolas
n'a pas été trouvé,Menlo
sera utilisé. Comment voir que, même avec Devtools?@font-face
avecsrc: local(Arial)
!! Sweeet. Exactement ce dont j'avais besoin.this._agent.getPlatformFontsForNode()
qui n'est pas exposée. Appels github.com/ChromiumWebApps/blink/blob/... plus tard, dans le cas où vous êtes intéressé.<html>
s'font-family "Foo" et le type "Bar". Il rend Arial (par défaut), mais affiche "Foo". Cependant utiles. Ont sur Github ou quelque chose quelque part?J'ai trouvé un moyen (pour tous les navigateurs qui supportent
<canvas>
), le contrôle pixel par pixel si le rendu des polices a changéDonc à utiliser que vous venez de faire:
Si vous utilisez un autre dialecte (par exemple, en japonais), vous pouvez modifier la
testString
variable pour la plupart des caractères communs dans ce dialecte.Un peu de retard ici, mais ayant eu à résoudre le même problème...
Šime Vidas la réponse est fondamentalement correct, mais de nos jours, vous pouvez faire preuve de créativité, et vous avez votre réponse.
Fondamentalement, définir vos propres font-face, qui vous sont sûr ne correspond à aucun des polices existantes.
Ensuite, ajoutez votre police après chaque computedstyle de police, et de voir si c'est la police qui se rendait. Si c'est pas le cas, félicitations, vous avez trouvé le rendu de la police
Ici est le violon:
https://jsfiddle.net/obutjanw/
c'est le code qui définit la fonction dont vous avez besoin:
Note que vous devriez vraiment garder la partie ont été d'un nœud à l'aide de la police est ajouté sur la charge, car sinon, le navigateur peut être la fin du rendu de l'corect de police sur le premier appel à getRenderedFontFamily