Làm thế nào tôi có thể buộc một chuỗi dài mà không có bất kỳ khoảng trống nào được bọc?


193

Tôi có một chuỗi dài (một chuỗi DNA). Nó không chứa bất kỳ ký tự khoảng trắng.

Ví dụ:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Điều gì sẽ là bộ chọn CSS để buộc văn bản này được bọc trong một html:textareahoặc trong một xul:textbox?


17
Trớ trêu thay, chuỗi không bị đứt trong Stack Overflow hoặc ...
splattne

Câu trả lời:


273

cho các phần tử khối:

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

cho các yếu tố nội tuyến:

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


Nó chỉ được hỗ trợ trong IE, Safari và FF3.1 (alpha).
Adam Bellaire

1
điều này chỉ hoạt động trong làn sóng trình duyệt mới - xem caniuse.com/#search=word-break
Michal Bernhard

9
@Michael: Câu trả lời sử dụng quy tắc "word-quấn", không phải là "ngắt từ"; cái trước được hỗ trợ như được sử dụng trong hầu hết mọi trình duyệt được sử dụng ngày nay. Khi "hỗ trợ một phần" được chỉ định, có vẻ như giá trị "break-word" cho quy tắc "word-quấn" vẫn còn khả thi.
Robusto

2
Các tài sản đã được đổi tên thành overflow-wrapkể từ trong các tiêu chuẩn, nhưng wrod-wrapđược thực hiện rộng rãi.
Ciro Santilli 郝海东 冠状 病 事件

1
Cũng hoạt động với "display: cell-cell", trong trường hợp của tôi
César León

107

Đặt không gian có chiều rộng bằng không tại các điểm mà bạn muốn cho phép nghỉ. Không gian có độ rộng bằng không có &#8203;trong HTML. Ví dụ:

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


4
Đề nghị tốt, tôi đã học được một cái gì đó mới ngày hôm nay, cảm ơn bạn!
Matteo Conta

2
Cảm ơn giải pháp này. Đã có một thời gian khó khăn để một cái gì đó như thế này hoạt động trong một bảng và giải pháp này là giải pháp duy nhất mà tôi tìm thấy hoạt động trong IE, Firefox và Chrome.
Farinha

1
+1, điều này hoạt động tốt hơn vì nó bao gồm nhiều trường hợp hơn, mặc dù câu hỏi dành cho một trường hợp cụ thể hơn.
montrealist

2
Bạn cũng có thể sử dụng <wbr>thẻ, phục vụ cho cùng một mục đích là cung cấp cơ hội ngắt dòng tùy chọn.
justĩa

7
Xem nếu bạn làm điều này trong những thứ có thể được sao chép và dán.
alex

42

Dưới đây là một số câu trả lời rất hữu ích:

Làm thế nào để ngăn chặn những từ dài phá vỡ div của tôi?

để tiết kiệm thời gian của bạn, điều này có thể được giải quyết bằng 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 cái này vì nó đề cập đến break-break: break-all; đã làm việc cho tôi trong IE9
Nick Benedict

3
word-break: break-all;là người duy nhất làm việc trong Android WebView đối với tôi.
Stan

Cảm ơn bạn đã word-break: break-all;!
Lonnie hay nhất

18

Đối với tôi công việc này,

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

Bạn cũng có thể sử dụng div bên trong div khác thay vì td . Tôi đã sử dụng overflow:auto, vì nó hiển thị tất cả văn bản trong trình duyệt Opera và IE của tôi.


Điều này đã không làm việc cho tôi. Tôi phải chuyển thuộc tính "word-quấn" vào div và xóa thuộc tính "tràn". Với những thay đổi này, hoạt động.
danigonlinea

12

Tôi không nghĩ bạn có thể làm điều này với CSS. Thay vào đó, ở 'độ dài từ' thông thường dọc theo chuỗi, hãy chèn một dấu gạch nối mềm HTML:

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

Điều này sẽ hiển thị một dấu gạch nối ở cuối dòng, nơi nó kết thúc, có thể hoặc không thể là những gì bạn muốn.

