Как разбить слово на тире?

Учитывая относительно простой CSS:

div {
  width: 150px;
}
<div>
  12333-2333-233-23339392-332332323
</div>

Как сделать так, чтобы строка оставалась ограниченной width из 150, и просто переносится на новую строку на дефисе?

11 ответов

Решение

Замените ваши дефисы на это:

&shy;

Это называется "мягкий" дефис.

div {
  width: 150px;
}
<div>
  12333&shy;2333&shy;233&shy;23339392&shy;332332323
</div>

Во всех современных браузерах * (и в некоторых старых браузерах тоже) <wbr> Элемент является идеальным инструментом для предоставления возможности разбивать длинные слова в определенных точках.

Цитировать по этой ссылке:

Возможность сломать слово (<wbr>) HTML-элемент представляет позицию в тексте, где браузер может по желанию разбить строку, хотя его правила разрыва строки в противном случае не создали бы разрыв в этом месте.

Вот как это можно использовать в примере 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>

Как часть CSS3, он еще не полностью поддерживается, но вы можете найти информацию о переносе слов здесь. Другим вариантом является тег wbr, & shy; и & # 8203; ни один из которых полностью не поддерживается.

В этом конкретном случае (где ваша строка будет содержать дефисы), я бы преобразовал текст на стороне сервера:

<div style="width:150px;">
  <span>12333-</span><span>2333-</span><span>233-</span><span>23339392-</span><span>332332323</span>
</div>

Ваш пример работает должным образом в Google Chrome, Safari (Windows) и IE8. Текст вырывается из окна 150px в Firefox 3 и Opera 9.5.

Дополнительно &shy; не подойдет для вашего примера, так как будет:

  • работать, когда ломается слово, но когда не ломается слово, не отображаются дефисы, или

  • работать, когда не разрывается слово, но отображать два дефиса, когда разрывается слово, так как это добавляет дефис на разрыв.

В зависимости от того, что вы хотите увидеть точно, вы можете использовать комбинацию hyphen, soft hyphenи / или zero width space,

На мягком дефисе ваш браузер может разбивать слова (добавляя дефис). В пространстве с нулевой шириной ваш браузер может разбивать слова (без добавления чего-либо).

Таким образом, если ваш код что-то вроде:

111111&shy;222222&shy;-333333&#8203;444444-&#8203;555555

тогда ваш браузер покажет это без разбивки слов:

1111112222222-33333334444444-5555555

и это будет всевозможным разрывом слов:

111111-
222222-
-333333
444444-
555555

Просто выберите нужный вам вариант. В вашем случае это может быть интервал от 4 до 5 секунд.

Вы также можете использовать:

word-break:break-all;

ех.

<div style='width:10px'>ababababababbabaabababababababbabababa</div>

выход:

abababababa
ababababbba
abbabbababa
ababb

разрыв слова - это разрыв слова или строки, даже если в предложении нет пробела, который не соответствует заданной ширине или высоте. Гайкой для этого вам необходимо предоставить ширину или высоту.

Надеюсь, что это может помочь

использование <br>(разрыв) тег, где вы хотите, чтобы разорвать линию.

Вместо - ты можешь использовать &hyphen; или же \u2010,

Кроме того, убедитесь, что для свойства дефиса css не задано значение none (значение по умолчанию - вручную).

<wbr> Internet Explorer не поддерживается.

Вы можете использовать 0 ширины пробела после дефиса:

div {
  width: 150px;
}
<div>
  12333-&#8203;2333-&#8203;233-&#8203;23339392-&#8203;332332323
</div>

если вы хотите разрыв строки перед использованием дефиса &#8203;- вместо.

Неразрывный дефис работает хорошо.

HTML Entity (десятичный)

&#8209;
Другие вопросы по тегам