Вот мое решение: я измеряю текст в новом div внутри предоставленного div, так что стили должны быть унаследованы. Затем я вставляю текст в div с помощью span, чтобы установить размер шрифта. Максимальный размер шрифта будет максимальным, но он будет уменьшен до размера.
Он не зацикливается: он рисует текст только один раз в одноразовом элементе div, а затем рисует непосредственно в предоставленном элементе div. Смотрите ответ @Hoffmann - мне просто не понравился целый «плагин» для ответа на вопрос.
требуется jquery.
var txt = txt || {}
txt.pad_factor = 1.1;
txt.insertText_shrinkToFit = function(div,text)
{
var d = txt.cache || $('<div></div>');
txt.cache = d;
d.css('white-space','nowrap');
d.css('position','absolute');
d.css('top','-10000px');
d.css('font-size','1000px');
var p = $(div);
var max_w = parseInt(p.css('max-width')) || p.width();
var max_h = parseInt(p.css('font-size'));
p.append(d);
d.html(text);
var w = d.width() * txt.pad_factor;
d.remove();
var h = Math.floor(max_w*1000/w);
var s = ( max_h < h ? max_h : h ) + "px";
p.html('<SPAN style="font-size:' + s + '">' + text + '</SPAN>');
}
Например:
<html><head><script src=http://code.jquery.com/jquery-latest.min.js></script>
<script>/*insert code, from above, here.*/</script></head><body>
<div id=mysmalldiv style="max-width:300px;font-size:50px"></div>
<script>
txt.insertText_shrinkToFit("#mysmalldiv","My super long text for this div.");
</script>
</body></html>
Для тестирования: так я обнаружил, что мне нужен 1.1 pad_factor; которые вы можете настроить для своих нужд.
<div id=mytestdiv style="max-width:300px;font-size:50px"></div>
<script>
var t = "my text ";
var i = 0;
var f = function() {
t += i + " ";
txt.insertText_shrinkToFit("#mytestdiv",t);
i++;
if(i < 100)
setTimeout(f,1000);
}
f();
</script>
Примечание. Предполагается размер шрифта в пикселях. Я не проверял с их или pt.