我如何强制长字符串没有任何空白被包裹?


193

我有一长串(DNA序列)。它不包含任何空格字符。

例如:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

什么是CSS选择器来强制将此文本用a html:textarea或a xul:textbox换行?


17
具有讽刺意味的是,该字符串也不会在堆栈溢出中中断...
splattne

Answers:


273

对于块元素:

<textarea style="width:100px; word-wrap:break-word;">
  ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</textarea>

对于内联元素:

<span style="width:100px; word-wrap:break-word; display:inline-block;"> 
   ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</span>


仅IE,Safari和FF3.1(alpha)支持。
亚当·贝莱尔

1
这仅在新的浏览器中有效-请参见caniuse.com/#search=word-break
Michal Bernhard

9
@Michael:答案使用“自动换行”规则,而不是“自动换行”规则;目前几乎所有浏览器都支持前者。在显示“部分支持”的地方,看来“自动换行”规则的“中断单”值仍然可行。
Robusto

2
此属性overflow-wrap自标准以来已重命名为该属性,但wrod-wrap得到了广泛实施。
西罗Santilli郝海东冠状病六四事件法轮功

1
另外随着“显示:表单元格”的作品,是在我的情况necesary
塞萨尔·莱昂

107

在您要允许中断的点处放置零宽度的空格。零宽度空格&#8203;位于HTML中。例如:

ACTGATCG&#8203;AGCTGAAG&#8203;CGCAGTGC&#8203;GATGCTTC&#8203;GATGATGC


4
很好的建议,我今天学到了一些新东西,谢谢!
Matteo Conta,2012年

2
感谢您的解决方案。很难在表中使用类似的东西,而这种解决方案是我发现的唯一可在IE,Firefox和Chrome中使用的解决方案。
Farinha'2

1
+1,即使问题是针对更具体的案例,它也可以覆盖更多案例,效果更好。
蒙特利尔,2012年

2
您也可以使用<wbr>标签,其目的是提供可选的换行机会。
justisb 2013年

7
观察是否在可能被复制和粘贴的内容中执行此操作。
alex 2014年

42

以下是一些非常有用的答案:

如何防止长词破坏我的div?

为了节省您的时间,可以使用CSS解决此问题:

white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP printers */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
word-break: break-all;

4
为此+1,因为它提到了word-break:break-all; 在IE9中为我工作的人
Nick Benedict

3
word-break: break-all;是我唯一在Android WebView中工作的软件。
Stan

谢谢你word-break: break-all;
Lonnie Best,

18

对我来说,这有效

<td width="170px" style="word-wrap:break-word;">
  <div style="width:140px;overflow:auto">
    LONGTEXTGOESHERELONGDIVGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESHERELONGDIVLONGTEXTLONGTEXT
  </div>
</td>

您也可以在另一个div内使用div来代替td。我使用overflow:auto,因为它显示了Opera和IE浏览器中的所有文本。


这对我不起作用。我必须将“ word-wrap”属性移到div中并删除“ overflow”属性。有了这个变化,作品就可以了。
danigonlinea 2015年

12

我认为您无法使用CSS做到这一点。而是在字符串的常规“字长”处插入HTML软连字符:

ACTGATCG&shy;AGCTGAAG&shy;CGCAGTGC&shy;GATGCTTC&shy;GATGATGC&shy;TGACGATG

这将在换行的末尾显示连字符,这可能是您想要的,也可能不是您想要的。

注意Safari似乎<textarea>无论如何都将长字符串包装起来,这与Firefox不同。


哇,甚至都不知道。整齐!
丹尼尔·谢弗

我也不知道。双重整洁!
卡尔

11

使用CSS方法强制换行没有空格的字符串。三种方法:

1)使用CSS空白属性。为了解决浏览器不一致的问题,您必须用几种方法声明它。因此,只需将您的looooong字符串放入某个块级元素(例如div,pre,p),然后将该元素赋予以下CSS:

some_block_level_tag {
    white-space: pre;           /* CSS 2.0 */
    white-space: pre-wrap;      /* CSS 2.1 */
    white-space: pre-line;      /* CSS 3.0 */
    white-space: -pre-wrap;     /* Opera 4-6 */
    white-space: -o-pre-wrap;   /* Opera 7 */
    white-space: -moz-pre-wrap; /* Mozilla */
    white-space: -hp-pre-wrap;  /* HP Printers */
    word-wrap: break-word;      /* IE 5+ */
}

2)使用Compass强制包装mixin

3)我也只是在研究这一点,我认为也可能有效(但我需要更全面地测试浏览器支持):

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

参考:包装内容


是的,那里的#3可以在所有现代浏览器甚至更老的IE6 +中使用。
Graeck

1
#3仅在有机会被言语打破时才有效。过长的字符串不会折断(在Chrome 52.0.2743.82上进行了测试)。
collapsar


5

为了word-wrap:break-word;为我工作,我必须确保将display设置为block,并且在元素上设置了宽度。在Safari中,它必须具有p标签,并且width必须在中设置ex


3

如果您使用的是PHP,则wordwrap函数可以很好地实现此目的:http : //php.net/manual/en/function.wordwrap.php

CSS解决方案word-wrap: break-word;似乎并非在所有浏览器中都一致。

其他服务器端语言具有类似的功能-或可以手动构建。

这是PHP自动换行功能的工作方式:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

$wrappedstring = wordwrap($string,50,"&lt;br&gt;",true);

这会使用<br>标签将字符串包装为50个字符。'true'参数强制剪切字符串。


您可以将此解决方案与Remy的解决方案混合使用以插入零宽度的空格:自动换行($ longtext,5,“&#8203;”,true);
MV。

3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

3

使用<wbr>标签:

ACTGATCG<wbr>AGCTGAAG<wbr>CGCAGTGC<wbr>GATGCTTC<wbr>GATGATGC

我认为这比使用零宽度的空格更好,因为零宽度的空格&#8203;可能会在您复制文本时引起问题。


2

在表格不是固定大小的情况下,下面的行对我有用:

style="width:110px; word-break: break-all;"

1

只是设置width和添加float对我有用:-)

width:100%;
float:left;

我认为这是一个完整而简单的答案,最初发布此问题的人应使用width:100%; 带有float:left; on包含该字符串的元素,他的问题将得到解决。那为什么这个答案不相关?
TechBrush.Org 2014年

因为发布此问题的那个家伙认为您的解决方案五年前没有奏效。
皮埃尔

2
是的,但是这个论坛不仅与那个人有关,而且与今天像我一样面临类似问题的其他人也可以从中受益。
TechBrush.Org 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.