Làm thế nào để buộc ngắt dòng trong một từ dài trong DIV?


417

Được rồi, điều này thực sự làm tôi bối rối. Tôi có một số nội dung bên trong một div như vậy:

<div style="background-color: green; width: 200px; height: 300px;">

Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.

</div>

Tuy nhiên, nội dung tràn qua DIV (như mong đợi) vì 'từ' quá dài.

Làm cách nào tôi có thể buộc trình duyệt 'ngắt' từ khi cần thiết để phù hợp với tất cả nội dung bên trong?


Câu trả lời:


609

Sử dụng word-wrap:break-word;

Nó thậm chí hoạt động trong IE6, đó là một bất ngờ thú vị.


word-wrap: break-wordđã được thay thế bằng overflow-wrap: break-word;hoạt động trong mọi trình duyệt hiện đại. IE, là một trình duyệt đã chết, sẽ mãi mãi dựa vào sự không dùng nữa và không chuẩn word-wrap.

Việc sử dụng hiện tại word-wrapngày nay vẫn hoạt động vì nó là bí danh cho overflow-wrapmỗi đặc điểm kỹ thuật.


75
Trên thực tế, word-quấn là một phát minh IE. Vì vậy, không có gì ngạc nhiên khi nó hoạt động trong IE :)
Savas Vedova

1
Để làm việc này trong một bảng, bạn có thể cần phải áp dụng table-layout: fixed;bảng này
Serj Sagan

28
word-wrap: break-wordkhông làm việc cho tôi nhưng word-break: break-wordnhư @rahul đề xuất dưới đây đã làm việc.
Yves

1
Lưu ý: Điều này sẽ chỉ hoạt động nếu bạn cung cấp cho nó trong div cha trong IE (Không cho khoảng bên trong bên trong div).
sms

125

Tôi không chắc về khả năng tương thích của trình duyệt

word-break: break-all;

Ngoài ra, bạn có thể sử dụng <wbr>thẻ

<wbr>(ngắt từ) có nghĩa là: "Trình duyệt có thể chèn ngắt dòng ở đây, nếu muốn." Nó trình duyệt không nghĩ rằng ngắt dòng cần thiết không có gì xảy ra.


23
Hãy nhận biết từ đó: break-all; sẽ ngắt các từ ở giữa nếu nó vẫn có thể khớp với bất kỳ ký tự nào trên một dòng với các từ khác trước đó, điều này có thể không mang lại kết quả mong muốn, trong khi word-quấn: break-word; di chuyển các từ sang một dòng mới và chỉ ngắt từ nếu quá dài để phù hợp với dòng của chính nó trong thùng chứa. Ví dụ: jsfiddle.net/4AKhn/1
alexteg

phá vỡ tất cả phá vỡ mọi thứ. Được sử dụng với lớp cụ thể chỉ có URL dài, v.v., nhưng không phải với BODY hoặc P
Upendra

Điều này hoàn toàn có thể chấp nhận được (và mong muốn) khi bạn đang cố hiển thị một cái gì đó như URI yêu cầu trong một ô của bảng nhật ký và cần nó dừng phá vỡ toàn bộ bảng bằng một ô dài khổng lồ. Phá vỡ ở giữa một 'từ' là muốn;) Trong khi câu trả lời được chấp nhận không làm ngồi xổm trong vấn đề này.
IncredibleHat

@ Skelly1983 không có thứ gì như IE12
TylerH

@TylerH Tôi biết điều này, cảm ơn vì đã chỉ ra điều này cho tôi sau 3 năm. Điều này được liệt kê trên biểu đồ hỗ trợ trình duyệt w3schools cho thẻ wbr, liệt kê hỗ trợ là "Internet Explorer / Edge" và có số phiên bản được liệt kê là 12.0, trên thực tế là phiên bản đầu tiên của Edge.
Skelly1983

98

Điều này có thể được thêm vào câu trả lời được chấp nhận cho giải pháp 'trình duyệt chéo'.

Nguồn:

