La plupart des autres réponses utilisent une boucle pour réduire la taille de la police jusqu'à ce qu'elle tienne dans le div, ce qui est TRÈS lent puisque la page doit rendre à nouveau l'élément chaque fois que la police change de taille. J'ai finalement dû écrire mon propre algorithme pour que cet élément fonctionne d'une manière qui me permette de mettre à jour son contenu périodiquement sans geler le navigateur de l'utilisateur. J'ai ajouté quelques autres fonctionnalités (rotation du texte, ajout de rembourrage) et je l'ai packagé sous forme de plugin jQuery, que vous pouvez obtenir à l'adresse suivante :
https://github.com/DanielHoffmann/jquery-bigtext
appelez simplement
$("#text").bigText();
et il s'adaptera parfaitement à votre conteneur.
Voyez-le en action ici :
http://danielhoffmann.github.io/jquery-bigtext/
Pour l'instant, il présente quelques limitations : la division doit avoir une hauteur et une largeur fixes et il ne permet pas d'envelopper le texte sur plusieurs lignes.
Je vais m'efforcer d'obtenir une option permettant de définir la taille maximale des caractères.
Edit : J'ai trouvé d'autres problèmes avec le plugin, il ne gère pas d'autres modèles de boîtes que le modèle standard et le div ne peut pas avoir de marges ou de bordures. Je vais travailler dessus.
Edit2 : J'ai maintenant corrigé ces problèmes et limitations et ajouté plus d'options. Vous pouvez définir une taille de police maximale et vous pouvez également choisir de limiter la taille de la police en utilisant la largeur, la hauteur ou les deux. Je vais travailler sur l'acceptation des valeurs max-width et max-height dans l'élément wrapper.
Edit3 : J'ai mis à jour le plugin à la version 1.2.0. Nettoyage majeur du code et nouvelles options (verticalAlign, horizontalAlign, textAlign) et support pour les éléments internes à l'intérieur de la balise span (comme les sauts de ligne ou les icônes font-awesome).
130 votes
C'est probablement la fonction la plus étonnante qui aurait dû être ajoutée à HTML5/CSS3 sans avoir besoin de JS.
0 votes
J'ai effectué quelques mesures en modifiant la longueur d'un texte dynamique et la taille du conteneur pour déterminer la taille de la police qui permettra au texte de s'adapter parfaitement. Et après avoir effectué une analyse de régression, j'ai mis au point une fonction mathématique simple qui génère automatiquement la meilleure taille de police.
2 votes
Il s'avère en fait que le graphique qui vous donne la meilleure taille de police est donné par f(x) = g(lettres) * (x / 1000)^n, où g(x) est une fonction simple, n varie en fonction de la police que vous utilisez. (Bien qu'elle puisse avoir une valeur standard pour toutes les polices, si vous ne voulez pas la modifier pour qu'elle soit absolument parfaite...). x est la taille en pixels carrés du conteneur.
1 votes
Si vous êtes toujours intéressé, je peux ajouter une réponse. Personnellement, je pense que c'est une bien meilleure méthode pour générer la taille de police correcte en premier lieu, au lieu d'essayer et d'échouer jusqu'à ce que le script "y arrive".
0 votes
Bien sûr, l'astuce consistait à le faire fonctionner avec deux variables, la taille et la quantité de texte. Dans votre cas, vous n'avez que la quantité de texte, et donc vous n'avez même pas besoin de g(x).
1 votes
Consultez ma réponse pour trouver une meilleure façon de procéder.
0 votes
@FriendofKim avez-vous encore les détails de votre formule ? Qu'est-ce que g() et qu'est-ce que n en fait ?
0 votes
@EasilyBaffled En fin de compte, j'ai utilisé cette formule d'une manière un peu différente de ce dont cette question avait besoin. Mais je vais déterrer l'ancien code et le mettre ici. Je crois que les chiffres de la formule doivent être modifiés pour chaque police.
0 votes
@EasilyBaffled Voilà ! J'espère que ça marchera pour vous ! Bonne programmation :)
0 votes
github.com/rjz/inflateText.js permet de dimensionner le texte dynamique. C'est une extension de FitText.js.
0 votes
Vous pouvez utiliser les unités relatives css3 pour cela, à condition que votre mise en page soit relative à la largeur ou à la hauteur du navigateur. Par exemple, si vous pouvez faire en sorte que l'élément occupe toute la largeur du navigateur en définissant font-size : 100vw. Voir sitepoint.com/new-css3-relative-font-size y css-tricks.com/viewport-size-typographie
0 votes
Nous en discutions hier stackoverflow.com/questions/45655078/