Herhangi bir boşluk bırakmadan uzun bir dizeyi nasıl zorlayabilirim?


194

Uzun bir dizem (DNA dizisi) var. Herhangi bir boşluk karakteri içermez.

Örneğin:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Bu metni bir html:textareaveya içine sarılmaya zorlayan CSS seçici nedir xul:textbox?


17
İronik bir şekilde dize Yığın Taşması'nda da kırılmaz ...
splattne

Yanıtlar:


272

blok elemanları için:

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

satır içi elemanlar için:

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


1
Yalnızca IE, Safari ve FF3.1 (alfa) sürümlerinde desteklenir.
Adam Bellaire

1
bu yalnızca yeni tarayıcı dalgasında çalışır - bkz. caniuse.com/#search=word-break
Michal Bernhard

9
@Michael: Cevap, "word-break" kuralını değil, "word-wrap" kuralını kullanır; birincisi, bugün kullanılan hemen hemen her tarayıcıda kullanıldığı gibi desteklenmektedir . "Kısmi destek" belirtildiğinde, "sözcük kaydırma" kuralı için "kesme sözcüğü" değerinin hala geçerli olduğu anlaşılmaktadır.
Robusto

2
Mülk overflow-wrap, standartlarda o zamandan beri yeniden adlandırıldı , ancak wrod-wrapyaygın olarak uygulanmaktadır.
Ciro Santilli 法轮功 冠状: 郝海东 事件 法轮功

1
Ayrıca "display: table-cell" ile çalışır, benim durumumda
César León

107

Aralara izin vermek istediğiniz noktalara sıfır genişliğinde boşluklar yerleştirin. Sıfır genişlik alanı &#8203;HTML biçimindedir. Örneğin:

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


4
İyi öneri, bugün yeni bir şey öğrendim, teşekkürler!
Matteo Conta

2
Bu çözüm için teşekkürler. Bir tablonun içinde çalışmak için böyle bir şey almakta zorlanıyordum ve bu çözüm IE, Firefox ve Chrome'da çalıştığını bulduğum tek çözüm.
Farinha

1
+1, soru daha özel bir durum için olsa da daha fazla vakayı kapsadığından daha iyi çalışır.
montrealist

2
Alternatif olarak <wbr>, isteğe bağlı bir satır sonu fırsatı sağlamak için aynı amaca hizmet eden etiketi kullanabilirsiniz .
justisb

7
Bunu, kopyalanıp yapıştırılabilecek şeylerde yapıp yapmadığınızı izleyin.
alex

42

İşte bazı çok faydalı cevaplar:

Uzun kelimelerin div'ımı kırmasını nasıl önleyebilirim?

size zaman kazanmak için, bu css ile çözülebilir:

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
Bunu + 1'leyin, çünkü kelime kırılmasından bahsediyor: break-all; IE9'da benim için çalışan
Nick Benedict

3
word-break: break-all;benim için Android WebView'da çalışan tek kişiydi.
Stan

İçin teşekkürler word-break: break-all;!
Lonnie Best

18

Benim için bu işe yarıyor,

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

Bunun yerine başka bir div içinde div de kullanabilirsiniz td. overflow:autoOpera ve IE tarayıcılarımdaki tüm metni gösterdiği için kullandım .


Bu benim için işe yaramadı. Div içine "word-wrap" özelliği taşımak ve "taşma" özelliği kaldırmak zorunda. Bu değişikliklerle çalışır.
danigonlinea

12

Bunu CSS ile yapabileceğinizi sanmıyorum. Bunun yerine, dize boyunca normal 'kelime uzunluklarında' bir HTML yumuşak tire ekleyin:

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

Bu, satırın sonunda, sarıldığı, istediğiniz veya olmayabileceğiniz bir kısa çizgi görüntüler.

Not Safari <textarea>, Firefox'un aksine uzun dizeyi yine de sarmış gibi görünüyor .


Vay canına, bunu bile bilmiyordum. Temiz!
Daniel Schaffer

Ben de bilmiyordum. Çift Temiz!
Karl

11

Boşluğu olmayan bir dizeyi sarmaya zorlamak için bir CSS yöntemi kullanın. Üç yöntem:

1) CSS boşluk özelliğini kullanın. Tarayıcı tutarsızlıklarını kapsamak için, bunu birkaç yolla bildirmeniz gerekir. Bu nedenle, looooong dizenizi bazı blok düzeyi öğelerine (ör. Div, pre, p) koyun ve o öğeye aşağıdaki css'yi verin:

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) Compass'tan kuvvet sarma karışımını kullanın .

3) Ben de buna bakıyordum ve bence de işe yarayabilir (ancak tarayıcı desteğini daha eksiksiz test etmem gerekiyor):

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

Referans: içeriği kaydırma


Evet, # 3 tüm modern tarayıcılarda ve hatta eski IE6 + 'da çalışıyor.
Graeck

1
# 3 yalnızca kelimelerle kırılma fırsatları varsa işe yarar. Aşırı uzun bir dize kesilmez (Chrome 52.0.2743.82'de test edilmiştir).
çöküş


5

İçin word-wrap:break-word;benim için işe, ben emin olmak zorunda displayolarak ayarlandı blockve genişlik elemanı üzerinde ayarlandığını. Safari'de bir petikete sahip olması ve widthayarlanması gerekiyordu ex.


3

PHP kullanıyorsanız, wordwrap işlevi bunun için iyi çalışır: http://php.net/manual/en/function.wordwrap.php

CSS çözümü word-wrap: break-word; tüm tarayıcılarda tutarlı görünmüyor.

Diğer sunucu tarafı diller de benzer işlevlere sahiptir - veya elle oluşturulabilir.

PHP wordwrap işlevi şu şekilde çalışır:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Bu, dizeyi <br> karakteriyle 50 karaktere sarar. 'True' parametresi dizeyi kesilmeye zorlar.


Sıfır genişlikli boşluklar eklemek için bu çözümü Remy'nin çözümü ile karıştırabilirsiniz: wordwrap ($ longtext, 5, "& # 8203;", true);
MV.

3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

3

<wbr>Etiketi kullan :

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

Bunun &#8203;, metni kopyalarken sorunlara neden olabilecek sıfır genişlikli alanı kullanmaktan daha iyi olduğunu düşünüyorum .


2

Masanın sabit boyutta olmadığı bir durumda, aşağıdaki satır benim için çalıştı:

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

1

sadece ayarlama widthve ekleme floatbenim için çalıştı :-)

width:100%;
float:left;

Tam ve kolay bir cevap ben bu sorunu aslında gönderen adam genişliği kullanması gerektiğini düşünüyorum:% 100; şamandıra ile: sol; Bu dizeyi içeren öğe üzerinde ve sorunu çözülecektir. o zaman bu cevap neden ilgili değil?
TechBrush.Org

çünkü bu sorunu yayınlayan kişi çözümünüzün beş yıl önce çalıştığını düşünmüyor.
Pierre

2
Evet, ama bu forum sadece o adamla ilgili değil, sadece bu forumla ilgili ve bugün benim gibi benzer sorunlarla karşılaşan diğer insanlar da aynı şekilde faydalanabilir.
TechBrush.Org
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.