javascript - 是否可以横向收缩包裹超过一行的内容?

标签 javascript css

如果我有一个元素包含在一个盒子里:

+-------- box --------+
| *------------*      |
| | small text |      |
| *------------*      |
+---------------------+

display: inline-block 完成了收缩包装的技巧。但是,如果内容由于宽度受限而跨越多行,则无法收缩包裹元素。

+-------- box --------+
| *-----------------* |
| | this does not   | |
| | shrink          | |
| | appropriately   | |
| *-----------------* |
+---------------------+

是否有任何方法可以产生如下所示的预期结果?

+-------- box --------+
| *---------------*   |
| | this does not |   |
| | shrink        |   |
| | appropriately |   |
| *---------------*   |
+---------------------+

这是显示这两种情况的 fiddle :http://jsfiddle.net/urLa8jvc/2/和一个解决方案,我在正确的地方手动断线以显示所需的结果。 CSS 解决方案是首选,但 javascript 也是可以接受的。

最佳答案

我真的更喜欢 CSS 的解决方案,但现在我已经使用 javascript 编写了这个“技巧”:http://jsfiddle.net/86khx8kf/2/

var nodes = document.querySelectorAll(".node");
for (var nidx = 0; nidx < nodes.length; nidx++) {
    var node = nodes[nidx];
    node.innerHTML = node.innerHTML.split(" ").map(function (word) {
        return "<span>" + word + "</span>";
    }).join(" ");
    var spans = node.querySelectorAll("span");
    var offsetLeft = -Number.MAX_VALUE;
    for (var sidx = 0; sidx < spans.length; sidx++) {
        var span = spans[sidx];
        if (span.offsetLeft <= offsetLeft) {
            node.insertBefore(document.createElement("br"), span);
        }
        offsetLeft = span.offsetLeft;
        span.outerHTML = span.innerHTML;
    }
    node.normalize();
}

关于javascript - 是否可以横向收缩包裹超过一行的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808069/

相关文章:

javascript:这段代码需要解释

javascript - wiris 插件在 tinymce 中运行方程保存

javascript - 数组对象区别javascript angularjs

javascript - 水平展开而不是垂直展开

javascript - 从方位获取像素位置

javascript - TypeScript Redux React : How to iterate through a component children

javascript - Angular Directive(指令)未显示

html - 在多列布局中对复选框 css 进行分组

css - 具有灵活宽度内容的固定宽度 float div

html - 透明文本框 basemap