js text fit
by ian_smithz
HTML
<div class="fit-text">
<span>TEST</span>
</div>
<div class="fit-text">
<span>SUPERMEGAMANXZERO</span>
</div>
<div class="fit-text">
<span>TEST TEST </span>
<span>SECONDSPANLONGWORD</span>
</div>
<div class="fit-text">
<span>TEST TEST TEST</span>
</div>
<div class="fit-text">
<span>TEST TEST TEST TEST TEST</span>
</div>
<div class="fit-text">
<span>TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST</span>
</div>
CSS
.fit-text {
opacity: 0;
display: block;
float: left;
/* width and min-height values are important */
width: 440px;
min-height: 50px;
background: darkgreen;
margin: 10px;
text-align: center;
}
.fit-text span {
font-family: sans-serif;
font-weight: bold;
font-size: 40px;
}
JavaScript
$(function() {
$('.fit-text').each(function() {
// Fit height
var fitHeight = parseInt($(this).css('min-height'));
if ($(this).height() > fitHeight) {
var c = 0;
while ($(this).height() > fitHeight) {
$(this).find('span').each(function() {
var fontSize = parseInt($(this).css('font-size'));
fontSize = fontSize - 1 + "px";
$(this).css('font-size', fontSize);
});
c++;
if (c > 999) {
$(this).css('background', 'red');
break;
}
}
}
// Fit width
var fitWidth = parseInt($(this).css('width'));
var $div = $(this);
$(this).find('span').each(function() {
var c = 0;
var spanWidth = parseInt($(this).width());
while (fitWidth < spanWidth) {
$div.find('span').each(function() {
var fontSize = parseInt($(this).css('font-size'));
fontSize = fontSize - 1 + "px";
$(this).css('font-size', fontSize);
});
spanWidth = parseInt($(this).width());
c++;
if (c > 999) {
$div.css('background', 'red');
break;
}
}
});
});
$('.fit-text').css('opacity', '1');
});