当前位置: 首页 > 面试题库 >

将DIV缩小到包裹成最大宽度的文本?

广绪
2023-03-14
问题内容

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

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

此jsfiddle对此进行了说明。由于最大宽度,两个单词几乎没有换行,但是DIV并没有缩小到新换行的文本,从而留下了令人讨厌的右手边距。我想消除这种情况,并使用Javascript将DIV调整为包装文本的大小(因为我认为纯CSS中不存在解决方案)。

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

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

问题答案:

这不是最漂亮的解决方案,但应该可以解决问题。逻辑是计算每个单词的长度,并用它来计算出在被迫换行之前最长的一行将适合的行;然后将该宽度应用于div。
范例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();
});


 类似资料:
  • 问题内容: 我有这个设置: HTML : CSS : 通过此设置,它可以在iPhone上运行,但不能在浏览器中运行。 是因为我已经在meta中,也许已经在? 问题答案: 我发现最好的方法是为较旧的浏览器编写默认CSS,因为较旧的浏览器包括5.5、6、7和8。无法读取@media。当我使用@media时,我会这样使用: 但是,您可以使用@media进行任何操作,这只是为所有浏览器构建样式时最适合我的

  • 问题内容: 我有这样的事情: 两个花车都是必需的。我希望内容div填充整个屏幕减去菜单的那些100px。如果我不使用浮点数,div会完全按照它的比例扩展。但是当设置了float时如何设置呢?如果我用…… 然后内容div会获取父级的大小,它是正文或我也尝试过的另一个div,因此,它当然不适合菜单右侧,然后显示在下面。 问题答案: 希望我正确理解了您,看看这个:

  • 我正在寻找一种比断点更精确的解决方案。我知道这需要JavaScript,但我很难找到合适的插件。 我网站上的大多数文本将保持不变,或者我将通过媒体查询对其进行调整(比如平板电脑和手机的90%)。这很好,但我正在为我的导航菜单和横幅等领域寻找“实时”解决方案。 在此处查看站点 您可以使用基本字体大小为100%的ems查看我的所有文本的相对大小 如果你调整网站的大小,你会注意到菜单“崩溃”,因为字体太

  • A very powerful tool of the Emmet toolkit. It takes an abbreviation, expands it and places currently selected content in the last element of generated snippet. If there’s no selection, action will sil

  • 问题内容: 我有一个表,我想定义和属性。请参见下面的示例。 我现在的问题是浏览器无法使用它。如果我在它上定义它,将被忽略,如果我在一个元素内的一个元素中定义它,则内容具有正确的最小和最大宽度,但表的大小仍然相同。(所以有很多可用空间:/) 我该如何解决? 编辑:我只是注意到问题似乎仅在表处于全屏模式时才会发生。但是,元素的最大宽度不应大于! 例: 问题答案: 对于表单元格,应使用’width’属性

  • 我已经尝试了几个小时来解决这个问题,我正在努力,不管我做什么,它拒绝在我添加max-width或min-width的瞬间调用媒体标记中的CSS。为了测试,我让media标记使主体变红,并将min-width降低到可笑的低。什么都没发生。如果我留下屏幕标记而不留下任何其他东西,它就会调用它 CSS: HTML: 请原谅代码的绝对混乱,但我还没来得及清理这个问题,就在我对这个问题失去理智之前。