要将 div(或任何元素)缩小到其文本内容的大小,您可以使用 JavaScript 获取range
包含其内容的 a 并使用以下方法获取范围的大小range.getBoundingClientRect()
:
function sizeElementToContents(el) {
var range = document.createRange();
range.selectNodeContents(el);
var textRect = range.getBoundingClientRect();
el.style.width = textRect.width + "px";
}
但是,当然,这只适用于现代浏览器。IE8 和 IE7 有不同的方法来处理范围。实际上,IE7 会自动max-width
按照您想要的方式处理,但是当我们的 IE8 代码运行以重新调整 IE7 上的 div 大小时,它会将 div 缩小为 0。为避免编写特定浏览器版本的代码,此代码在 IE7 上运行并且IE8,但包含一些额外的逻辑,以便它适用于两个浏览器版本:
function sizeElementToContents(el) {
var range, width;
if (document.createRange) {
range = document.createRange();
range.selectNodeContents(el);
width = range.getBoundingClientRect().width;
}
else {
range = document.body.createTextRange();
range.moveToElementText(el);
range.moveStart("character", 1);
width = range.boundingWidth;
var height = range.boundingHeight;
range.collapse();
range.moveEnd("character", 1);
if (range.boundingHeight == height) {
return; // text doesn't wrap, so don't resize
}
}
el.style.width = width + "px";
}
工作演示:http: //jsfiddle.net/gilly3/HZRFb/