Відповіді:
Специфікація W3, яка розповідає про них, начебто підказує, що word-break: break-all
це вимагає певної поведінки з текстом CJK (китайською, японською та корейською мовами), тоді як word-wrap: break-word
є більш загальною поведінкою, не обізнаною з CJK.
word-break
задає можливість м'якого обгортання між літерами ..." Специфікація W3C використовує текст CLK в якості прикладу , але це не єдина його призначена цільова робота. Загальноприйнято використовувати word-break
спільно з довгими рядками (наприклад, URL-адресами або рядками коду), коли ви хочете, щоб вони перервалися на ширину контейнера, особливо якщо контейнер є pre
елементом або коміркою таблиці, де word-wrap
властивість може працювати не так, як очікувалося .
word-wrap: break-word
нещодавно змінено на overflow-wrap: break-word
word-break: break-all
Отже, якщо у вас є багато діапазонів фіксованого розміру, які динамічно отримують вміст, ви можете просто скористатися word-wrap: break-word
, оскільки таким чином розбиваються лише безперервні слова, а якщо це речення, що складається з багатьох слів, пробіли підлаштовуються для отримання непошкоджених слів (без перерви в слові).
І якщо це не має значення, займіться будь-яким.
З word-break
, дуже довге слово починається з моменту, коли воно повинно починатися, і воно порушується стільки, скільки потрібно
[X] I am a text that 0123
4567890123456789012345678
90123456789 want to live
inside this narrow paragr
aph.
Однак, з word-wrap
, дуже довге слово НЕ буде починатися в той момент, який він повинен почати. він переходить до наступного рядка, а потім переривається стільки, скільки потрібно
[X] I am a text that
012345678901234567890123
4567890123456789 want to
live inside this narrow
paragraph.
break-word
. Я дратує, що word-break
розбиває URL-адреси, але ні word-wrap
. Обидва користувачі break-word
отримали це від css-tricks.com/snippets/css/…
word-wrap
було перейменовано, overflow-wrap
ймовірно, щоб уникнути цієї плутанини.
Тепер це те, що ми маємо:
Переповнення-обгортка властивість використовується , щоб вказати , чи може браузер розривати рядки в межах слів, щоб запобігти переповнення , коли в іншому випадку непорушна рядок занадто довга , щоб поміститися в містить його поле.
Можливі значення:
нормальний : вказує на те, що рядки можуть перериватися лише у нормальних точках розриву слів.
Слово на розрив : вказує на те, що зазвичай нерозривні слова можуть бути порушені у довільних точках, якщо в рядку немає інших прийнятних точок перерви.
джерело .
Слово розбиття CSS властивість використовується , щоб вказати , слід розривати рядки в межах слів.
джерело .
Тепер повернемось до вашого питання, головна відмінність переповнення переповнення та переривання слів полягає в тому, що перший визначає поведінку в ситуації переповнення , а пізніше визначає поведінку в нормальній ситуації (без переповнення). Переповнення ситуація відбувається , коли контейнер не має достатньо місця для зберігання тексту. Розривання ліній у цій ситуації не допомагає, оскільки місця немає (уявіть коробку з шириною та висотою виправлення).
Тому:
overflow-wrap: break-word
: Про ситуацію, що переповнює, розбийте слова.word-break: break-all
: У звичайній ситуації просто переламайте слова в кінці рядка. Переповнення не потрібно.overflow-wrap
/ word-wrap
не змусив їх загортати. Імовірно, тому, що комірки таблиці без фіксованої ширини розширюються замість переповнення. Натомість стіл розширився і зіткнувся з іншими елементами. word-break
з іншого боку зафіксував це.
table-layout: fixed;
(можливо, разом з width
/ max-width
) може змусити його працювати, overflow-wrap/word-wrap
але це залежить від конкретного випадку використання; так само, як word-break
може бути не тим, чого ти хочеш.
Принаймні у Firefox (станом на v24) та Chrome (станом на v30), коли застосовується до вмісту в table
елементі:
word-wrap:break-word
насправді не призведе до загортання довгих слів, внаслідок чого таблиця перевищить межі її контейнера;
word-break:break-all
це призведе до загортання слів, а до столу поміститься в його контейнер.
table-layout:fixed
щоб таблиця не розширювалася під час використанняword-wrap:break-work
table-layout:fixed
word-wrap
спільно з pre
тегами у Firefox, якщо вони не мають визначеної ширини. Використання word-break
дає бажаний результат. Я відповів на цю відповідь у коментарі, розміщеному вище, оскільки це демонструє звичайний випадок використання.
Це все, що я можу дізнатися. Не впевнений, чи допомагає це, але подумав, що додав би його до суміші.
ПЕРЕНОС СЛІВ
Це властивість визначає, чи повинен розбиватися поточний виведений рядок, якщо вміст перевищує межу зазначеного вікна візуалізації для елемента (це певним чином подібне до властивостей 'clip' та 'overflow' у намірі). Це властивість має застосовуватися лише якщо елемент має візуальну візуалізацію, це вбудований елемент з явною висотою / шириною, абсолютно розміщений та / або блоковий елемент.
СЛОВО-ВИПУСК
Ця властивість керує поведінкою розриву рядків у словах. Це особливо корисно у випадках, коли в межах елемента використовується кілька мов.
word-wrap
, word-break
що може мати значення для обохbreak-word
Є величезна різниця. break-all
в основному непридатний для візуалізації читаного тексту.
Скажімо, у вас є рядок This is a text from an old magazine
у контейнері, який вміщує лише 6 символів у рядку.
word-break: break-all
This i
s a te
xt fro
m an o
ld mag
azine
Як бачите, результат жахливий. break-all
спробує помістити якомога більше символів у кожен ряд, наскільки це можливо, воно навіть розділить на 2 ряди слово з двох літер типу "є"! Це смішно. Ось чому break-all
він рідко використовується.
word-wrap: break-word
This
is a
text
from
an old
magazi
ne
break-word
порушить лише слова, які занадто довгі, щоб коли-небудь помістити контейнер (наприклад, "журнал", який становить 8 символів, а контейнер вміщує лише 6 символів). Він ніколи не порушить слова, які могли б вмістити контейнер у повному обсязі, натомість підштовхне їх до нового рядка.
<div style="width: 100px; border: solid 1px black; font-family: monospace;">
<h1 style="word-break: break-all;">This is a text from an old magazine</h1>
<hr>
<h1 style="word-wrap: break-word;">This is a text from an old magazine</h1>
</div
word-break:break-all
:
слово, щоб продовжити кордон, а потім перерватися в новому рядку.
word-wrap:break-word
:
Спочатку загортання слова у новий рядок, потім продовжуйте обмежувати.
Приклад:
div {
border: 1px solid red;
width: 200px;
}
span {
background-color: yellow;
}
.break-all {
word-break:break-all;
}
.break-word {
word-wrap:break-word;
}
<b>word-break:break-all</b>
<div class="break-all">
This text is styled with
<span>soooooooooooooooooooooooooome</span> of the text
formatting properties.
</div>
<b> word-wrap:break-word</b>
<div class="break-word">
This text is styled with
<span>soooooooooooooooooooooooooome</span> of the text
formatting properties.
</div>
З відповідних специфікацій W3 - які трапляються досить неясно через відсутність контексту - можна зробити наступне:
word-break: break-all
призначений для розбиття іноземних слів, які не є CJK (скажімо, західними) у написах символів CJK (китайська, японська чи корейська).word-wrap: break-word
- це для розбиття слів змішаною (скажемо виключно західною) мовою.Принаймні, це були наміри W3. Що насправді сталося, це був великий перелом із несумісністю веб-переглядача. Ось чудовий опис різних проблем .
Наведений нижче фрагмент коду може слугувати підсумком того, як домогтися загортання слів за допомогою CSS у перехресному середовищі браузера:
-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;
На додаток до попередніх коментарів підтримка браузера для word-wrap
здається трохи кращою, ніж для word-break
.