ฉันจะบังคับให้สตริงยาวโดยไม่ต้องใส่ค่าว่างได้อย่างไร


194

ฉันมีสายยาว (ลำดับดีเอ็นเอ) ไม่มีอักขระช่องว่างใด ๆ

ตัวอย่างเช่น:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

สิ่งที่จะเป็นตัวเลือก CSS เพื่อบังคับให้ข้อความนี้จะถูกห่อในhtml:textareaหรือในxul:textbox?


17
กระแทกแดกดันสตริงไม่ทำลายในกองมากเกินทั้ง ...
splattne

คำตอบ:


272

สำหรับองค์ประกอบบล็อก:

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

สำหรับองค์ประกอบแบบอินไลน์:

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


1
รองรับเฉพาะใน IE, Safari และ FF3.1 (อัลฟ่า)
Adam Bellaire

1
ใช้งานได้กับเบราว์เซอร์คลื่นลูกใหม่เท่านั้น - ดูcaniuse.com/#search=word-break
Michal Bernhard

9
@Michael: คำตอบใช้กฎ "word-wrap" ไม่ใช่ "word-break" อย่างใดอย่างหนึ่ง รองรับอดีตที่ใช้ในเกือบทุกเบราว์เซอร์ที่ใช้ในปัจจุบัน เมื่อมีการระบุ "การสนับสนุนบางส่วน" ปรากฏว่าค่า "คำค้น" สำหรับกฎ "คำห่อคำ" ยังคงทำงานได้
Robusto

2
สถานที่ให้บริการได้เปลี่ยนชื่อเป็นoverflow-wrapตั้งแต่ในมาตรฐาน แต่wrod-wrapมีการใช้งานอย่างกว้างขวาง
Ciro Santilli 郝海东冠状病六四事件法轮功

1
ใช้ได้กับ "display: table-cell" ซึ่งเป็นสิ่งจำเป็นในกรณีของฉันด้วย
CésarLeón

107

วางช่องว่างที่มีความกว้างเป็นศูนย์ที่จุดที่คุณต้องการให้มีการหยุดพัก พื้นที่กว้างเป็นศูนย์อยู่&#8203;ในรูปแบบ HTML ตัวอย่างเช่น:

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


4
คำแนะนำที่ดีฉันได้เรียนรู้สิ่งใหม่วันนี้ขอบคุณ!
Matteo Conta

2
ขอบคุณสำหรับการแก้ปัญหานี้ มีเวลายากที่จะได้รับสิ่งนี้เพื่อทำงานในตารางและโซลูชันนี้เป็นสิ่งเดียวที่ฉันพบว่าทำงานได้ใน IE, Firefox และ Chrome
Farinha

1
+1 นี้ใช้งานได้ดีขึ้นเนื่องจากครอบคลุมหลายกรณีมากขึ้นแม้ว่าคำถามจะเป็นกรณีเฉพาะ
ปรัชญานิยม

2
คุณสามารถใช้<wbr>แท็กซึ่งมีจุดประสงค์เดียวกันในการให้โอกาสในการแบ่งบรรทัดเพิ่มเติม
justisb

7
ดูว่าคุณทำสิ่งนี้ในสิ่งที่อาจถูกคัดลอกและวางหรือไม่
alex

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 นี่เพราะมันพูดถึงคำว่า break-break ซึ่งทำงานให้ฉันใน IE9
Nick Benedict

3
word-break: break-all;เป็นคนเดียวที่ทำงานใน Android WebView สำหรับฉัน
สแตน

ขอบคุณสำหรับ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 ของฉัน


สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันต้องย้ายคุณสมบัติ "ห่อคำ" ลงใน div และลบคุณสมบัติ "ล้น" ด้วยการเปลี่ยนแปลงนี้ใช้งานได้
danigonlinea

12

ฉันไม่คิดว่าคุณสามารถทำได้ด้วย CSS แต่ที่ 'ความยาวของคำ' ตามปกติในสตริงให้แทรกเครื่องหมายยัติภังค์ HTML:

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

