Jak wymusić przerwanie linii długim słowem w DIV?

417

Okej, to mnie naprawdę dezorientuje. Mam trochę treści w div, takie jak:

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

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

</div>

Jednak treść przepełnia DIV (zgodnie z oczekiwaniami), ponieważ „słowo” jest za długie.

Jak mogę zmusić przeglądarkę do „złamania” słowa w razie potrzeby, aby zmieściło się w całej zawartości?

Nathan Osman
źródło
Spójrz na to pytanie: stackoverflow.com/questions/2046530/…
nickf

Odpowiedzi:

609

Posługiwać się word-wrap:break-word;

Działa nawet w IE6, co jest miłym zaskoczeniem.


word-wrap: break-wordzostał zastąpiony tym, overflow-wrap: break-word;który działa w każdej nowoczesnej przeglądarce. IE, jako martwa przeglądarka, zawsze będzie polegać na przestarzałym i niestandardowym word-wrap.

Istniejące obecnie zastosowania word-wrapnadal działają, ponieważ jest to alias dla overflow-wrapspecyfikacji.

Chi
źródło
75
W rzeczywistości zawijanie wyrazów jest wynalazkiem IE. Nic więc dziwnego, że działa w IE :)
Savas Vedova
1
Aby to zadziałało przy stole, może być konieczne zastosowanie go table-layout: fixed;do stołu
Serj Sagan
28
word-wrap: break-wordnie działało dla mnie, ale word-break: break-wordjak sugeruje @rahul poniżej działało.
Yves
1
Uwaga: Działa to tylko wtedy, gdy podasz go jako div div w IE (nie do wewnętrznej rozpiętości wewnątrz div).
sms
125

Nie jestem pewien kompatybilności przeglądarki

word-break: break-all;

Możesz także użyć <wbr>znacznika

<wbr>(podział tekstu) oznacza: „Przeglądarka może wstawić tutaj podział wiersza, jeśli chce”. Jeśli przeglądarka nie uważa, że ​​konieczne jest przerwanie linii, nic się nie dzieje.

Rahul
źródło
23
Bądź świadomy tego podziału słów: break-all; rozbija wyrazy na środku, jeśli nadal może zmieścić dowolne znaki w wierszu z innymi wyrazami wcześniej, co może nie być pożądanym rezultatem, podczas zawijania wyrazów: rozbij słowo; przenosi słowa do nowego wiersza i łamie je tylko wtedy, gdy jest zbyt długie, aby w ogóle zmieściło się we własnej linii w kontenerze. Przykład: jsfiddle.net/4AKhn/1
alexteg
wszystko-wszystko psuje wszystko. W porządku, aby używać z konkretną klasą, która ma tylko długi URL itp., Ale nie z BODY lub P
Upendra
Jest to zdecydowanie idealnie (i pożądane) dopuszczalne, gdy próbujesz wyświetlić coś w rodzaju identyfikatora URI żądania w komórce tabeli dziennika i potrzebujesz, aby przestał rozbijać całą tabelę gigantyczną długą komórką. Potrzebne jest włamanie się w „słowo”;) Podczas gdy przyjęta odpowiedź nie jest w tym przypadku przysadzista.
IncredibleHat
@ Skelly1983 nie ma czegoś takiego jak IE12
TylerH,
@TylerH Zdaję sobie z tego sprawę, dziękuję za zwrócenie mi na to uwagi po 3 latach. Jest on wymieniony na wykresie obsługi przeglądarki w3schools dla znacznika wbr, który podaje obsługę jako „Internet Explorer / Edge” i ma numer wersji podany jako 12.0, co w rzeczywistości jest pierwszą wersją Edge.
Skelly1983,
98

Można to dodać do zaakceptowanej odpowiedzi w przypadku rozwiązania „dla wielu przeglądarek”.

Źródła:

.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;
}
Milche Patern
źródło
Mam go na Chrome / Opera i Safari, ale nadal nie mam go na Firefox i IE. Dzięki temu rozwiązałem Firefoksa, ale IE wciąż przegląda kontener (mam długą nazwę pliku zawierającą tylko znaki alfanumeryczne).
Kamafeather
1
Cześć Kamafeather, nie jestem pewien, ale jeśli próbujesz przerwać nazwę pliku, to cały kontekst (przeglądarka, kod HTML-CSS) może być pomocny, aby pomóc ci bardziej. Być może możesz stworzyć kolejne pytanie dotyczące swojej sytuacji.
Milche Patern,
Należy pamiętać, że łamie to słowa w niegramatycznych miejscach.
@ user1322720 co to jest „niegramatyczne” miejsce?
TylerH,
31

Właśnie googlowałem ten sam problem i swoje ostateczne rozwiązanie opublikowałem TUTAJ . Dotyczy to również tego pytania.

Możesz to łatwo zrobić za pomocą div, nadając mu styl word-wrap: break-word(i może być konieczne ustawienie jego szerokości).

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

Jednak dla tabel , trzeba także stosować: table-layout: fixed. Oznacza to, że szerokości kolumn nie są już płynne, ale są zdefiniowane na podstawie szerokości kolumn tylko w pierwszym rzędzie (lub poprzez określone szerokości). Przeczytaj więcej tutaj .

