Як я можу змусити довгу струну без загортання будь-якої порожньої?


193

У мене довга струна (послідовність ДНК). Він не містить символів пробілу.

Наприклад:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Що було б селектором CSS, щоб змусити цей текст бути загорнутим у html:textareaабо в xul:textbox?


17
За іронією долі рядка не розривається і в Stack Overflow ...
splattne

Відповіді:


273

для блокових елементів:

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

для вбудованих елементів:

<span style="width:100px; word-wrap:break-word; display:inline-block;"> 
   ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</span>


Він підтримується лише в IE, Safari та FF3.1 (альфа).
Адам Беллер

1
це працює лише в новій хвилі браузерів - див. caniuse.com/#search=word-break
Michal Bernhard

9
@Michael: у відповіді використовується правило "обгортання слів", а не "слово-перерва"; колишній підтримується, як використовується майже у кожному браузері, який використовується сьогодні. Там, де вказано "часткова підтримка", виявляється, що значення "зламаного слова" для правила "обгортання слів" все ще є життєздатним.
Робусто

2
Майно було перейменовано з overflow-wrapтих пір у стандартах, але wrod-wrapшироко застосовується.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
Також працює з "display: table-cell", в моєму випадку необхідний
César León

107

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

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


4
Гарна пропозиція, сьогодні я дізнався щось нове, дякую!
Маттео Конта

2
Дякую за це рішення. Мені було важко змусити щось подібне працювати всередині таблиці, і це рішення є єдиним, що я знайшов роботи в IE, Firefox та Chrome.
Фарінья

1
+1, це працює краще, оскільки охоплює більше випадків, хоча питання стосувалося більш конкретного випадку.
Монреаліст

2
Можна також використати <wbr>тег, який служить тій самій цілі, щоб забезпечити необов'язковий варіант розриву рядків.
justisb

7
Слідкуйте, якщо ви робите це в речах, які можна скопіювати та вставити.
alex

42

Ось кілька дуже корисних відповідей:

Як не допустити, щоб довгі слова зламали мою діву?

щоб заощадити ваш час, це можна вирішити за допомогою 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;

4
+1 це, оскільки в ньому згадується словозлам: break-all; який працював для мене в IE9
Нік Бенедикт

3
word-break: break-all;був єдиним, хто працював в Android WebView для мене.
Стен

Дякую за word-break: break-all;!
Lonnie Best

18

Для мене це працює,

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

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


Це для мене не вийшло. Я повинен перемістити властивість "word-wrap" у div та видалити властивість "overflow". З цим змінами працює.
danigonlinea

12

Я не думаю, що ти можеш це зробити за допомогою CSS. Замість цього, регулярно 'довжиною слова' вздовж рядка вставляйте HTML-м'який дефіс:

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

Це відобразить дефіс в кінці рядка, де він загортається, що може бути, а може і не бути тим, що ви хочете.

Зауважте, схоже, Safari все-таки обертає довгу струну <textarea>, на відміну від Firefox.


Нічого собі, навіть не знали про це. Акуратно!
Даніель Шаффер

Я про це теж не знав. Подвійний акуратний!
Карл

11

Використовуйте метод CSS, щоб змусити обгортати рядок, на якій немає пробілів. Три методи:

1) Використовуйте властивість CSS-пробілу. Щоб приховати невідповідності браузера, вам потрібно заявити про це декількома способами. Тому просто покладіть рядок looooong в якийсь елемент рівня блоку (наприклад, 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;
}

Довідка: обгортковий вміст


Так, номер 3 працює у всіх сучасних браузерах і навіть у старших IE6 +.
Грейк

1
№3 працює лише за наявності можливостей розбити слова. Занадто довгий рядок не розривається (перевірено на Chrome 52.0.2743.82).
колапс

8

Мій шлях (коли немає відповідного способу вставки спеціальних символів) через 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

Щоб word-wrap:break-word;працювати для мене, я повинен був переконатися, що параметр displayвстановлений block, а ширина задана на елементі. У Safari він повинен був мати pтег, і його widthпотрібно було встановити ex.


3

Якщо ви використовуєте PHP, функція wordwrap для цього добре працює: http://php.net/manual/en/function.wordwrap.php

Рішення CSS word-wrap: break-word;Здається, що не відповідає всім браузерам.

Інші мови на сервері мають подібні функції - або їх можна створити вручну.

Ось як працює функція перенесення слів PHP:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Це обертає рядок на 50 символів тегом <br>. Параметр 'true' змушує різати рядок.


Ви можете змішати це рішення з рішенням Ремі, щоб вставити пробіли нульової ширини: wordwrap ($ longtext, 5, "& # 8203;", true);
МВ.

3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

3

Використовувати <wbr>тег:

ACTGATCG<wbr>AGCTGAAG<wbr>CGCAGTGC<wbr>GATGCTTC<wbr>GATGATGC

Я думаю, що це краще, ніж використовувати простір нульової ширини, &#8203;який може спричинити проблеми при копіюванні тексту.


2

У випадку, коли таблиця не має фіксованого розміру, внизу рядок для мене працював:

style="width:110px; word-break: break-all;"

1

просто налаштування widthта додавання floatпрацювали для мене :-)

width:100%;
float:left;

Це повна і проста відповідь, я думаю, що хлопець, який опублікував цю проблему, спочатку повинен використовувати ширину: 100%; з поплавком: зліва; на елементі, який містить цей рядок, і його проблема буде вирішена. Тоді чому ця відповідь не актуальна?
TechBrush.Org

тому що той хлопець, який опублікував цю проблему, не вважає, що ваше рішення працювало п’ять років тому.
П'єр

2
Так, але цей форум стосується не лише цього хлопця, а лише його форуму та інших людей, які стикаються з подібною проблемою, як я сьогодні, також можуть отримати користь від цього ж.
TechBrush.Org
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.