สิ่งนี้จะแสดงยัติภังค์ที่ท้ายบรรทัดซึ่งมันจะล้อมรอบซึ่งอาจเป็นหรืออาจไม่ใช่สิ่งที่คุณต้องการ

หมายเหตุ Safari ดูเหมือนจะตัดสตริงที่มีความยาวอยู่<textarea>แล้วไม่เหมือนกับ Firefox


ว้าวไม่รู้ด้วยซ้ำ เรียบร้อย!
Daniel Schaffer

ฉันก็ไม่รู้เหมือนกัน เรียบร้อย!
Karl

11

ใช้วิธี CSS เพื่อบังคับให้ตัดสตริงที่ไม่มี white-space สามวิธี:

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) ใช้mixin แรงห่อจากเข็มทิศแรงห่อจากเข็มทิศ

3) ฉันเพิ่งดูสิ่งนี้เช่นกันและฉันคิดว่าอาจใช้งานได้ (แต่ฉันต้องทดสอบการสนับสนุนเบราว์เซอร์อย่างสมบูรณ์ยิ่งขึ้น):

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

การอ้างอิง: เนื้อหาการห่อ


ใช่ # 3 นั้นใช้ได้ในเบราว์เซอร์ที่ทันสมัยและแม้แต่ IE6 ที่เก่ากว่า
Graeck

1
# 3 ใช้งานได้หากมีโอกาสที่จะทำลายโดยคำพูด สตริงที่ยาวเกินไปไม่หยุด (ทดสอบกับ Chrome 52.0.2743.82)
collapsar

8

วิธีการของฉันไป (เมื่อไม่มีวิธีที่เหมาะสมในการแทรกตัวอักษรพิเศษ) ผ่าน 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;

พบได้ที่นี่: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ พร้อมกับการวิจัยเพิ่มเติมที่จะพบได้ที่นี่


5

สำหรับword-wrap:break-word;การทำงานกับฉันฉันต้องตรวจสอบให้แน่ใจว่าdisplayได้ตั้งค่าไว้blockแล้ว ใน Safari มันก็จะมีpแท็กและจะต้องมีการตั้งอยู่ในwidthex


3

หากคุณใช้งาน PHP ฟังก์ชั่น wordwrap จะทำงานได้ดีกับ: http://php.net/manual/en/function.wordwrap.php

โซลูชัน CSS word-wrap: break-word;ดูเหมือนว่าจะไม่สอดคล้องกันในทุกเบราว์เซอร์

ภาษาฝั่งเซิร์ฟเวอร์อื่น ๆ มีฟังก์ชั่นที่คล้ายกัน - หรือสามารถสร้างขึ้นด้วยมือ

นี่คือวิธีการทำงานของฟังก์ชั่น wordwrap PHP:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

สิ่งนี้ล้อมรอบสตริงที่ 50 อักขระด้วยแท็ก <br> พารามิเตอร์ 'true' บังคับให้ตัดสตริง


คุณสามารถผสมโซลูชันนี้กับโซลูชันของ Remy เพื่อแทรกช่องว่างที่มีความกว้างเป็นศูนย์: wordwrap ($ longtext, 5, "& # 8203;", จริง);
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;

มันเป็นคำตอบที่สมบูรณ์และง่ายฉันคิดว่าคนที่โพสต์ปัญหานี้ แต่เดิมควรใช้ความกว้าง: 100%; กับลอย: ซ้าย; ในองค์ประกอบที่มีสตริงนั้นและปัญหาของเขาจะได้รับการแก้ไข แล้วทำไมคำตอบนี้จึงไม่เกี่ยวข้องกัน?
TechBrush.Org

เพราะผู้ชายคนนั้นที่โพสต์ปัญหานี้ไม่คิดว่าโซลูชันของคุณทำงานได้เมื่อห้าปีก่อน
ปิแอร์

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