CSS 自动换行/下划线换行以及空格和连字符

问题描述 投票:0回答:6

我有一堆非常长的文件名,导致我的 HTML 格式溢出。 所有这些文件名都使用下划线而不是空格,如果它们是空格,则很容易断开/换行。 像这样。

Here_is_an_example_of_a_really_long_filename_that_uses_underscores_instead_of_spaces.pdf

是否有某种方法可以告诉CSS将文本中的下划线视为空格或连字符,从而也可以在下划线上换行/换行? 像这样。

这里是一个真正长的例子
使用下划线的文件名_
相反_of_spaces.pdf

出于我的目的,我无法使用脚本来执行此操作。 我也不想使用 word-wrap:break-word 技巧,因为如果不指定宽度,这通常不起作用。 而且,它在单词中间任意中断。

谢谢。

css word-wrap line-breaks
6个回答
32
投票

您可以使用

<wbr>
标签(“换行机会元素”),它可以让浏览器在您放置的位置处换行。

所以你的 HTML 应该是:

Here_<wbr>is_<wbr>an_<wbr>example_<wbr>of_<wbr>a_<wbr>really_<wbr>...

您可以在输出 HTML 之前在服务器端添加此标签。

另一种选择是实体

&#8203;
,它是一个零宽度空间。有时这在某些浏览器上效果更好。


29
投票

使用 CSS


word-break: break-all

jsfiddle - 代码结果


9
投票

目前您似乎无法使用 CSS 来实现此目的。

但是你可以使用 JavaScript 自动添加

<wbr>
标签,例如:

var arr = document.getElementsByClassName('filename');
for(var i = 0; i < arr.length; i++) {
  arr[i].innerHTML = arr[i].innerHTML.replace(/_/g, '_<wbr/>');
}
body { width: 250px; }
<a class="filename">Here_is_an_example_of_a_really_long_filename_that_uses_underscores_instead_of_spaces.pdf</a>


4
投票

如果没有 HTML5,您可以使用 Javascript 在要中断的字符之前或之后插入

<span></span>

//Jquery
$("#id_of_the_container").html(function(index, text) {
    return text.replace(/_/g, "_<span />");
});

//Pure Javascript
var htmlText = document.getElementById("id_of_the_container").innerHTML;
document.getElementById("id_of_the_container").innerHTML = htmlText.replace(/_/g, "_<span />");

然后使用容器的CSS类来包裹单词:

.yourClass {
    word-break : break-word;
}

最后设置一个零像素宽的空白作为跨度之前的内容:

.yourClass > span:before {
    content: "\200b";
}

$("#set").html(function(index, text) {
  return text.replace(/_/g, "_<span />");
});
.boxes-container > div {
  margin: 5px;
  max-width: 200px;
  border : solid black 2px;
  display: inline-block;
  padding : 5px;
}

.bigger {
  margin-right : 200px !important;
}

.wrap {
  word-break: break-word;
}

.wrap > span:before {
  content : "\200b";
}

.answer-example {
  color : RGB(0, 50, 0);
  border-color: RGB(0, 50, 0) !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="boxes-container">
  <div class="bigger">
    Without_Anything,
    Long_Strings_With_Underscores_Make_text_Hard_To_Wrap
  </div>
  <div class="wrap">
    Without_Span_tags,
    Long_Strings_With_Underscores_Make_text_Hard_To_Wrap
  </div>
  <div id="set" class="wrap answer-example">
    With_Span_tags,
    Long_Strings_With_Underscores_Make_text_Hard_To_Wrap
  </div>
</div>


3
投票

无需使用 JavaScript 或

<wbr>
,您可以使用以下 CSS 插入
<span> </span>
(注意 空格):

span{
    width: 0;
    overflow: hidden;
    display: inline-block;
}

标记:

Here_<span> </span>is_<span> </span>an_<span> </span>example...

0
投票

这是 TypeScript 中的另一个选项:

const addWordBreakAfterUnderscores = (content: string) => {
    // u200B is a zero-width space, which is used to prevent
    // the wordbreak from being visible.
    return content.replaceAll('_', '_\u200B');
};
© www.soinside.com 2019 - 2024. All rights reserved.