Possible duplicate:
Auto-size dynamic text to fill a fixed-size container
If the container contains only plain text without a child, then the following code is a working solution:
(function($) { $.fn.textfill = function(options) { return this.each(function() { var text = $(this).text(); $(this).text(''); var container = $('<span />').text(text).appendTo($(this)); var min = 1, max = 200, fontSize; do { fontSize = (max + min) / 2; container.css('fontSize', fontSize); var multiplier = $(this).height()/container.height(); if (multiplier == 1) { min = max = fontSize} if (multiplier > 1) { min = fontSize} if (multiplier < 1) { max = fontSize} } while ((max - min) > 1); fontSize = min; if ($(this).width() < container.width()) { min = 1; do { fontSize = (max + min) / 2; container.css('fontSize', fontSize); var multiplier = $(this).width()/container.width(); if (multiplier == 1) { min = max = fontSize} if (multiplier > 1) { min = fontSize} if (multiplier < 1) { max = fontSize} } while ((max - min) > 1); fontSize = min; } container.remove(); $(this).text(text); var minFontSize = options.minFontPixels; var maxFontSize = options.maxFontPixels; $(this).css('fontSize', minFontSize && (minFontSize > fontSize) ? minFontSize : maxFontSize && (maxFontSize < fontSize) ? maxFontSize : fontSize); }); }; })(jQuery);
See the demo here .
But what if the container contains children, say:
<div><span class="c1">text1</span>main text<span class="c2">text2</span></div>
and we also want to authorize children by keeping the text as high as the "main text", which is the text node? Children may have a different font family or other parameters.
How can the algorithm be improved to get such results?
Ωmega source share