Bir DIV'de uzun bir kelimede satır kesmeye nasıl zorlanır?


417

Tamam, bu gerçekten kafa karıştırıcı. Böyle bir div içinde bazı içerik var:

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

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

</div>

Bununla birlikte, 'word' çok uzun olduğu için içerik DIV'den (beklendiği gibi) taşar.

Tarayıcıyı içerideki tüm içeriğe uyacak şekilde kelimeyi 'kırmaya' nasıl zorlayabilirim?


Bu soruya bir göz atın: stackoverflow.com/questions/2046530/…
nickf

Yanıtlar:


609

kullanım word-wrap:break-word;

Hatta IE6'da da çalışıyor, bu hoş bir sürpriz.


word-wrap: break-word, overflow-wrap: break-word;her modern tarayıcıda çalışan ile değiştirildi . Ölü bir tarayıcı olan IE, sonsuza dek kullanımdan kaldırılmış ve standart dışı bir duruma güvenecektir word-wrap.

word-wrapBugünün mevcut kullanımları hala overflow-wrapşartname başına bir takma ad olduğu için çalışıyor .


75
Aslında, word-wrap bir IE buluşudur. Yani IE'de çalışması şaşırtıcı değil
Savas Vedova

1
Bunun bir tabloda çalışması table-layout: fixed;için, tabloya uygulamanız gerekebilir
Serj Sagan

28
word-wrap: break-wordbenim için işe yaramadı ama word-break: break-wordaşağıda önerildiği gibi @rahul çalıştı.
Yves

1
Not: Bu yalnızca IE'de üst div'de verirseniz çalışır (div içindeki iç açıklığa değil).
sms

125

Tarayıcı uyumluluğundan emin değilim

word-break: break-all;

Ayrıca <wbr>etiketi kullanabilirsiniz

<wbr>(word break) şu anlama gelir: "İsterse tarayıcı buraya bir satır sonu ekleyebilir." Tarayıcı bir satır sonu gerekli olduğunu düşünmüyor hiçbir şey olmuyor.


23
Şu kelime kırmanın farkında olun: kırılma; daha önce başka kelimelerle bir satıra herhangi bir karakter sığdırabiliyorsa, ortada sözcükleri kırar, bu da istenen sonuç olmayabilir, ancak word-wrap: break-word; kelimeleri yeni bir satıra taşır ve yalnızca kaptaki kendi satırına sığmayacak kadar uzunsa kelimeyi kırar. Örnek: jsfiddle.net/4AKhn/1
alexteg

break-all her şeyi kırar. Sadece uzun URL'ye sahip olan ancak BODY veya P ile olmayan belirli bir sınıfla kullanmak uygun
Upendra

Bir günlük tablo hücresinde istek URI'si gibi bir şey görüntülemeye çalışırken ve tüm tabloyu dev uzun bir hücre ile kırmayı durdurmak istediğinizde bu kesinlikle mükemmel (ve istenen) kabul edilebilir. Bir 'kelimenin' ortasında kırılmak istenir;) Kabul edilen cevap bu konuda çömelmez.
IncredibleHat

@ Skelly1983 IE12 diye bir şey yok
TylerH

@TylerH Bunun farkındayım, bunu 3 yıl sonra bana gösterdiğin için teşekkürler. Bu, desteği "Internet Explorer / Edge" olarak listeleyen ve aslında Edge'in ilk sürümü olan 12.0 olarak listelenen wbr etiketi için w3schools tarayıcı destek tablosunda listelenmiştir.
Skelly1983

98

Bu, bir 'çapraz tarayıcı' çözümü için kabul edilen cevaba eklenebilir.

Kaynaklar:

.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 ve Safari'de aldım, ancak yine de Firefox ve IE'de anlamadım. Bununla Firefox'u çözdüm, ancak IE hala konteynerin üzerinden gidiyor (sadece alfa-sayısal karakterlerin uzun bir dosya adı var).
Kamafeather

1
Merhaba Kamafeather, emin değilim, ama kırmaya çalışıyorsanız ifitisareallylongfilename, tüm bağlam (tarayıcı, html-css kodu) size daha fazla yardımcı olmak için yardımcı olabilir. Belki de durumunuzla ilgili başka bir soru yaratabilirsiniz.
Milche Patern

Lütfen bunun sembolik olmayan yerlerde kelimeleri kırdığını unutmayın.

@ user1322720 "sembolik olmayan" yer nedir?
TylerH

31

Aynı sorunu sadece Google'da araştırıyordum ve nihai çözümümü BURAYA gönderdim . Bu soru ile de ilgilidir.

Bunu stil vererek bir div ile kolayca yapabilirsiniz word-wrap: break-word(ve genişliğini de ayarlamanız gerekebilir).

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

Ancak, tablolar için , ayrıca uygulamak gerekir: table-layout: fixed. Bu, sütun genişliklerinin artık akışkan olmadığı, ancak yalnızca ilk satırdaki (veya belirtilen genişliklerle) sütun genişliklerine göre tanımlandığı anlamına gelir. Daha fazlasını buradan okuyun .

Basit kod:

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
Tablolar çözümü için teşekkür ederiz;) Ancak, neden break-word otomatik düzen ile kullanılamaz anlamıyorum. Herhangi bir öneri?
ondObno

