Дискреционный разрыв строки в HTML?
Я ищу способ указать, где строка должна сломаться , если она не может поместиться на своей строке способом, подобным ­
(soft/discretionary dehen), но с пробелом, Я пробовал искать его, но не получал много соответствующих хитов (в основном для InDesign, несмотря на указание "html" ), и то, что я действительно получал, было несколько человек, говорящих, что они не знали об этом.
Исх.
Привет, мое имя
это foo.
vs.
Привет,
Мое имя - foo.
, но если доступно пространство:
Привет, меня зовут foo.
Для специфичности я не имею в виду white-space: normal/nowrap/pre/…
, и я не хочу, чтобы сделать разрыв, как с <br />
.
Я использую AngularJS, поэтому большинство из них обрабатывается через JavaScript, поэтому, если есть простой/эффективный/умный способ сделать это с этим, я буду открыт для него.
Ответы
Ответ 1
Чтобы указать, где разрыв строки не должен отображаться между словами, используйте слово NO-BREAK SPACE или " " между словами. Любое нормальное пространство прерывается. Таким образом, вы можете написать, например.
Hello, my name is foo.
Если вы предпочитаете указывать разрешенные перерывы (в соответствии с вашим комментарием ниже), вы можете обернуть текст внутри элемента nobr
(нестандартного, но работает как шарм) или внутри любого элемента, для которого вы установили white-space: nowrap
, тем самым запрещая разрывы строк, за исключением случаев, когда они явно принудительно или разрешены. Затем вы использовали тег <wbr>
(нестандартный, но...) или ссылку на символ ​
или ​
(для ледового ZERO WIDTH SPACE) после пробела, чтобы разрешить разрыв строки, например
<nobr>Hello, <wbr>my name <wbr>is foo.</nobr>
Выбор между <wbr>
и ZERO WIDTH SPACE является сложной проблемой, главным образом из-за особенностей IE.
Ответ 2
Вы можете использовать тег <wbr>
.
EDIT: Как уже упоминалось в комментариях, вы можете использовать пространство с нулевой шириной: ​
(См. также: Что противоположно nbsp?)
Ответ 3
Я не думаю, что есть какой-нибудь родной способ сделать это, но вот хак, который я использовал, когда мне действительно нужно такое:
var str = "Hello,<br>My name is foo.";
str = str.replace(/ /g, ' ').replace(/<br>/g, ' ');
В принципе, используйте неразрывное пространство для разделения слов, которые вы не хотите сломать.
Смотрите здесь в действии: http://jsfiddle.net/5xmt6/ (измените размер окна, чтобы увидеть, как он реагирует).
Примечание: это очень опасно и представляет собой собственный набор проблем; а именно: если окно просмотра становится очень узким, остальная часть текста не будет завершена.