Przykładowy 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 */
}
Simon East
źródło
1
Dziękuję za rozwiązanie tabel;) Jednak nie do końca rozumiem, dlaczego słowa kluczowego nie można używać z automatycznym układem. Jakieś sugestie?
ondObno
@ondObno Tak, nie jestem pewien przyczyn technicznych, ale wydaje się, że kilka przeglądarek zachowuje się w ten sposób. Być może dzieje się tak dlatego, że bardzo długie słowa mieszają się ze wszystkimi obliczeniami wymaganymi do określenia szerokości każdej kolumny.
Simon East
Ustawienie width: 100%;było jedynym sposobem, aby uruchomić to dla mnie na FF i chrome!
Putzi San,
27

&#8203;jest jednostką HTML dla znaku Unicode zwanego przestrzenią zerowej szerokości (ZWSP), która jest niewidocznym znakiem określającym możliwość łamania linii. Podobnie celem łącznika jest określenie możliwości przełamania linii w granicach słowa.

Davidcondrey
źródło
1
Bardzo fajna wskazówka! Tylko dla uzupełnienia: &#8203;ma niższy priorytet niż biała spacja (tzn. Jeśli w pobliżu jest biała linia, zamiast tego zostanie przerwana biała spacja).
CPHPython
Wydaje się być <wbr/>ekwiwalentem Unicode, którego szukałem
Xenos
20

Stwierdzono, że korzystanie z poniższych działało w większości głównych przeglądarek (Chrome, IE, Safari iOS / OSX) z wyjątkiem Firefoksa (v50.0.2) podczas korzystania z Flexboksa i polegania na nim width: auto.

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

Uwaga: może być konieczne dodanie prefiksów dostawcy przeglądarki, jeśli nie używasz autoprefiksera.

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że użycie tekstu &nbsp;do spacji może powodować łamanie wiersza w środku słowa.

Andrzej
źródło
5
Właśnie tego potrzebowałem. Inne rozwiązania nie działały z szerokością: 100%. Jedną rzecz do zapamiętania: podział na słowa: podział na słowa; powinno być podzielone na słowa: break-all;
jscul
7

CSS word-wrap:break-word; , testowany w FireFox 3.6.3

Babiker
źródło
5

Rozwiązałem problem z kodem poniżej.

display: table-caption;
Thadeu Esteves Jr.
źródło
5

Usunąć white-space: nowrap , jeśli istnieje.

Wprowadzić w życie:

white-space: inherit;
word-break: break-word;
Vineet Kumar Singh
źródło
3

Biała spacja jest zachowywana przez przeglądarkę. Tekst będzie zawijany, gdy to konieczne, i przerwy w linii

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

PRÓBNY

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>

Tính Ngô Quang
źródło
2

Z MDN :

Właściwość overflow-wrapCSS określa, czy przeglądarka powinna wstawiać podziały wierszy w słowach, aby zapobiec przepełnieniu tekstu w polu zawartości.

W przeciwieństwie do word-break, overflow-wraputworzy przerwę tylko wtedy, gdy całe słowo nie może zostać umieszczone w swoim wierszu bez przepełnienia.

Możesz więc użyć:

overflow-wrap: break-word;

Czy mogę użyć ?

Shiva127
źródło
2

Najpierw powinieneś określić szerokość swojego elementu. Na przykład:

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

tak, że gdy tekst osiągnie szerokość elementu, zostanie podzielony na linie.

Tran Nam Hung
źródło
2

Jak wspomniano w odpowiedzi @ davidcondrey, istnieje nie tylko ZWSP, ale także SHY, &#173; &shy;którego można używać w bardzo długich, skonstruowanych słowach (myślenie w języku niemieckim lub holenderskim), które należy rozbić w miejscu, w którym chcesz. Niewidoczny, ale zapewnia łącznik w momencie, gdy jest potrzebny, dzięki czemu słowo jest połączone, a linia wypełniona do końca.

W ten sposób można zauważyć słowo luchthavenpolitieagent , lucht&shy;haven&shy;politie&shy;agentktóre daje dłuższe części niż sylaby tego słowa.
Chociaż nigdy nie czytałem na ten temat niczego oficjalnego, te miękkie myślniki potrafią uzyskać wyższy priorytet w przeglądarkach niż oficjalne myślniki w pojedynczych słowach konstruktu ( jeśli w ogóle mają jakieś rozszerzenie).
W praktyce żadna przeglądarka nie jest w stanie sama złamać tak długiego, skonstruowanego słowa; na mniejszych ekranach, w wyniku czego powstaje nowa linia, aw niektórych przypadkach nawet linia jednego słowa (na przykład, gdy następują dwa z tych skonstruowanych słów).

FYI: holenderski dla funkcjonariusza policji na lotnisku

David de Beer
źródło
0

dzielenie wyrazów: normalne wydaje się być lepsze niż dzielenie wyrazów: dzielenie wyrazów, ponieważ słowo dzielące łamie początkowe, takie jak EN

word-break: normal
Matoeil
źródło
-3

Zrób to:

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

#sampleDiv{
   overflow-wrap: break-word;
}
amit bende
źródło
-4

po prostu spróbuj tego w naszym stylu

white-space: normal;
Benjamin Fuentes
źródło
1
W większości przypadków powielanie odpowiedzi na wiele pytań jest odrzucane . W tym przypadku wydaje się, że odpowiedź na oba pytania jest nieprawidłowa. normaljest white-spacewartością domyślną . Myślę, że dodanie go nie miałoby wpływu na przykład w pytaniu. Popraw mnie, jeśli się mylę.
Jeremy Banks
To zależy od zastąpienia dokonanego przez CSS. W moim przypadku musiałem zmienić tę opcję na „styl” w moim komponencie JSF, aby zastąpić domyślny styl CSS, który nie był „białą spacją: normalną”;
Benjamin Fuentes