ฉันจะตัดข้อความโดยไม่มีช่องว่างภายใน <td> ได้อย่างไร


89

ฉันเคยใช้:

word-break:break-all;
table-layout:fixed;

และข้อความจะรวมอยู่ใน Chrome แต่ไม่ใช่ Firefox

อัปเดต: ฉันตัดสินใจที่จะเปลี่ยนการออกแบบดังนั้นจึงไม่จำเป็นต้องห่อ การพยายามจัดการแก้ไข CSS / แฮ็กนั้นพิสูจน์แล้วว่าน่าผิดหวังและใช้เวลานานเกินไป

คำตอบ:


202

ลองดูสิฉันคิดว่ามันจะใช้ได้กับบางอย่างเช่น "AAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGG"

AARRRRRRRRRRRRRRRRRRRR
RRGGGGGGGGGGGGGGGGGGGG
G

ฉันได้นำตัวอย่างของฉันมาจากเว็บไซต์สองแห่งบน Google ฉันได้ทดสอบสิ่งนี้บน ff 5.0, IE 8.0 และ Chrome 10

.wrapword {
    white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
    white-space: -webkit-pre-wrap;          /* Chrome & Safari */ 
    white-space: -pre-wrap;                 /* Opera 4-6 */
    white-space: -o-pre-wrap;               /* Opera 7 */
    white-space: pre-wrap;                  /* CSS3 */
    word-wrap: break-word;                  /* Internet Explorer 5.5+ */
    word-break: break-all;
    white-space: normal;
}
<table style="table-layout:fixed; width:400px">
    <tr>
        <td class="wrapword">
        </td>
    </tr>
</table>

10
อุ๊ย !! สิ่งนี้จะบังคับให้ทำลายคำใด ๆ ในจุดใดก็ได้แม้ว่าจะไม่จำเป็นก็ตาม มีวิธีแก้ปัญหาเพื่อให้มีคำแบ่งนี้เฉพาะเมื่อจำเป็นต้องไม่เกินความกว้างของคอนเทนเนอร์หรือไม่ นั่นคือเพื่อให้มันทำงานได้ตามที่ "word-wrap: break-wird" ควรจะทำงานตั้งแต่แรกถ้ามันไม่ใช่รถ
matteo

1
@matteo คำตอบนี้ทำงานได้ดีกว่าสำหรับฉันด้วยเหตุผลนั้น: stackoverflow.com/a/18706058/234132
dochoffiday

2
ปัญหา Force ทำลายสามารถแก้ไขได้ด้วยword-break: break-word;
user1721713

1
ฉันลงทะเบียนกับ stack overflow เพียงเพื่อชอบสิ่งนี้
falky

24

ใช้ word-wrap: break-word;CSS3 ทำงานในเบราว์เซอร์ที่ใช้ WebKit (Safari, Chrome) เช่นกัน

อัปเดต : ฉันลืมไปว่าองค์ประกอบที่เป็นปัญหาต้องอยู่ในตำแหน่งโดยนัยหรืออย่างชัดเจนเป็นองค์ประกอบคงที่หรือแสดงเป็นองค์ประกอบบล็อก สำหรับเซลล์ตาราง ( td) display: inline-block;การใช้งาน


1
ฉันลองทั้งสองอย่าง (แยกกัน) แต่น่าเสียดายที่พวกเขาทำให้การจัดรูปแบบตารางค่อนข้างแย่
FunLovinCoder

ของฉันไม่ดีใช้display: inline-block;.
BalusC

13

นี่คือเวอร์ชันขั้นสูงของสิ่งที่ OP ถาม

บางครั้งสิ่งที่เกิดขึ้นคือลูกค้าของเราต้องการให้เราให้ '-' หลังจากแบ่งคำจนจบบรรทัด

ชอบ

AAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBB

แตกไป

AAAAAAAAAAAAAAAAAAAAAAA-
BBBBBBBBB

ดังนั้นจึงมีคุณสมบัติ CSS ใหม่หากได้รับการสนับสนุนโดยปกติจะได้รับการสนับสนุนในเบราว์เซอร์ล่าสุด

