多くの人が@DMTinterの投稿へのコメントで述べたように、OPは変更する文字の数(「量」)について尋ねていました。彼はCSSについても尋ねていましたが、@ Alexanderが示したように、「CSSだけでは不可能です」。私の知る限りでは、現時点ではそうであるように思われるので、人々が次に良いことを知りたがるのも当然のようです。
私はこれを特に誇りに思うわけではありませんが、うまくいきます。それを達成するための過剰な量のコードのようです。これがコアです:
function fitText(el){
var text = el.text();
var fsize = parseInt(el.css('font-size'));
var measured = measureText(text, fsize);
if (measured.width > el.width()){
console.log('reducing');
while(true){
fsize = parseInt(el.css('font-size'));
var m = measureText(text, fsize );
if(m.width > el.width()){
el.css('font-size', --fsize + 'px');
}
else{
break;
}
}
}
else if (measured.width < el.width()){
console.log('increasing');
while(true){
fsize = parseInt(el.css('font-size'));
var m = measureText(text, fsize);
if(m.width < el.width()-4){ // not sure why -4 is needed (often)
el.css('font-size', ++fsize + 'px');
}
else{
break;
}
}
}
}
ここにJSビンがあります:http : //jsbin.com/pidavon/edit?html,css,js,console,output
可能な改善を提案してください(私はキャンバスを使用してテキストを測定することに本当に興味がないようです...らしいオーバーヘッドが多すぎる(?))。
measureText関数について@Peteに感謝:https ://stackoverflow.com/a/4032497/442665
width
inem
の指定は逆になります。それはwidth
に依存しますfont-size
。@JosephSilberそれはまさに私が考えたことです。