Как обернуть текст без пробелов внутри <td>?

89

Я использовал:

word-break:break-all;
table-layout:fixed;

и текст переносится в Chrome, но не в Firefox.

Обновление: я решил изменить дизайн, чтобы он не нуждался в обертке; Попытка разобраться с исправлением / взломом CSS оказалась слишком сложной и отнимала много времени.

FunLovinCoder
источник

Ответы:

202

Попробуйте это, я думаю, это сработает для чего-то вроде "AAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGGG"

AARRRRRRRRRRRRRRRRRRRR
RRGGGGGGGGGGGGGGGGGGGG
G

Я взял свой пример с нескольких разных сайтов в Google. Я тестировал это на ff 5.0, IE 8.0 и Chrome 10.

.wrapword {
    white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
    white-space: -webkit-pre-wrap;          /* Chrome & Safari */ 
    white-space: -pre-wrap;                 /* Opera 4-6 */
    white-space: -o-pre-wrap;               /* Opera 7 */
    white-space: pre-wrap;                  /* CSS3 */
    word-wrap: break-word;                  /* Internet Explorer 5.5+ */
    word-break: break-all;
    white-space: normal;
}
<table style="table-layout:fixed; width:400px">
    <tr>
        <td class="wrapword">
        </td>
    </tr>
</table>
Стирлинг
источник
10
Ой !! Это заставит взломать ЛЮБОЕ слово в произвольных точках, даже если оно не нужно. Есть ли обходной путь, чтобы эти слова разрыва были ТОЛЬКО, когда это необходимо, чтобы не превышать ширину контейнера? То есть, чтобы он работал так, как "word-wrap: break-wird" должен работать в первую очередь, если он не содержит ошибок?
matteo
1
@matteo этот ответ сработал для меня лучше именно по этой причине: stackoverflow.com/a/18706058/234132
dochoffiday
2
Проблему word-break: break-word;
принудительного
1
Я подписался на переполнение стека, чтобы это понравилось
falky
24

Используйте CSS3 word-wrap: break-word;. Также работает в браузерах на базе WebKit (Safari, Chrome).

Обновление : я забыл, однако, рассматриваемый элемент должен быть либо неявно, либо явно позиционирован как фиксированный элемент или отображаться как блочный элемент. Для ячеек таблицы ( td) используйте display: inline-block;.

BalusC
источник
1
Я попробовал оба (по отдельности), но, к сожалению, они очень сильно испортили форматирование таблицы.
FunLovinCoder,
Моя плохая, пользуйся display: inline-block;.
BalusC
13

Вот расширенная версия того, о чем просил OP.

Иногда случается так, что наш клиент хочет, чтобы мы поставили «-» после разрыва слова до конца строки.

подобно

AAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBB

перерыв на

AAAAAAAAAAAAAAAAAAAAAAA-
BBBBBBBBB

Итак, есть новое свойство CSS, если оно поддерживается, обычно поддерживается в последних версиях браузеров.

.dont-break-out {

  /* These are technically the same, but use both */
  overflow-wrap: break-word;
  word-wrap: break-word;

  -ms-word-break: break-all;
  /* This is the dangerous one in WebKit, as it breaks things wherever */
  word-break: break-all;
  /* Instead use this non-standard one: */
  word-break: break-word;

  /* Adds a hyphen where the word breaks, if supported (No Blink) */
  -ms-hyphens: auto;
  -moz-hyphens: auto;
  -webkit-hyphens: auto;
  hyphens: auto;

}

Я использую этот.

Надеюсь, у кого-то будет такой спрос.

Рахул
источник
11

Для автоматического макета таблицы попробуйте стилизовать соответствующий td, сочетая атрибуты max-width и word-wrap.

Например: <td style="max-width:175px; word-wrap:break-word;"> ... </td>

Протестировано в Firefox 32, Chrome 37 и IE11.

XDM
источник
Не понимаю почему, но работает только с max-width, а не с width. Тем не менее, лучшее решение для меня, потому что оно не разбивает слова в произвольных точках.
Разиэль
Также досадно, что проценты не работают
yfeleke
4

Вы можете вручную ввести пробелы нулевой ширины (& # 8203;) для создания точек останова.

Kingjeffrey
источник
1
Также существует нестандартный HTML-тег <wbr>[для «разрыва слова»]. Вот поддержка браузером для этого и &#8203;решение: quirksmode.org/oddsandends/wbr.html
kingjeffrey
3

Установите ширину столбца для tdтега.

Черная лягушка
источник
0

Я думаю, что это давняя проблема Firefox, которая восходит к Mozilla и Netscape. Готов поспорить, у вас возникла проблема с отображением длинных URL-адресов. Я думаю, что это проблема механизма рендеринга, а не то, что вы можете исправить с помощью CSS без каких-либо уродливых хаков.

Имеет смысл изменить дизайн.

Хотя это выглядело обнадеживающим: http://hacks.mozilla.org/2009/06/word-wrap/

Dunxd
источник
0

Я использую Angular для своего проекта, и мне удалось решить эту проблему с помощью простого фильтра:

Шаблон:

<td>{{string | wordBreak}}</td>

Фильтр:

app.filter('wordBreak', function() {
    return function(string) {
        return string.replace(/(.{1})/g, '$1​');
    }
})

Вы не можете его видеть, но после $1этого появляется невидимое пространство (спасибо @kingjeffrey за подсказку), которое позволяет разбивать слова на ячейки таблицы.

Джеффри Розендал
источник
-1

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

Я знаю, это хак ... но если НИЧЕГО еще не работает, это должно быть завершено без проблем.

Armstrongest
источник
2
Это так взломано, так что нарушить правильную индексацию и так сложно реализовать, это вообще не должно быть ответом :-)
Capsule