我從來沒有嘗試過這個,也許它很瘋狂,但是不是所有的(不幸的)建議都是通過反覆改變尺寸來解決這個問題,直到文本合適,或許你可以嘗試兩種截然不同的字體大小(當然是用no-wrap),比如10和100,然後插入或外推你的期望值,假設關係應該接近線性?我不知道做這樣的兩種佈局對於你的瓶頸來說太貴了。如果是這樣,我不確定你真的有什麼希望,因爲字體可能會很棘手。但這可能會起作用。
更新:我已經使用這種技術創建了一個Fiddle。它似乎工作得很好。相關的代碼是:
var font_size_to_fit = (function() {
var $test = $("<span/>").appendTo("body").css({
visibility: "hidden",
border: 0,
padding: 0,
whiteSpace: "pre"
});
var minFont = 10, maxFont = 100;
return function(txt, fontFamily, size) {
$test.appendTo("body").css({fontFamily: fontFamily}).text(txt);
$test.css({fontSize: maxFont + "px"});
var maxWidth = $test.width();
$test.css({fontSize: minFont + "px"});
var minWidth = $test.width();
var width = (size - minWidth) * (maxFont - minFont)/
(maxWidth - minWidth) + minFont;
$test.detach();
return width + "px";
};
}());
這可能還需要一些錯誤檢查,以確保我們的零,當minWidth == maxWidth
,最有可能提供的文本時是空的可能會出現的沒有分裂。這留給了讀者一個練習。
另一個更新:這在某些時候打破了。我更新了小提琴包括:
return (width - .1) + "px";
這修復了註釋中記錄的錯誤。但我不知道是什麼改變了它們之間的中斷。
在另一個div /容器中創建文本並檢查寬度,直到它匹配。 – NoLifeKing
這比第一個看起來更棘手,因爲大多數瀏覽器都會執行最小字體大小。因此,如果您使用循環來不斷縮小字體,則還必須測試實際字體大小是否與您剛纔指定的字體大小相同。如果不是,你已經達到最低限度,需要取消你的循環。 – Blazemonger
我很欣賞這個輸入,但這是一種不同的情況。在這個問題上,它被要求提供一種方法來動態地適應元素中的文本 - 這就是解決方案所做的,使用一段時間。我要求一個函數來計算所需的寬度。我的函數將被放置在一個瓶頸區域,所以它必須是一個快速的數學公式,而不是一個迭代的DOM操作。 – MaiaVictor