Lưu ý Safari dường như bao bọc chuỗi dài trong một <textarea>dù sao, không giống như Firefox.


Wow, thậm chí không biết về điều đó. Khéo léo!
Daniel Schaffer

Tôi cũng không biết về điều đó. Đôi gọn gàng!
Karl

11

Sử dụng phương pháp CSS để buộc quấn một chuỗi không có khoảng trắng. Ba phương pháp:

1) Sử dụng thuộc tính khoảng trắng CSS. Để bao quát sự không nhất quán của trình duyệt, bạn phải khai báo nó theo nhiều cách. Vì vậy, chỉ cần đặt chuỗi looooong của bạn vào một số phần tử mức khối (ví dụ: div, pre, p) và cung cấp cho phần tử đó css sau:

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) sử dụng mixin quấn lực từ La bàn .

3) Tôi cũng chỉ xem xét điều này và tôi nghĩ cũng có thể hoạt động (nhưng tôi cần kiểm tra hỗ trợ trình duyệt hoàn toàn hơn):

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

Tham khảo: nội dung gói


Có, số 3 ở đó hoạt động trong tất cả các trình duyệt hiện đại và thậm chí cả IE6 + cũ hơn.
Graeck

1
# 3 chỉ hoạt động nếu có cơ hội để phá vỡ bằng lời nói. Chuỗi quá dài không bị đứt (đã thử nghiệm trên Chrome 52.0.2743.82).
sụp đổ

8

Cách của tôi để đi (khi không có cách nào phù hợp để chèn ký tự đặc biệt) qua CSS:

-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;

Như được tìm thấy ở đây: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-USE-css/ với một số nghiên cứu bổ sung được tìm thấy ở đó.


5

Để word-wrap:break-word;làm việc cho tôi, tôi phải đảm bảo rằng nó displayđược đặt thành blockvà chiều rộng được đặt trên phần tử. Trong Safari, nó phải có một pthẻ và widthphải được đặt vào ex.


3

Nếu bạn đang sử dụng PHP thì hàm wordwrap hoạt động tốt cho việc này: http://php.net/manual/en/feft.wordwrap.php

Giải pháp CSS word-wrap: break-word; dường như không nhất quán trên tất cả các trình duyệt.

Các ngôn ngữ phía máy chủ khác có chức năng tương tự - hoặc có thể được xây dựng bằng tay.

Đây là cách hàm wordwrap PHP hoạt động:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Điều này bao bọc chuỗi ở 50 ký tự bằng thẻ <br>. Tham số 'true' buộc chuỗi bị cắt.


Bạn có thể trộn giải pháp này với giải pháp của Remy để chèn khoảng trắng có độ rộng bằng không: wordwrap ($ longtext, 5, "& # 8203;", true);
MV.

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

3

Sử dụng <wbr>thẻ:

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

Tôi nghĩ rằng điều này tốt hơn so với việc sử dụng không gian &#8203;có độ rộng bằng không có thể gây ra vấn đề khi bạn sao chép văn bản.


2

Trong trường hợp bảng không có kích thước cố định, dòng dưới đây hoạt động với tôi:

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

1

chỉ cần thiết lập widthvà thêm floatlàm việc cho tôi :-)

width:100%;
float:left;

Đó là một câu trả lời đầy đủ và dễ dàng, tôi nghĩ rằng anh chàng đã đăng vấn đề này ban đầu nên sử dụng chiều rộng: 100%; với phao: trái; trên phần tử có chứa chuỗi đó và vấn đề của anh ta sẽ được giải quyết. Vậy thì tại sao câu trả lời này không liên quan?
TechBrush.Org

bởi vì anh chàng đã đăng vấn đề này không nghĩ rằng giải pháp của bạn đã hoạt động năm năm trước.
Pierre

2
Vâng, nhưng diễn đàn này không chỉ về anh chàng đó mà chỉ về diễn đàn này và những người khác gặp phải vấn đề tương tự như tôi ngày nay cũng có thể có lợi ích tương tự.
TechBrush.Org
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.