我用jQuery编写了一个插件来解决这个问题,插件在这里:
http://jsfiddle.net/c9YNz/2/(已更新以适应调整窗口大小)。
该插件的代码将文本缩小到0.01em大小,然后再放大以适应。以下是插件代码:
$.fn.resizeText = function () {
var width = $(this).innerWidth();
var height = $(this).innerHeight();
var html = $(this).html();
var newElem = $("<div>", {
html: html,
style: "display: inline-block;overflow:hidden;font-size:0.1em;padding:0;margin:0;border:0;outline:0"
});
$(this).html(newElem);
$.resizeText.increaseSize(10, 0.1, newElem, width, height);
$(window).resize(function () {
if ($.resizeText.interval)
clearTimeout($.resizeText.interval)
$.resizeText.interval = setTimeout(function () {
elem.html(elem.find("div.createdResizeObject").first().html());
elem.resizeText();
}, 300);
});
}
$.resizeText = {
increaseSize: function (increment, start, newElem, width, height) {
var fontSize = start;
while (newElem.outerWidth() <= width && newElem.outerHeight() <= height) {
fontSize += increment;
newElem.css("font-size", fontSize + "em");
}
if (newElem.outerWidth() > width || newElem.outerHeight() > height) {
fontSize -= increment;
newElem.css("font-size", fontSize + "em");
if (increment > 0.1) {
$.resizeText.increaseSize(increment / 10, fontSize, newElem, width, height);
}
}
}
};
如果您有这个HTML代码:
<div class="resizeText" style="width:1200px;height:400px;">
Insert text from slipsum here.
</div>
您可以直接这样调用:
$(document).ready(function () {
$(".resizeText").resizeText();
});
这不是最好的方式,但我想足以满足你的需求(而且它可行)。
font-size
受到的影响是唯一的吗?line-height
或letter-spacing
呢?如果我只输入一个单词,再按回车键会发生什么?你是否只是消除回车并仅允许内联文本?我的意思是,在这种情况下,有太多不同的选项和需要考虑的事情。但是,如果你可以对这些问题和其他一些问题给出一个明确的答案,你就可以使用JavaScript做到接近你想要的东西。 - Adam Merrifield