Bagaimana saya bisa memaksa tali panjang tanpa ada yang kosong untuk dibungkus?

193

Saya memiliki string panjang (urutan DNA). Itu tidak mengandung karakter spasi putih.

Sebagai contoh:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Apa yang akan menjadi pemilih CSS untuk memaksa teks ini untuk dibungkus dengan html:textareaatau dalam xul:textbox?

Pierre
sumber
17
Ironisnya string tidak istirahat di Stack Overflow baik ...
splattne

Jawaban:

273

untuk elemen blok:

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

untuk elemen sebaris:

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

heeen
sumber
Ini didukung hanya di IE, Safari, dan FF3.1 (alpha).
Adam Bellaire
1
ini hanya berfungsi di gelombang browser baru - lihat caniuse.com/#search=word-break
Michal Bernhard
9
@Michael: Jawabannya menggunakan aturan "word-wrap", bukan yang "word-break"; yang pertama didukung seperti yang digunakan di hampir setiap browser yang digunakan saat ini. Di mana "dukungan parsial" diindikasikan, tampaknya nilai "break-word" untuk aturan "word-wrap" masih layak.
Robusto
2
Properti diganti namanya menjadi overflow-wrapsejak standar, tetapi wrod-wrapditerapkan secara luas.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Juga bekerja dengan "display: table-cell", diperlukan dalam kasus saya
César León
107

Tempatkan spasi nol lebar pada titik di mana Anda ingin istirahat. Ruang nol-lebar adalah &#8203;dalam HTML. Sebagai contoh:

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

Remy Blank
sumber
4
Saran bagus, saya telah belajar sesuatu yang baru hari ini, terima kasih!
Matteo Conta
2
Terima kasih atas solusi ini. Sedang kesulitan mendapatkan sesuatu seperti ini untuk bekerja di dalam sebuah tabel, dan solusi ini adalah satu-satunya yang saya temukan bekerja di IE, Firefox dan Chrome.
Farinha
1
+1, ini berfungsi lebih baik karena mencakup lebih banyak kasus, meskipun pertanyaannya untuk kasus yang lebih khusus.
montrealist
2
Anda juga dapat menggunakan <wbr>tag, yang melayani tujuan yang sama untuk memberikan peluang jeda baris opsional.
justisb
7
Perhatikan apakah Anda melakukan ini dalam hal-hal yang mungkin disalin dan ditempelkan.
alex
42

Inilah beberapa jawaban yang sangat berguna:

Bagaimana mencegah kata-kata panjang dari melanggar div saya?

untuk menghemat waktu Anda, ini dapat diselesaikan dengan 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;
emik
sumber
4
Beri ini +1 karena ini menyebutkan word-break: break-all; yang bekerja untuk saya di IE9
Nick Benedict
3
word-break: break-all;adalah satu-satunya yang bekerja di Android WebView untuk saya.
Stan
Terima kasih untuk word-break: break-all;!
Lonnie Best
18

Bagi saya ini bekerja,

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

Anda juga bisa menggunakan div di dalam div lain td. Saya menggunakan overflow:auto, karena menampilkan semua teks di browser Opera dan IE saya.

Rani
sumber
Ini tidak berhasil untuk saya. Saya harus memindahkan properti "word-wrap" ke div dan menghapus properti "overflow". Dengan perubahan ini, berfungsi.
danigonlinea
12

Saya tidak berpikir Anda bisa melakukan ini dengan CSS. Alih-alih, secara teratur 'panjang kata' di sepanjang string, masukkan tanda hubung lunak HTML:

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

Ini akan menampilkan tanda hubung di akhir baris, di mana ia membungkus, yang mungkin atau mungkin tidak seperti yang Anda inginkan.

Catatan Safari tampaknya membungkus string panjang dengan cara apa pun <textarea>, tidak seperti Firefox.

Peter Hilton
sumber
Wow, bahkan tidak tahu tentang itu. Rapi!
Daniel Schaffer
Saya juga tidak tahu tentang itu. Dobel rapi!
Karl
11

Gunakan metode CSS untuk memaksa membungkus string yang tidak memiliki spasi putih. Tiga metode:

1) Gunakan properti white-space CSS. Untuk menutupi ketidakkonsistenan browser, Anda harus mendeklarasikannya dengan beberapa cara. Jadi cukup masukkan string looooong Anda ke beberapa elemen level blok (misalnya, div, pre, p) dan berikan elemen itu css berikut:

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) gunakan force-wrap mixin dari Compass .

3) Saya hanya melihat ini juga dan saya pikir mungkin juga berfungsi (tapi saya perlu menguji dukungan browser lebih lengkap):

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

Referensi: membungkus konten

Graeck
sumber
Ya, # 3 di sana berfungsi di semua browser modern dan IE6 + yang lebih lama.
Graeck
1
# 3 hanya berfungsi jika ada peluang untuk istirahat dengan kata-kata. String yang terlalu panjang tidak putus (diuji pada Chrome 52.0.2743.82).
collapsar
8

Cara saya untuk pergi (ketika tidak ada cara yang tepat untuk memasukkan karakter khusus) melalui 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;

Seperti yang ditemukan di sini: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ dengan beberapa penelitian tambahan yang dapat ditemukan di sana.

Ben
sumber
5

Agar word-wrap:break-word;dapat bekerja untuk saya, saya harus memastikan bahwa displaydiatur ke block, dan bahwa lebar ditetapkan pada elemen. Di Safari, itu harus memiliki ptag dan widthharus ditetapkan ex.

innerurge
sumber
3

Jika Anda menggunakan PHP maka fungsi wordwrap berfungsi dengan baik untuk ini: http://php.net/manual/en/function.wordwrap.php

Solusi CSS word-wrap: break-word; tampaknya tidak konsisten di semua browser.

Bahasa sisi server lain memiliki fungsi yang serupa - atau dapat dibuat dengan tangan.

Inilah cara kerja fungsi PHP wordwrap:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Ini membungkus string pada 50 karakter dengan tag <br>. Parameter 'true' memaksa string untuk dipotong.

Dave
sumber
Anda dapat mencampur solusi ini dengan solusi Remy untuk menyisipkan spasi nol-lebar: wordwrap ($ longtext, 5, "& # 8203;", true);
MV.
3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

sumber
3

Gunakan <wbr>tag:

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

Saya pikir ini lebih baik daripada menggunakan ruang dengan lebar nol &#8203;yang dapat menyebabkan masalah saat Anda menyalin teks.

warvariuc
sumber
2

Dalam kasus di mana tabel tidak berukuran tetap, baris di bawah ini berfungsi untuk saya:

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

hanya pengaturan widthdan penambahan yang floatberfungsi untuk saya :-)

width:100%;
float:left;
TechBrush.Org
sumber
Ini adalah jawaban yang lengkap dan mudah saya pikir pria yang memposting masalah ini awalnya harus menggunakan lebar: 100%; dengan float: left; pada elemen yang berisi string itu dan masalahnya akan teratasi. lalu mengapa jawaban ini tidak relevan?
TechBrush.Org
karena pria yang memposting masalah ini tidak berpikir solusi Anda bekerja lima tahun yang lalu.
Pierre
2
Ya, tetapi forum ini bukan hanya tentang orang itu, tetapi tentang forum ini dan orang lain yang menghadapi masalah serupa seperti saya hari ini juga dapat memperoleh manfaat dari hal yang sama.
TechBrush.Org