Как я могу принудительно обернуть длинную строку без пробела? - PullRequest
176 голосов
/ 31 января 2009

У меня есть длинная строка (последовательность ДНК). Он не содержит пробельных символов.

Например:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Каким будет CSS-селектор для принудительного переноса этого текста в html:textarea или xul:textbox?

Ответы [ 14 ]

252 голосов
/ 31 января 2009

для блочных элементов:

<textarea style="width:100px; word-wrap:break-word;">
  ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</textarea>

для встроенных элементов:

<span style="width:100px; word-wrap:break-word; display:inline-block;"> 
   ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</span>
101 голосов
/ 18 апреля 2009

Поместите пробелы нулевой ширины в точках, где вы хотите разрешить разрывы. Пространство нулевой ширины &#8203; в HTML. Например:

ACTGATCG&#8203;AGCTGAAG&#8203;CGCAGTGC&#8203;GATGCTTC&#8203;GATGATGC

36 голосов
/ 28 августа 2013

Вот несколько очень полезных ответов:

Как не дать длинным словам сломать мой div?

чтобы сэкономить ваше время, это можно решить с помощью css:

white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP printers */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
word-break: break-all;
18 голосов
/ 13 июля 2010

Для меня это работает,

<td width="170px" style="word-wrap:break-word;">
  <div style="width:140px;overflow:auto">
    LONGTEXTGOESHERELONGDIVGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESHERELONGDIVLONGTEXTLONGTEXT
  </div>
</td>

Вы также можете использовать div внутри другого div вместо td. Я использовал overflow:auto, так как он отображает весь текст в браузерах Opera и IE.

12 голосов
/ 31 января 2009

Я не думаю, что вы можете сделать это с помощью CSS. Вместо этого при обычной «длине слова» вдоль строки вставьте мягкий HTML-дефис:

ACTGATCG&shy;AGCTGAAG&shy;CGCAGTGC&shy;GATGCTTC&shy;GATGATGC&shy;TGACGATG

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

Примечание. В отличие от Firefox, Safari в любом случае оборачивает длинную строку в <textarea>.

10 голосов
/ 14 февраля 2013

Используйте метод CSS для принудительного переноса строки без пробелов. Три метода:

1) Используйте свойство пробела CSS. Чтобы покрыть несоответствия браузера, вы должны объявить это несколькими способами. Так что просто поместите вашу строку в некоторый элемент уровня блока (например, div, pre, p) и присвойте этому элементу следующий css:

some_block_level_tag {
    white-space: pre;           /* CSS 2.0 */
    white-space: pre-wrap;      /* CSS 2.1 */
    white-space: pre-line;      /* CSS 3.0 */
    white-space: -pre-wrap;     /* Opera 4-6 */
    white-space: -o-pre-wrap;   /* Opera 7 */
    white-space: -moz-pre-wrap; /* Mozilla */
    white-space: -hp-pre-wrap;  /* HP Printers */
    word-wrap: break-word;      /* IE 5+ */
}

2) используйте миксин с компрессором Compass .

3) Я просто изучал это, и я думаю, что это может также сработать (но мне нужно более полно проверить поддержку браузера):

.break-me {
    word-wrap: break-word;
    overflow-wrap: break-word;
}

Ссылка: содержимое упаковки

8 голосов
/ 16 сентября 2014

Мой путь (когда нет подходящего способа вставить специальные символы) через CSS:

-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;

Как найдено здесь: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ с некоторыми дополнительными исследованиями, которые можно найти там.

5 голосов
/ 07 декабря 2010

Чтобы word-wrap:break-word; работал на меня, я должен был убедиться, что display был установлен на block, и что ширина была установлена ​​для элемента. В Safari он должен был иметь тег p, а width должен быть установлен в ex.

3 голосов
/ 12 августа 2015
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>
3 голосов
/ 04 января 2011

Если вы используете PHP, тогда функция wordwrap хорошо работает для этого: http://php.net/manual/en/function.wordwrap.php

Решение CSS word-wrap: break-word; не является одинаковым для всех браузеров.

Другие серверные языки имеют аналогичные функции - или могут быть созданы вручную.

Вот как работает функция PHP wordwrap:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

$wrappedstring = wordwrap($string,50,"&lt;br&gt;",true);

Это обернет строку в 50 символов с тегом
. Параметр 'true' заставляет обрезать строку.

...