问题描述
使用自动换行:break-word; 如果单词反正要换行,我不希望先换行,这是无用且丑陋的。如何避免这种情况?
示例:
使用自动换行:断行; 给出一个div,其宽度等于23个“ x”字符,如下所示:
xxxxxxxxxxxxxxxxxxxxxxxxxx
div innerHTML是“ xx xxxxxxxxxxxxxxxxxxxxxxxxxxxx”,如下所示:
<div>xx xxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
这是div的innerHTML的显示方式以及尊重23“ x”宽度的方式。
会发生什么:
xx
xxxxxxxxxxxxxxxxxxxxxxx
xxxxx
我想要的是
xx xxxxxxxxxxxxxxxxxxxxx
xxxxxxxx
断字:全部中断和类似或更近的属性不能解决此问题。我不希望能避免折断的词。我只希望宽度大于容器宽度的单词先中断BUT而不换行,就像 word-wrap:break-word; 一样,因为它根本没用而且很丑。
解决方法
补充MaxiGui的答案。您还可以在HTML中使用不间断空格
(或用JS将不间断空格替换为空格)。
但我认为最好使用word-break: break-all;
编辑:连字符完成所有工作https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens
,@ Sfili_81提到了
类似
word-break: break-all;
你在这里
var txt = document.getElementById("demo").innerHTML;
var dataArr = txt.split(' ');
var paragraph = document.getElementById("demo");
var finalString = "";
for (var i = 0; i < dataArr.length; i++){
if (dataArr[i].length > 6 ) {
finalString = finalString + " <span>"+ dataArr[i]+"</span>";
}
else{
finalString = finalString + " " + dataArr[i];
}
}
paragraph.innerHTML = finalString;
div{
width:50px;
background: red;
}
span{
word-break:break-all;
}
<div id="demo">test teeeeeeeeeeest test test test</div>
PS:我仍然将问题标记为来自How to force a line break in a long word in a DIV?
的重复项编辑
由于break-all
也在破坏整个文本/单词,而break-word
在长单词之前留出一个空格/空白,因此它无法适应。因此,唯一的解决方案是JS。在此示例中,我们将span元素注入到长度超过6的文本中。
使用jQuery的替代解决方案:
HTML:
<div id="demo">xx xxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx</div>
JS:
$(document).ready(function() {
var words = $('#demo').text().split(' ');
$('#demo').empty();
$.each(words,function(i,v) {
$('#demo').append($('<span>').text(v));
})
});
CSS:
#demo {
width: 100px;
border: 1px solid #F00;
word-wrap: wrap;
word-break: break-all;
}
#demo span {
display: inline-block;
border: 1px dashed #00F;
word-wrap: break-word;
margin-right: 2px; /* add the space back */
}
此解决方案比公认的解决方案稍好,因为它不需要单词长度的硬编码值。