@ondObno Evet, teknik nedenden emin değilim, ancak birkaç tarayıcı bu şekilde davranıyor gibi görünüyor. Belki de süper uzun kelimelerin her bir sütunun genişliğini belirlemek için gerekli tüm hesaplamaları karıştırmasıdır.
Simon East

Ayar width: 100%;FF ve krom benim için bu çalışma almak için tek yol oldu!
Putzi San

27

&#8203;satır genişliği fırsatını belirten görünmez bir karakter olan sıfır genişlik alanı (ZWSP) adı verilen bir unicode karakterin HTML varlığıdır. Benzer şekilde tirenin amacı bir sözcük sınırı içinde bir satır sonu fırsatı belirlemektir.


1
Çok güzel bir ipucu! Sadece tamamlamak için: &#8203;beyaz boşluktan daha düşük önceliğe sahiptir (yani yakınlarda bir boşluk varsa, çizgi bunun yerine beyaz boşlukta kesilir).
CPHPython

<wbr/>Aradığım unicode eşdeğeri gibi görünüyor
Xenos

20

Aşağıdakileri kullanmanın, flexbox kullanırken ve güvenirken Firefox (v50.0.2) hariç çoğu büyük tarayıcıda (Chrome, IE, Safari iOS / OSX) çalıştığı bulundu width: auto.

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

Not: Bir otomatik düzeltici kullanmıyorsanız tarayıcı satıcı önekleri eklemeniz gerekebilir.

Dikkat edilmesi gereken başka bir şey, &nbsp;boşluk için kullanılan metnin satır ortasında satır sonlarına neden olabilmesidir.


5
Tam da ihtiyacım olan şey bu. Diğer çözümler genişlikle çalışmadı:% 100. Unutulmaması gereken bir nokta: kelime arası: kelime arası; sözcük sonu
jscul

7

CSS word-wrap:break-word; , FireFox 3.6.3'te test edilmiştir




3

Boşluk tarayıcı tarafından korunur. Metin gerektiğinde kaydırır ve satır sonları

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

DEMO

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

Gönderen MDN'yi :

overflow-wrapCSS özellik belirtir olup olmadığını tarayıcı içeriğinin kutu taşan metin önlemek için kelimelerin içinde satır başı eklemek gerekir.

Bunun aksine word-break, overflow-wrapyalnızca bir kelimenin tamamı taşmadan kendi satırına yerleştirilemezse bir ara oluşturur.

Böylece şunları kullanabilirsiniz:

overflow-wrap: break-word;

Kullanabilir miyim ?


2

İlk önce elemanınızın genişliğini tanımlamanız gerekir. Örneğin:

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

böylece metin eleman genişliğine ulaştığında, satırlara bölünür.


2

@ Davidcondrey'in cevabında belirtildiği gibi, sadece ZWSP değil, aynı zamanda olmasını istediğiniz &#173; &shy;yerde kırılması gereken çok uzun, inşa edilmiş kelimelerde (Almanca veya Hollandaca düşünün) kullanılabilecek SHY de var. Görünmez, ancak gereken anı bir tireye verir, böylece hem kelimeyi bağlı hem de satırı en üst düzeyde tutar.

Bu şekilde luchthavenpolitieagent kelimesi lucht&shy;haven&shy;politie&shy;agent, hecelerin hecelerinden daha uzun kısımlar olarak belirtilebilir .
Bu konuda hiç resmi bir şey okumamış olmama rağmen, bu yumuşak tireler, tarayıcılarda, yapının tek kelimelerindeki resmi tirelerden daha yüksek önceliğe sahip olmayı başarırlar ( eğer bir uzantısı varsa ).
Uygulamada, hiçbir tarayıcı bu kadar uzun ve yapılandırılmış bir kelimeyi kendi başına kıramaz; daha küçük ekranlarda bunun için yeni bir satırla sonuçlanır, hatta bazı durumlarda tek kelimelik bir satır bile (bu yapılandırılmış kelimelerin ikisinin takip etmesi gibi).

FYI: Havaalanı polis memuru için Hollandaca


0

word-break: normal, word-break: break-word'ten daha iyi görünüyor, çünkü EN gibi break-word kesiliyor

word-break: normal

-3

Bunu yap:

<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

#sampleDiv{
   overflow-wrap: break-word;
}

-4

sadece bunu tarzımızda dene

white-space: normal;

1
Birçok durumda cevapların çoğaltılması çoğu durumda hoş karşılanmaz . Bu durumda, her iki soruya da yanlış bir cevap gibi görünüyor. normalvarsayılan white-spacedeğerdir. Bunu eklemenin sorudaki örnek üzerinde hiçbir etkisi olmayacağını düşünüyorum. Lütfen yanılıyorsam beni düzeltin.
Jeremy Banks

CSS tarafından yapılan geçersiz kılmaya bağlıdır. Benim durumumda, "white-space: normal;" olmayan varsayılan CSS stilini geçersiz kılmak için JSF bileşenimdeki "stil" üzerinde yeniden tanımlamak zorunda kaldım.
Benjamin Fuentes
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.