Obecnie zastanawiam się, jaka jest różnica między nimi. Kiedy użyłem obu, wydaje się, że łamią słowo, jeśli nie pasuje do pojemnika. Ale dlaczego W3C zrobiło to na dwa sposoby?
397
Mówiąc o nich, specyfikacja W3 wydaje się sugerować, że word-break: break-all
wymaga określonego zachowania w tekście CJK (chińskim, japońskim i koreańskim), podczas gdy word-wrap: break-word
jest to bardziej ogólne, nieświadome CJK zachowanie.
word-break
określa możliwości miękkiego zawijania między literami…” Specyfikacja W3C wykorzystuje tekst CLK jako przykład , ale nie jest to jego jedyne zamierzone zastosowanie. Powszechnie używa się goword-break
w połączeniu z długimi ciągami (takimi jak adresy URL lub wiersze kodu), gdy chcesz, aby łamały się na szerokości kontenera - szczególnie jeśli kontener jestpre
elementem lub komórką tabeli, w którejword-wrap
właściwość może nie działać zgodnie z oczekiwaniami .word-wrap: break-word
ostatnio zmieniono naoverflow-wrap: break-word
word-break: break-all
Więc jeśli masz wiele rozpiętości o stałej wielkości, które dynamicznie uzyskują treść, możesz po prostu wolić używać
word-wrap: break-word
, ponieważ w ten sposób dzielone są tylko ciągłe słowa, a w przypadku zdania zawierającego wiele słów, spacje są dostosowywane, aby uzyskać nienaruszone słowa (bez przerwy w słowie).A jeśli to nie ma znaczenia, wybierz jedno z nich.
źródło
Z
word-break
bardzo długim słowem zaczyna się w miejscu, w którym powinno się zacząć i jest łamane tak długo, jak to konieczneJednak z
word-wrap
bardzo długim słowem NIE Zaczyna się w miejscu, w którym powinno się zacząć. zawija się do następnej linii, a następnie jest łamany tak długo, jak to konieczneźródło
break-word
. Irytujące okazało się, żeword-break
łamie adresy URL, ale nieword-wrap
. Oba za pomocąbreak-word
otrzymały go z css-tricks.com/snippets/css/…word-wrap
został przemianowany, abyoverflow-wrap
prawdopodobnie uniknąć tego zamieszania.Teraz mamy to:
przepełnienie
Możliwa wartość:
normal : wskazuje, że linie mogą się łamać tylko w normalnych punktach podziału słów.
słowo przerywane : Wskazuje, że zwykle niełamliwe słowa mogą być łamane w dowolnych punktach, jeśli w linii nie ma innych akceptowalnych punktów przerwania.
źródło .
podział słów
źródło .
Wracając do pytania, główna różnica między zawijaniem przepełnienia a dzieleniem słów polega na tym, że pierwsze określa zachowanie w sytuacji przepełnienia , a drugie określa zachowanie w sytuacji normalnej (bez przepełnienia). Przelewowy sytuacja zdarza się, gdy pojemnik nie ma wystarczającej ilości miejsca do przechowywania tekstu. Przełamywanie linii w tej sytuacji nie pomaga, ponieważ nie ma miejsca (wyobraź sobie pudełko o stałej szerokości i wysokości).
Więc:
overflow-wrap: break-word
: W przypadku przepełnienia podziel słowa.word-break: break-all
: W normalnej sytuacji wystarczy rozbić słowa na końcu wiersza. Przepełnienie nie jest konieczne.źródło
overflow-wrap
/word-wrap
nie zmusił ich do zawinięcia. Prawdopodobnie dlatego, że komórki tabeli bez stałej szerokości rozszerzają się zamiast przepełniać. Zamiast tego stół stał się szeroki i zderzył się z innymi elementami.word-break
z drugiej strony to naprawiłem.table-layout: fixed;
(prawdopodobnie razem zwidth
/max-width
) może sprawić, że będzie działać,overflow-wrap/word-wrap
ale zależy to od konkretnego przypadku użycia; tak jakword-break
może nie być tym, czego chcesz.Przynajmniej w Firefoksie (od wersji 24) i Chrome (od wersji 30), w przypadku zastosowania do zawartości w
table
elemencie:word-wrap:break-word
nie spowoduje zawijania długich słów, co może spowodować, że tabela przekroczy granice kontenera;
word-break:break-all
spowoduje zawijanie słów i dopasowanie stolika do jego pojemnika.
demo jsfiddle .
źródło
table-layout:fixed
aby tabela nie rozwijała się podczas używaniaword-wrap:break-work
table-layout:fixed
word-wrap
w połączeniu zepre
znacznikami w przeglądarce Firefox, chyba że mają one zdefiniowaną stałą szerokość. Używanieword-break
daje pożądany rezultat. Odniosłem się do tej odpowiedzi w komentarzu zamieszczonym powyżej, ponieważ pokazuje ona częsty przypadek użycia.To wszystko, co mogę się dowiedzieć. Nie jestem pewien, czy to pomaga, ale pomyślałem, że dodam to do miksu.
ZAWIJANIE TEKSTU
Ta właściwość określa, czy bieżąca renderowana linia powinna się zepsuć, jeśli zawartość przekroczy granicę określonego pola renderowania dla elementu (jest to pod pewnymi względami podobne do właściwości „klip” i „przepełnienie”). Ta właściwość powinna mieć zastosowanie tylko jeśli element ma wizualny rendering, jest elementem wbudowanym o wyraźnej wysokości / szerokości, jest pozycjonowany absolutnie i / lub jest elementem blokowym.
PRZERWA W SŁOWIE
Ta właściwość kontroluje zachowanie łamania wierszy w słowach. Jest to szczególnie przydatne w przypadkach, gdy w jednym elemencie używanych jest wiele języków.
źródło
word-wrap
iword-break
które mogą mieć zarówno wartośćbreak-word
Jest ogromna różnica.
break-all
jest zasadniczo bezużyteczny do renderowania czytelnego tekstu.Powiedzmy, że masz ciąg
This is a text from an old magazine
w pojemniku, który mieści tylko 6 znaków w rzędzie.word-break: break-all
Jak widać wynik jest okropny.
break-all
spróbuje dopasować jak najwięcej znaków do każdego wiersza, a nawet podzieli 2-literowe słowo w rodzaju „jest” na 2 wiersze! To jest niedorzeczne. Dlategobreak-all
rzadko jest używany.word-wrap: break-word
break-word
rozbija tylko słowa, które są zbyt długie, by zmieścić się w pojemniku (np. „magazynek”, który ma 8 znaków, a pojemnik mieści tylko 6 znaków). Nigdy nie rozbije słów, które mogłyby zmieścić cały pojemnik, zamiast tego popchnie je do nowej linii.źródło
word-break:break-all
:słowo, aby kontynuować obramowanie, a następnie włóż nowy wiersz.
word-wrap:break-word
:Najpierw zawijaj słowa w nowej linii, a następnie kontynuuj obramowanie.
Przykład:
źródło
Z odpowiednich specyfikacji W3 - które są dość niejasne z powodu braku kontekstu - można wywnioskować:
word-break: break-all
służy do dzielenia obcych, spoza CJK (powiedzmy zachodnich) słów w pismach znaków CJK (chińskich, japońskich lub koreańskich).word-wrap: break-word
służy do dzielenia słów w nie mieszanym (powiedzmy wyłącznie zachodnim) języku.Takie były przynajmniej intencje W3. To, co się faktycznie wydarzyło, było dużym problemem z niezgodnościami przeglądarki. Oto doskonały opis różnych problemów .
Poniższy fragment kodu może służyć jako podsumowanie sposobu zawijania słów za pomocą CSS w środowisku przeglądarki internetowej:
źródło
Oprócz poprzednich komentarzy obsługa przeglądarki
word-wrap
wydaje się być nieco lepsza niż dlaword-break
.źródło