วิธีการบังคับให้แบ่งบรรทัดในคำยาวใน DIV?


417

โอเคนี่ทำให้ฉันสับสนจริงๆ ฉันมีเนื้อหาภายใน div เช่นนี้:

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

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

</div>

อย่างไรก็ตามเนื้อหาล้น DIV (ตามที่คาดไว้) เนื่องจาก 'คำว่า' ยาวเกินไป

ฉันจะบังคับให้เบราว์เซอร์ 'หยุด' คำที่จำเป็นเพื่อให้พอดีกับเนื้อหาทั้งหมดภายในได้อย่างไร


ดูคำถามนี้: stackoverflow.com/questions/2046530/…
nickf

คำตอบ:


609

ใช้ word-wrap:break-word;

มันยังใช้งานได้ใน IE6 ซึ่งน่าประหลาดใจ


word-wrap: break-wordถูกแทนที่ด้วยoverflow-wrap: break-word;ซึ่งทำงานได้ในทุกเบราว์เซอร์ที่ทันสมัย IE ซึ่งเป็นเบราว์เซอร์ที่ตายแล้วจะพึ่งพาการไม่ยอมรับและไม่ได้มาตรฐานword-wrapตลอดไป

การใช้งานที่มีอยู่ในword-wrapปัจจุบันยังคงสามารถใช้งานได้เนื่องจากเป็นชื่อแทนสำหรับoverflow-wrapข้อมูลจำเพาะ


75
จริงๆแล้วการตัดคำเป็นสิ่งประดิษฐ์ IE ดังนั้นไม่แปลกใจที่มันทำงานใน IE :) ไม่มี
Savas Vedova

1
เพื่อให้ทำงานในตารางคุณอาจต้องใช้table-layout: fixed;กับตาราง
Serj Sagan

28
word-wrap: break-wordใช้งานไม่ได้สำหรับฉัน แต่word-break: break-wordเป็น @rahul แนะนำด้านล่างทำงาน
Yves

1
หมายเหตุ: วิธีนี้จะใช้ได้เฉพาะในกรณีที่คุณมอบให้ใน parent div ใน IE (ไม่ใช่การขยายภายในของ div)
sms

125

ฉันไม่แน่ใจเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์

word-break: break-all;

นอกจากนี้คุณสามารถใช้<wbr>แท็ก

<wbr>(ตัวแบ่งคำ) หมายถึง: "เบราว์เซอร์อาจแทรกตัวแบ่งบรรทัดที่นี่หากต้องการ" เบราว์เซอร์ไม่คิดว่าการแบ่งบรรทัดจะไม่มีอะไรเกิดขึ้น


23
ระวังการทำลายคำ: break-all; จะแยกคำที่อยู่ตรงกลางหากยังสามารถใส่อักขระใด ๆ ในบรรทัดด้วยคำอื่น ๆ ก่อนหน้าซึ่งอาจไม่ได้ผลลัพธ์ตามที่ต้องการขณะที่ตัดคำ: break-word; ย้ายคำไปยังบรรทัดใหม่และแบ่งคำเฉพาะถ้ามันยาวเกินไปที่จะพอดีกับมันเป็นบรรทัดของตัวเองในภาชนะ ตัวอย่าง: jsfiddle.net/4AKhn/1
alexteg

ทุกอย่างทำลายทุกอย่าง โอเคที่จะใช้กับเฉพาะชั้นที่มี URL ที่ยาว ฯลฯ เพียง แต่ไม่ได้มีร่างกายหรือ P
Upendra

นี่เป็นที่ยอมรับได้อย่างสมบูรณ์แบบ (และต้องการ) เมื่อคุณพยายามแสดงบางสิ่งเช่นคำขอ URI ในเซลล์ตารางบันทึกและต้องการหยุดแบ่งทั้งตารางด้วยเซลล์ขนาดยักษ์ ต้องการให้มีการแบ่งคำว่า 'word';) ในขณะที่คำตอบที่ได้รับการยอมรับนั้นไม่ได้เป็นการหมอบในเรื่องนี้
IncredibleHat

@ Skelly1983 ไม่มีสิ่งเช่น IE12
TylerH

@TylerH ฉันรู้เรื่องนี้ขอบคุณที่ชี้ให้ฉันหลังจาก 3 ปี นี่คือรายการในแผนภูมิสนับสนุนเบราว์เซอร์ของ w3schools สำหรับแท็ก wbr ซึ่งแสดงรายการการสนับสนุนเป็น "Internet Explorer / Edge" และมีหมายเลขรุ่นแสดงเป็น 12.0 ซึ่งจริงๆแล้วเป็นรุ่นแรกของ Edge
Skelly1983