.your_element{
    -ms-word-break: break-all;
    word-break: break-all;

 /* Non standard for webkit */
     word-break: break-word;

    -webkit-hyphens: auto;
       -moz-hyphens: auto;
        -ms-hyphens: auto;
            hyphens: auto;
}

Tôi đã có nó trên Chrome / Opera và Safari, nhưng vẫn không có nó trên Firefox và IE. Với điều này, tôi đã giải quyết được Firefox, nhưng IE vẫn vượt qua vùng chứa (Tôi có một tên tệp dài chỉ các ký tự chữ và số).
Kamafeather

1
Xin chào Kamafeather, tôi không chắc chắn, nhưng nếu tên bạn đang cố gắng phá vỡ, toàn bộ bối cảnh (trình duyệt, mã html-css) có thể hữu ích để giúp bạn nhiều hơn nữa. Có lẽ, bạn có thể tạo ra một câu hỏi khác với tình huống của bạn.
Milche P Parent

Xin lưu ý rằng điều này phá vỡ các từ ở những nơi phi ngôn ngữ.

@ user1322720 một địa điểm "không theo quy tắc" là gì?
TylerH

31

Tôi chỉ giải quyết vấn đề tương tự và đăng giải pháp cuối cùng của mình TẠI ĐÂY . Nó cũng liên quan đến câu hỏi này.

Bạn có thể thực hiện điều này một cách dễ dàng với div bằng cách tạo kiểu cho nó word-wrap: break-word(và bạn cũng có thể cần phải đặt chiều rộng của nó).

div {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
    width: 100%;
}

Tuy nhiên, đối với các bảng , bạn cũng cần áp dụng : table-layout: fixed. Điều này có nghĩa là chiều rộng của cột không còn lỏng, nhưng được xác định dựa trên chiều rộng của các cột trong hàng đầu tiên (hoặc thông qua chiều rộng được chỉ định). Đọc thêm tại đây .

Mã mẫu:

table {
    table-layout: fixed;
    width: 100%;
}

table td {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
}

1
Cảm ơn bạn về giải pháp bảng;) Tuy nhiên, tôi không hiểu tại sao không thể sử dụng từ ngắt với bố cục tự động. Bất cứ đề nghị nào?
ondObno

@ondObno Vâng Tôi không chắc về lý do kỹ thuật, nhưng một số trình duyệt dường như hành xử theo cách này. Có lẽ đó là vì các từ siêu dài lộn xộn với tất cả các tính toán cần thiết để xác định độ rộng của mỗi cột.
Simon East

Cài đặt width: 100%;là cách duy nhất để làm việc này cho tôi trên FF và chrome!
Putzi San

27

&#8203;là thực thể HTML cho một ký tự unicode được gọi là không gian có độ rộng bằng không (ZWSP), là một ký tự vô hình chỉ định cơ hội ngắt dòng. Tương tự như vậy, mục đích của dấu gạch nối là chỉ định cơ hội ngắt dòng trong phạm vi từ.


1
Mẹo rất hay! Chỉ để bổ sung: &#8203;có mức độ ưu tiên thấp hơn khoảng trắng (nghĩa là nếu có một khoảng cách gần đó, dòng sẽ bị ngắt trong khoảng trắng thay thế).
CPHPython

Có vẻ là <wbr/>tương đương unicode mà tôi đang tìm kiếm
Xenos

20

Nhận thấy rằng việc sử dụng các công cụ sau đã hoạt động trên hầu hết các trình duyệt chính (Chrome, IE, Safari iOS / OSX) ngoại trừ Firefox (v50.0.2) khi sử dụng flexbox và dựa vào width: auto.

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

Lưu ý: bạn có thể cần thêm tiền tố của nhà cung cấp trình duyệt nếu bạn không sử dụng trình tự động sửa lỗi.

Một điều khác cần chú ý là văn bản sử dụng &nbsp;cho khoảng cách có thể gây ra ngắt dòng giữa dòng.


5
Đây chính xác là những gì tôi cần. Các giải pháp khác không hoạt động với chiều rộng: 100%. Một điều cần lưu ý: word-break: break-word; nên là word-break: break-all;
17:30

7

CSS word-wrap:break-word; , đã được thử nghiệm trong FireFox 3.6.3



