Учитывая относительно простой CSS:
div {
width: 150px;
}<div>
12333-2333-233-23339392-332332323
</div>How do I make it so that the string stays constrained to the
widthof 150, and wraps to a new line on the hyphen?
"это" означает исправление
@ ChrisMarasti-Georg: Я набираю шесть исправлений.
Большой пост: kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-c ss






Замените дефис на это:
­
Это называется «мягкий» дефис.
div {
width: 150px;
}<div>
12333­2333­233­23339392­332332323
</div>... и он не будет отображаться на дисплее, если там не будет фактического перерыва. Так что это бесполезно, если вы хотите, чтобы дефис всегда отображался.
Мне было интересно узнать о совместимости ­ с браузером. Согласно Quirksmode (см. Таблицу совместимости), это хорошо, с единственными проблемами, возникающими в старых браузерах, таких как FF2 и IE5.5-6.
Как часть CSS3, он еще не полностью поддерживается, но вы можете найти информацию о переносе слов здесь. Другой вариант - тег wbr, и, ни один из которых также полностью не поддерживается.
Для записи word-wrap: break-word; не разрывает дефис в Firefox (проверено в v11)
Ваш пример работает должным образом в Google Chrome, Safari (Windows) и IE8. Текст выходит за пределы поля 150 пикселей в Firefox 3 и Opera 9.5.
Кроме того, ­ не будет работать для вашего примера, так как он будет:
работают при разбиении на слова, но когда не разбиваются на слова, не отображать дефисы или
работают без разбиения по словам, но отображают два дефиса при разбиении по словам так как он добавляет дефис в разрыв.
В этом конкретном случае (где ваша строка будет содержать дефисы) я бы преобразовал текст на эту серверную сторону:
<div style = "width:150px;">
<span>12333-</span><span>2333-</span><span>233-</span><span>23339392-</span><span>332332323</span>
</div>Это не должно иметь значения, правда? Или, если вы не поставите эти промежутки на nowrap.
В зависимости от того, что именно вы хотите увидеть, вы можете использовать комбинацию hyphen, soft hyphen и / или zero width space.
В мягком переносе ваш браузер может переносить слова (добавляя дефис). В пространстве нулевой ширины ваш браузер может разбивать слова (ничего не добавляя).
Таким образом, если ваш код выглядит примерно так:
111111­222222­-333333​444444-​555555
тогда ваш браузер покажет это без разрыва слова:
1111112222222-33333334444444-5555555
и это будет всевозможным разрывом слов:
111111-
222222-
-333333
444444-
555555
Просто подберите нужный вариант. В вашем случае это может быть от 4 до 5.
Остерегайтесь несовместимости браузеров. См. Таблицу совместимости здесь: quirksmode.org/oddsandends/wbr.html
Замечу, что ­ - безусловно лучший вариант. Все остальные, например, нарушают кернинг текста шрифта.
Во всех современных браузерах * (а также в некоторых старые браузеры) <wbr> элемент - идеальный инструмент для предоставления возможности разбивать длинные слова в определенных точках.
Цитата из этой ссылки:
The Word Break Opportunity (
<wbr>) HTML element represents a position within text where the browser may optionally break a line, though its line-breaking rules would not otherwise create a break at that location.
Вот как это можно было бы использовать в примере OP (или увидеть его в действии на JSFiddle):
<div style = "width: 150px;">
12333-<wbr>2333-<wbr>233-<wbr>23339392-<wbr>332332323
</div>
* Я тестировал его в IE9, IE10 и последних версиях Chrome, Firefox, Opera и Safari.
div {
width: 150px;
}<div>
12333-<wbr>2333-<wbr>233-<wbr>23339392-<wbr>332332323
</div>Неразрывный дефис работает хорошо.
HTML-объект (десятичный)
‑
Вместо - вы можете использовать ‐ или \u2010.
Кроме того, убедитесь, что для свойства дефисы css было установлено значение нет, равное никто (значение по умолчанию - руководство).
<wbr> не поддерживается Internet Explorer.
Вы также можете использовать:
word-break:break-all;
бывший.
<div style='width:10px'>ababababababbabaabababababababbabababa</div>
выход:
abababababa
ababababbba
abbabbababa
ababb
word-break - это разрыв всего слова или строки, даже если в предложении нет пробела, который не соответствует указанной ширине или высоте. Гайка для этого вы должны указать ширину или высоту.
Надеюсь, это поможет
используйте тег <br> (разрыв) там, где вы хотите разорвать строку.
Вы можете использовать пробел шириной 0 после символа дефиса:
div {
width: 150px;
}<div>
12333-​2333-​233-​23339392-​332332323
</div>если вы хотите перенести строку перед дефисом, используйте ​-.
Это сработало для вас? Я пробовал это в Firefox, и он полностью удаляет дефис ...