.dont-break-out {

  /* These are technically the same, but use both */
  overflow-wrap: break-word;
  word-wrap: break-word;

  -ms-word-break: break-all;
  /* This is the dangerous one in WebKit, as it breaks things wherever */
  word-break: break-all;
  /* Instead use this non-standard one: */
  word-break: break-word;

  /* Adds a hyphen where the word breaks, if supported (No Blink) */
  -ms-hyphens: auto;
  -moz-hyphens: auto;
  -webkit-hyphens: auto;
  hyphens: auto;

}

ฉันใช้อันนี้

ฉันหวังว่าใครบางคนจะมีความต้องการเช่นนี้


11

สำหรับเค้าโครงตารางอัตโนมัติให้ลองจัดรูปแบบ td ที่เกี่ยวข้องโดยรวมแอตทริบิวต์ max-width และ word-wrap

เช่น: <td style="max-width:175px; word-wrap:break-word;"> ... </td>

ทดสอบใน Firefox 32, Chrome 37 และ IE11


ผมไม่เข้าใจว่าทำไม แต่มันเพียงทำงานร่วมกับและไม่ได้อยู่กับmax-width widthอย่างไรก็ตามทางออกที่ดีที่สุดสำหรับฉันเพราะมันไม่ได้แยกคำพูดออกมาตามอำเภอใจ
Raziel

4

คุณสามารถฉีดช่องว่างความกว้างเป็นศูนย์ (& # 8203;) ด้วยตนเองเพื่อสร้างจุดพัก


1
นอกจากนี้ยังมีแท็ก HTML ที่ไม่ได้มาตรฐาน<wbr>[สำหรับ "ตัวแบ่งคำ"] นี่คือการสนับสนุนเบราว์เซอร์สำหรับสิ่งนี้และ&#8203;วิธีแก้ปัญหา: quirksmode.org/oddsandends/wbr.html
kingjeffrey


0

ฉันคิดว่านี่เป็นปัญหาที่ยาวนานใน Firefox ซึ่งย้อนกลับไปที่ Mozilla และ Netscape ฉันจะพนันได้เลยว่าคุณกำลังมีปัญหากับการแสดง URL แบบยาว ฉันคิดว่ามันเป็นปัญหากับเอนจิ้นการเรนเดอร์มากกว่าสิ่งที่คุณสามารถแก้ไขได้ด้วย CSS โดยไม่มีแฮ็กที่น่าเกลียด

มีเหตุผลที่จะเปลี่ยนการออกแบบ

สิ่งนี้ดูมีความหวัง: http://hacks.mozilla.org/2009/06/word-wrap/


0

ฉันใช้ Angular สำหรับโปรเจ็กต์ของฉันและจัดการเพื่อแก้ปัญหานี้ด้วยตัวกรองง่ายๆ:

แม่แบบ:

<td>{{string | wordBreak}}</td>

กรอง:

app.filter('wordBreak', function() {
    return function(string) {
        return string.replace(/(.{1})/g, '$1​');
    }
})

คุณมองไม่เห็น แต่หลังจาก$1มีช่องว่างที่มองไม่เห็น (ขอบคุณ @kingjeffrey สำหรับเคล็ดลับ) ซึ่งเปิดใช้งานการแบ่งคำสำหรับเซลล์ตาราง


-1

วิธีหนึ่งที่แฮ็กเล็กน้อยคือการประมวลผลข้อความเพื่อเพิ่มช่องว่างระหว่างตัวอักษรแต่ละตัว แทนที่ช่องว่างด้วย&nbsp;แล้วใช้แอตทริบิวต์ css ระยะห่างตัวอักษรเพื่อลดช่องว่าง

ฉันรู้ว่ามันเป็นการแฮ็ก ... แต่ถ้าไม่มีอะไรใช้งานได้ก็ควรตัดโดยไม่มีปัญหา


2
มัน hacky ดังนั้นกระทบกับการจัดทำดัชนีที่ถูกต้องและอย่างหนักเพื่อที่จะใช้มันไม่ควรจะเป็นคำตอบที่ทุกคน :-)
แคปซูล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.