2010-12-15 36 views
2

J'ai div avec la hauteur et la largeur fixe et à l'intérieur j'ai un texte qui change, et parfois il peut être un mot ou deux et parfois il peut être une phrase. Ce dont j'ai besoin, c'est de réduire la taille de la police afin qu'elle s'adapte à ce div.Ajuster le texte à un div

+0

Avez-vous une police monospace dans la div? –

+0

vous devriez vérifier ma réponse pour une meilleure performance – Hoffmann

Répondre

1

i avait une idée et cela a fonctionné :) voici mon code

 $('li').each(function() { 
      while ($(this).outerHeight() > 25) { 
       var currentFontSize = $(this).css("font-size"); 
       $(this).css("font-size", (parseFloat(currentFontSize) - 1) + "px"); 
      } 

     }); 
+0

+1 J'ai eu des problèmes pour obtenir la largeur du texte qui a été enveloppé dans un div avec une largeur explicite. J'ai utilisé cette solution -> http://stackoverflow.com/a/2771544/374866 – davehale23

+0

Je dois dire que cette fonction est beaucoup trop lente.Changer les attributs css provoque un redessin de la dom. Si vous avez besoin d'ajuster la taille d'un grand nombre d'éléments ou sur une minuterie, il va perdre votre page Web. Vérifiez ma réponse pour une solution plus efficace mais toujours simple. – Hoffmann

-2

vous pouvez le faire en définissant la taille de la police comme ......

.small {font-size: 0.8em}

vous pouvez voir l'effet ici working demo

1

J'ai eu un problème similaire, ce qui m'a fait écrire mon propre plugin pour cela. Une solution consiste à utiliser l'approche shrink-to-fit, comme décrit par user54316. Toutefois, si vous devez adapter plusieurs éléments ou si vous êtes concerné par les performances, par exemple lors du redimensionnement des fenêtres, consultez jquery-quickfit. Il mesure et calcule une mesure invariante de taille pour chaque lettre du texte et l'utilise pour calculer la prochaine taille de police qui correspond au texte dans le conteneur. Les calculs sont mis en cache, ce qui le rend très rapide (il n'y a virtuellement aucun impact sur les performances du deuxième redimensionnement avant) lorsqu'il s'agit de plusieurs textes ou d'avoir à ajuster un texte plusieurs fois, comme par exemple sur le redimensionnement de la fenêtre. Je pense que cela fonctionnerait parfaitement dans votre cas.

Vous voulez juste devez appeler

$('#yourid').quickfit() 

après avoir modifié le texte.

Production example, fitting 14x16x2 texts

0

Il y a un plugin jQuery pour que: FitText.js

Voici l'URL: https://github.com/davatron5000/FitText.js

Voici un exemple: http://jsfiddle.net/martinschaer/sRvB9/

La fonction fitText() reçoit un paramètre , avec lequel vous devez "jouer" pour obtenir les résultats que vous voulez. En outre, il a redimensionné le texte lorsque la fenêtre est redimensionnée; si vous avez besoin d'avoir le texte redimensionnée lorsque (par exemple) un div est redimensionnée, vous devez ajouter une paire de lignes JS pour cela;)

+0

Ceci est pour un redimensionnement de la fenêtre, mais cela ne permet pas de réduire la longueur des chaînes pour qu'elles puissent rentrer dans une div. – Smittles

0
$text.css('font-size', "100px"); 
$text.css('line-height', "100px"); 
var foo= $div.width() /$text.width(); 
var bar= $div.height() /$text.height(); 

if(foo < bar) { 
    foo=Math.floor(foo*100) +"px"; 
    $text.css('font-size', foo); 
    $text.css('line-height', foo); 
} else { 
    bar=Math.floor(bar*100) +"px"; 
    $text.css('font-size', bar); 
    $text.css('line-height', bar); 
} 

//centralizing text, top and left are defined as 50% on the CSS, optional 
$text.css('margin-left', -$text.width() /2 + "px"); 
$text.css('margin-top', -$text.height() /2 + "px"); 

Une petite note est que vous devez appeler cette fonction si la div lui-même change de taille. Vous pouvez lier ce code à l'événement de redimensionnement de la div.