Неразрушающийся, но все еще (ломаный) пробел в HTML? - PullRequest
17 голосов
/ 03 марта 2009

Что я могу использовать в HTML, если я хочу иметь пробел в середине строки, который выглядит как три пробела, но все еще может быть разбит, если строка становится слишком длинной?

Обычные пробелы сжимаются (пробелы выглядят так же, как один пробел), и в неразрывном пробеле (& nbsp) линия не может быть разбита.

Обновление : я думаю, что мне действительно нужен тег «pre», который все еще может разбивать длинные строки (мне нужно отобразить исходный код).

Ответы [ 8 ]

21 голосов
/ 18 августа 2009

У меня действительно есть точный ответ, который вы ищете. Я искал повсюду этот ответ, и никто не предлагал, чтобы он работал идеально. Итак, я придумал решение, попробовал его и был поражен, что оно работает безошибочно!

Гарроу на самом деле был прав (он просто не объяснил это или не принял его полностью). Решение состоит в том, чтобы вместо &nbsp; поставить один &nbsp;<wbr>. Просто выполните простой поиск, замените и добавьте тег <wbr> после каждого &nbsp;. Работает отлично!

Тег <wbr> - это малоизвестный тег, поддерживаемый во всех основных браузерах, который говорит браузеру ставить здесь новую строку ТОЛЬКО если это необходимо.

Обновление: я нашел один браузер, который работает не совсем правильно - IE 8! Они на самом деле достали тег <wbr>! Я решил эту проблему, создав класс, который говорит:

.wbr:before { content: "\200B" }

и вместо замены &nbsp; на &nbsp;<wbr>, замените его следующим:

&nbsp;<wbr><span class='wbr'></span>

В PHP это будет выглядеть так:

$text = str_replace(" ","&nbsp;<wbr><span class='wbr'></span>", $text);

Не забудьте также добавить класс.

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

Если это слишком грязно, другое решение - обменять двойные пробелы на &nbsp;, за которыми следует нормальный пробел. Это будет чередовать &nbsp; и обычные пробелы и работает в моих тестах.

В PHP это будет выглядеть так:

$text = str_replace("  ","&nbsp; ", $text);

Надеюсь, это поможет! Я вложил достаточно исследований в это; Я думал, что должен передать это.

12 голосов
/ 03 марта 2009

А как насчет одного или нескольких пробелов em (& emsp;)? Конечно, это будет зависеть от размера шрифта пользователя. Если это не сработает в вашем дизайне, рассмотрите пробел (& ensp;).

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

4 голосов
/ 03 марта 2009

Не будет ли пробел между двумя неразрывными пробелами?

& NBSP; & NBSP;

3 голосов
/ 03 марта 2009

Как насчет ?

3 голосов
/ 03 марта 2009

Если вы не ориентируетесь на IE (кроме 8, стандартный режим):

<span style="white-space: pre-wrap">   </span>

Для IE <span style="width:3ex"></span> работает в режиме причуд, поэтому объедините их и ...

<span style="width:3ex;white-space:pre-wrap">   </span>

, который, кажется, работает везде, где я пробовал ... кроме стандартов IE7. D'ой!

2 голосов
/ 03 марта 2009

Как насчет двух &nbsp; с обычным пробелом? Единственный недостаток этого (насколько я знаю) заключается в том, что если разрыв строки естественно выпадает на регулярное пространство, у вас будет немного пробела на предыдущей строке из-за неразрывных пробелов, но я не думаю, что это когда-нибудь изменит фактический внешний вид страницы.

0 голосов
/ 20 апреля 2009

это дает 100px в левое пространство между вашим текстом пример пробелов

span style = "margin-left: 100px;"

(n_n)

0 голосов
/ 03 марта 2009

Может быть, лучше сделать шаг назад и спросить, что именно вы пытаетесь визуализировать. Что означает это очень широкое пространство?

...