5

Hủy bỏ white-space: nowrap, nếu có bất kỳ.

Triển khai thực hiện:

white-space: inherit;
word-break: break-word;

3

Khoảng trắng được bảo tồn bởi trình duyệt. Văn bản sẽ bao bọc khi cần thiết và ngắt dòng

.pre-wrap {
    white-space: pre-wrap;
    word-break: break-word;
}

BẢN GIỚI THIỆU

td {
   word-break: break-word;
   white-space: pre-wrap;
   -moz-white-space: pre-wrap;      
}

table {
    width: 100px;
    border: 1px solid black;
    display: block;
}
<table>
<tr><th>list</th>
<td>
1.longtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtext
2.breaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreakline
</td>
</tr>
</table>


2

Từ MDN :

Các overflow-wrap quy định cụ thể thuộc tính CSS hay không duyệt nên chèn ngắt dòng trong lời nói để ngăn chặn văn bản từ tràn hộp nội dung của nó.

Ngược lại word-break, overflow-wrapsẽ chỉ tạo ra một ngắt nếu toàn bộ một từ không thể được đặt trên dòng riêng của nó mà không tràn ra.

Vì vậy, bạn có thể sử dụng:

overflow-wrap: break-word;

Tôi có thể sử dụng ?


2

Trước tiên, bạn nên xác định chiều rộng của yếu tố của bạn. Ví dụ:

#sampleDiv{
  width: 80%;
  word-wrap:break-word;
}
<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

để khi văn bản đạt đến chiều rộng phần tử, nó sẽ được chia thành các dòng.


2

Như đã đề cập trong câu trả lời của @ davidcondrey, không chỉ có ZWSP, mà còn cả SHY &#173; &shy;có thể được sử dụng bằng những từ được xây dựng rất dài (nghĩ tiếng Đức hoặc tiếng Hà Lan) phải bị phá vỡ tại chỗ bạn muốn. Vô hình, nhưng nó cho một dấu gạch nối thời điểm cần thiết, do đó giữ cho cả từ được kết nối và dòng được điền đến mức tối đa.

Bằng cách đó, từ luchthavenpolitieagent có thể được ghi nhận vì lucht&shy;haven&shy;politie&shy;agentnó cho các phần dài hơn các âm tiết của từ này.
Mặc dù tôi chưa bao giờ đọc bất cứ điều gì chính thức về nó, những dấu gạch nối mềm này có thể được ưu tiên cao hơn trong trình duyệt so với các dấu gạch nối chính thức trong các từ đơn của cấu trúc ( nếu chúng có một số phần mở rộng cho nó).
Trong thực tế, không có trình duyệt nào có khả năng tự phá vỡ một từ dài, được xây dựng như vậy; trên các màn hình nhỏ hơn dẫn đến một dòng mới cho nó hoặc trong một số trường hợp thậm chí là một dòng một từ (như khi hai trong số các từ được xây dựng theo dõi).

FYI: đó là tiếng Hà Lan cho cảnh sát sân bay


0

word-break: bình thường có vẻ tốt hơn để sử dụng hơn word-break: break-word vì break-word break ban đầu như EN

word-break: normal

-3

Làm cái này:

<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

#sampleDiv{
   overflow-wrap: break-word;
}

-4

hãy thử nó theo phong cách của chúng tôi

white-space: normal;

1
Trong hầu hết các trường hợp, các câu trả lời trùng lặp trên nhiều câu hỏi được đưa ra . Trong trường hợp này, nó dường như là một câu trả lời không chính xác cho cả hai câu hỏi. normalwhite-spacegiá trị mặc định . Tôi nghĩ rằng việc thêm nó sẽ không có tác dụng đối với ví dụ trong câu hỏi. Xin hãy sửa tôi nếu tôi nhầm.
Jeremy Banks

Nó phụ thuộc vào ghi đè được tạo bởi CSS. Trong trường hợp của tôi, tôi đã phải xác định lại nó theo "style" trong thành phần JSF của mình để ghi đè lên kiểu CSS mặc định không phải là "khoảng trắng: bình thường;"
Benjamin Fuentes
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.