gpt4 book ai didi

javascript - 将 DIV 缩小到包装到其最大宽度的文本?

转载 作者:技术小花猫 更新时间:2023-10-29 12:42:30 31 4
gpt4 key购买 nike

将 div 收缩到某些文本非常简单。但是,如果文本由于最大宽度(例如)换行到第二行(或更多行),则 DIV 的大小不会缩小到新换行的文本。它仍然会扩展到断点(在本例中为最大宽度值),从而在 DIV 的右侧产生相当大的边距。当想要将此 DIV 居中以使换行的文本显示居中时,这是有问题的。它不会,因为 DIV 不会收缩到换行的多行文本。一种解决方案是使用两端对齐的文本,但这并不总是可行的,而且结果可能会很糟糕,因为单词之间的间隙很大。

我知道没有解决方案可以将 DIV 缩小为纯 CSS 中的换行文本。所以我的问题是,如何使用 Javascript 实现这一目标?

这个 jsfiddle 对此进行了说明:jsfiddle .由于最大宽度,这两个词几乎没有换行,但 DIV 并没有缩小到新换行的文本,留下了令人讨厌的右手边距。我想消除这一点,并让 DIV 调整大小以适应大概使用 Javascript 的包装文本(因为我不相信纯 CSS 中存在解决方案)。

.shrunken {text-align: left; display: inline-block; font-size: 24px; background-color: #ddd; max-width: 130px;}

<div class="shrunken">Shrink Shrink</div>

最佳答案

这不是最漂亮的解决方案,但它应该可以解决问题。逻辑是计算每个单词的长度,并用它来计算在被迫换行之前适合的最长行;然后将该宽度应用于 div。在这里 fiddle :http://jsfiddle.net/uS6cf/50/

示例 html...

<div class="wrapper">
<div class="shrunken">testing testing</div>
</div>

<div class="wrapper">
<div class="shrunken fixed">testing testing</div>
</div>

<div class="wrapper">
<div class="shrunken">testing</div>
</div>

<div class="wrapper">
<div class="shrunken fixed">testing</div>
</div>

<div class="wrapper">
<div class="shrunken" >testing 123 testing </div>
</div>

<div class="wrapper">
<div class="shrunken fixed" >testing 123 testing </div>
</div>

和 javacript(依赖于 jQuery)

$.fn.fixWidth = function () {
$(this).each(function () {
var el = $(this);
// This function gets the length of some text
// by adding a span to the container then getting it's length.
var getLength = function (txt) {
var span = new $("<span />");
if (txt == ' ')
span.html('&nbsp;');
else
span.text(txt);
el.append(span);
var len = span.width();
span.remove();
return len;
};
var words = el.text().split(' ');
var lengthOfSpace = getLength(' ');
var lengthOfLine = 0;
var maxElementWidth = el.width();
var maxLineLengthSoFar = 0;
for (var i = 0; i < words.length; i++) {
// Duplicate spaces will create empty entries.
if (words[i] == '')
continue;
// Get the length of the current word
var curWord = getLength(words[i]);
// Determine if adding this word to the current line will make it break
if ((lengthOfLine + (i == 0 ? 0 : lengthOfSpace) + curWord) > maxElementWidth) {
// If it will, see if the line we've built is the longest so far
if (lengthOfLine > maxLineLengthSoFar) {
maxLineLengthSoFar = lengthOfLine;
lengthOfLine = 0;
}
}
else // No break yet, keep building the line
lengthOfLine += (i == 0 ? 0 : lengthOfSpace) + curWord;
}
// If there are no line breaks maxLineLengthSoFar will be 0 still.
// In this case we don't actually need to set the width as the container
// will already be as small as possible.
if (maxLineLengthSoFar != 0)
el.css({ width: maxLineLengthSoFar + "px" });
});
};

$(function () {
$(".fixed").fixWidth();
});

关于javascript - 将 DIV 缩小到包装到其最大宽度的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14596213/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com