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?


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.


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.


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;
}

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 */
}

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.


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.


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



5

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

Wprowadzić w życie:

white-space: inherit;
word-break: break-word;

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>


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ć ?


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.


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


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

-3

Zrób to:

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

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

-4

po prostu spróbuj tego w naszym stylu

white-space: normal;

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.