Как разбить слово после специального символа, такого как дефис (-)

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

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

How do I make it so that the string stays constrained to the width of 150, and wraps to a new line on the hyphen?

Это сработало для вас? Я пробовал это в Firefox, и он полностью удаляет дефис ...

Chris Marasti-Georg 16.10.2008 21:53

"это" означает исправление

Chris Marasti-Georg 16.10.2008 21:54

@ ChrisMarasti-Georg: Я набираю шесть исправлений.

hippietrail 22.11.2012 14:39

Большой пост: kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-c‌ ss

vsync 05.10.2016 17:54
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
75
4
20 356
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

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

&shy;

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

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

... и он не будет отображаться на дисплее, если там не будет фактического перерыва. Так что это бесполезно, если вы хотите, чтобы дефис всегда отображался.

Chris Marasti-Georg 21.10.2008 02:02

Мне было интересно узнать о совместимости &shy; с браузером. Согласно Quirksmode (см. Таблицу совместимости), это хорошо, с единственными проблемами, возникающими в старых браузерах, таких как FF2 и IE5.5-6.

evanrmurphy 24.10.2012 01:05

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

Для записи word-wrap: break-word; не разрывает дефис в Firefox (проверено в v11)

Tim Abell 11.04.2012 19:47

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

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

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

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

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

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

Это не должно иметь значения, правда? Или, если вы не поставите эти промежутки на nowrap.

Zorf 08.06.2010 06:19

В зависимости от того, что именно вы хотите увидеть, вы можете использовать комбинацию 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.

Остерегайтесь несовместимости браузеров. См. Таблицу совместимости здесь: quirksmode.org/oddsandends/wbr.html

Tim Abell 11.04.2012 19:50

Замечу, что &shy; - безусловно лучший вариант. Все остальные, например, нарушают кернинг текста шрифта.

Marius 15.05.2017 16:01

Во всех современных браузерах * (а также в некоторых старые браузеры) <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-объект (десятичный)

&#8209;

Вместо - вы можете использовать &hyphen; или \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-&#8203;2333-&#8203;233-&#8203;23339392-&#8203;332332323
</div>

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

Другие вопросы по теме