98

นี่สามารถเพิ่มลงในคำตอบที่ยอมรับได้สำหรับโซลูชัน 'ข้ามเบราว์เซอร์'

แหล่งที่มา:

.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;
}

ฉันได้รับใน Chrome / Opera และ Safari แต่ยังไม่ได้รับใน Firefox และ IE ด้วยสิ่งนี้ฉันแก้ไข Firefox แต่ IE ยังคงอยู่เหนือคอนเทนเนอร์ (ฉันมีชื่อไฟล์ยาวของอักขระที่เป็นตัวอักษรและตัวเลข)
Kamafeather

1
สวัสดี Kamafeather ฉันไม่แน่ใจ แต่ถ้าชื่อยาวปกติคุณกำลังพยายามที่จะทำลายบริบททั้งหมด (เบราว์เซอร์รหัส html-css) อาจช่วยคุณได้มากขึ้น บางทีคุณสามารถสร้างคำถามอื่นกับสถานการณ์ของคุณ
Milche Patern

โปรดทราบว่าสิ่งนี้จะแบ่งคำในสถานที่ที่ไม่เกี่ยวกับไวยากรณ์

@ user1322720 สถานที่ "ungrammatical" คืออะไร
TylerH

31

ฉันเป็นเพียง Googling ปัญหาเดียวกันและโพสต์ทางออกสุดท้ายของฉันที่นี่ มันเกี่ยวข้องกับคำถามนี้ด้วย

คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วย div โดยกำหนดสไตล์word-wrap: break-word(และคุณอาจต้องกำหนดความกว้างของมันด้วย)

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

อย่างไรก็ตามสำหรับตารางtable-layout: fixedคุณยังจำเป็นต้องใช้: ซึ่งหมายความว่าความกว้างของคอลัมน์นั้นไม่ใช่ของไหลอีกต่อไป แต่ถูกกำหนดตามความกว้างของคอลัมน์ในแถวแรกเท่านั้น (หรือผ่านความกว้างที่ระบุ) อ่านเพิ่มเติมได้ที่นี่

รหัสตัวอย่าง:

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
ขอบคุณสำหรับวิธีแก้ปัญหาตาราง;) อย่างไรก็ตามฉันไม่ค่อยเข้าใจว่าทำไม break-word จึงไม่สามารถใช้กับเลย์เอาต์อัตโนมัติได้ ข้อเสนอแนะใด ๆ
ondObno

@ondObno ใช่ฉันไม่แน่ใจเกี่ยวกับเหตุผลทางเทคนิค แต่เบราว์เซอร์หลายตัวดูเหมือนจะทำงานแบบนี้ อาจเป็นเพราะคำที่ยาวมาก ๆ ยุ่งกับการคำนวณทั้งหมดที่จำเป็นในการกำหนดความกว้างของแต่ละคอลัมน์
Simon East

การตั้งค่าwidth: 100%;เป็นวิธีเดียวที่จะทำให้ฉันใช้งานได้บน FF และโครเมี่ยม!
Putzi San

27

&#8203;เป็นเอนทิตี HTML สำหรับอักขระ unicode ที่เรียกว่า space-width space (ZWSP) ซึ่งเป็นตัวอักษรที่มองไม่เห็นซึ่งระบุโอกาสในการแบ่งบรรทัด ในทำนองเดียวกันจุดประสงค์ของยัติภังค์คือการระบุโอกาสในการแบ่งบรรทัดภายในขอบเขตของคำ


1
เคล็ดลับดีมาก! เพื่อเสริม: &#8203;มีลำดับความสำคัญต่ำกว่าพื้นที่สีขาว (เช่นถ้ามีใกล้เคียงเส้นจะแตกในพื้นที่สีขาวแทน)
CPHPython

ดูเหมือนว่าจะ<wbr/>เทียบเท่ายูนิโค้ดที่ฉันกำลังมองหา
Xenos

20

พบว่าการใช้ดังต่อไปนี้ทำงานผ่านเบราว์เซอร์ที่สำคัญมากที่สุด (Chrome, IE, Safari iOS / OSX) ยกเว้น Firefox (v50.0.2) เมื่อใช้ flexbox width: autoและอาศัย

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

หมายเหตุ: คุณอาจต้องเพิ่มคำนำหน้าผู้ขายเบราว์เซอร์หากคุณไม่ได้ใช้โปรแกรมแก้ไขอัตโนมัติ

สิ่งที่ต้องระวังก็คือข้อความที่ใช้&nbsp;สำหรับระยะห่างอาจทำให้เกิดการแบ่งบรรทัดกลางคำ


5
นี่คือสิ่งที่ฉันต้องการ โซลูชันอื่น ๆ ใช้ไม่ได้กับความกว้าง: 100% สิ่งหนึ่งที่ควรทราบ: word-break: break-word; ควรจะหยุดคำ: ทำลายทั้งหมด
jscul




3

เบราว์เซอร์ Whitespace ถูกสงวนไว้ ข้อความจะถูกห่อเมื่อจำเป็นและในบรรทัดใหม่

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

การสาธิต

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

จากMDN :

overflow-wrapระบุคุณสมบัติ CSS หรือไม่ว่าเบราว์เซอร์ควรแทรกตัวแบ่งบรรทัดภายในคำที่จะป้องกันไม่ให้ข้อความจากล้นกล่องเนื้อหา

ในทางตรงกันข้ามกับword-break, overflow-wrapเพียงจะสร้างหยุดพักถ้าคำทั้งหมดไม่สามารถวางบนเส้นของตัวเองโดยไม่ต้องล้น

ดังนั้นคุณสามารถใช้:

overflow-wrap: break-word;

ฉันสามารถใช้ ?


2

ก่อนอื่นคุณควรระบุความกว้างขององค์ประกอบของคุณ เช่น:

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

ดังนั้นเมื่อข้อความมาถึงความกว้างองค์ประกอบข้อความจะถูกแยกย่อยเป็นบรรทัด


2

ดังที่ได้กล่าวไว้ในการตอบกลับของ @ davidcondrey ไม่ใช่แค่ ZWSP เท่านั้น แต่ยังรวมถึง SHY &#173; &shy;ที่สามารถใช้ในคำที่สร้างขึ้นมานาน (คิดว่าเยอรมันหรือดัตช์) ที่ต้องแตกสลายในจุดที่คุณต้องการ มองไม่เห็น แต่จะให้ยัติภังค์ในช่วงเวลาที่ต้องการดังนั้นจึงรักษาทั้งคำที่เชื่อมต่อและบรรทัดไว้จนเต็ม

ด้วยวิธีนี้คำว่าluchthavenpolitieagentอาจถูกบันทึกไว้lucht&shy;haven&shy;politie&shy;agentซึ่งให้ส่วนที่ยาวกว่าพยางค์ของคำ
แต่ผมไม่เคยอ่านอะไรอย่างเป็นทางการเกี่ยวกับมันยัติภังค์อ่อนเหล่านี้จัดการเพื่อให้ได้ความสำคัญสูงในเบราว์เซอร์กว่ายัติภังค์อย่างเป็นทางการในคำเดียวสร้าง ( ถ้าพวกเขามีบางส่วนขยายสำหรับมันเลย)
ในทางปฏิบัติเบราว์เซอร์ไม่สามารถทำลายคำที่ยาวและสร้างขึ้นเองได้ บนหน้าจอขนาดเล็กส่งผลให้เกิดบรรทัดใหม่สำหรับมันหรือในบางกรณีแม้แต่บรรทัดคำเดียว (เช่นเมื่อสองคำที่สร้างขึ้นติดตาม)

FYI: เป็นภาษาดัตช์สำหรับเจ้าหน้าที่สนามบิน


0

word-break: ปกติดูเหมือนว่าจะใช้งานได้ดีกว่า word-break: break-word เนื่องจากตัวแบ่งคำเริ่มต้นเช่น EN

word-break: normal


-4

ลองใช้ตามสไตล์ของเรา

white-space: normal;

1
การทำซ้ำคำตอบของคำถามหลาย ๆ คำถามนั้นส่วนใหญ่แล้วจะไม่ได้ผล ในกรณีนี้ดูเหมือนว่าจะเป็นคำตอบที่ไม่ถูกต้องสำหรับทั้งสองคำถาม normalเป็นค่าเริ่มต้นwhite-spaceค่า ฉันคิดว่าการเพิ่มมันจะไม่มีผลกับตัวอย่างในคำถาม โปรดแก้ไขให้ฉันด้วยถ้าฉันเข้าใจผิด
Jeremy Banks

ขึ้นอยู่กับการแทนที่ของ CSS ในกรณีของฉันฉันต้องประกาศใหม่ใน "style" ในองค์ประกอบ JSF ของฉันเพื่อแทนที่สไตล์ CSS เริ่มต้นที่ไม่ใช่ "white-space: normal;"
Benjamin Fuentes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.