Як слова обгортати текст у HTML?


185

Як можна загортати текст, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaякий перевищує ширину div(скажімо 200px)?

Я відкритий для будь-якого рішення, такого як CSS, jQuery тощо.

Відповіді:


240

Спробуйте це:

div {
    width: 200px;
    word-wrap: break-word;
}

1
Я помиляюсь, або обробка слів - це пристосованість CSS3?
Габ Ройер

13
Це CSS3, але він працює майже у всіх основних браузерах, включаючи IE5.5 -> 9 - caniuse.com/#search=word-wrap
Джон Хадлі

32
Коли обгортання слів: перерва-слово; не працює спробуйте перерву слова: break-all; / * цей вбивця * /
повточка

@redochka Але при використанні word-break: break-all;у звичайному тексті він розбиває слова посередині, що некрасиво ... Чи не можемо ми поєднати обидві поведінки?
pawamoy

5
Важливо: Це є word-break: break-allі ні word-wrap: break-all. Легка помилка
Simon_Weaver

58

На завантажувальному пристрої 3 переконайтеся, що пробіл не встановлено як "nowrap".

div {
  width: 200px;
  word-break: break-all;
  white-space: normal;
}

Чудово. Я спробував використати слово "перерва": "зламати все" на корпусі панелі Twitter Bootstrap 3, але він ніколи не працював. Додавання пробілу: нормальним було виправлення.
coolboyjules

5
Приємно, мені white-space: normal;теж потрібно було, перш ніж це спрацювало.
radbyx

56

Ви можете використовувати м'який дефіс так:

aaaaaaaaaaaaaaa­aaaaaaaaaaaaaaa

Це відобразиться як

aaaaaaaaaaaaaaa-
aaaaaaaaaaaaaaa

якщо поле, що містить, недостатньо велике, або як

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

якщо це.


18
Але як ви дізнаєтесь, куди поставити ­?
Костас

Ви розміщуєте це довгими словами, де вони можуть бути розбиті. Ви навіть можете отримати цю інформацію автоматично з відповідного словника.
Кім Стебель

4
Але як щодо гнучкості, як у прикладі? Це нормально перетворити aaaaaa...aaaaaна a­a­a­a­a­a­a...a­a­a­a?
Костас

19
Саме те, що я шукав. Мені подобається, що занадто сором'язливо робити що-небудь, поки це не доведеться ;-)
w00t

3
це добре працює, якщо слово, яке слід обернути, - це надмірно.long.java.package.name або інша схожа рядок з багатьма крапками. тоді ви можете додати & shy; після кожної крапки.
dokaspar

28
   div {
    // set a width
    word-wrap: break-word
}

' word-wrap' Рішення працює лише в IE та браузерах, що підтримують CSS3.

Найкраще рішення крос-браузера - використовувати мову вашого сервера (php або будь-яку іншу) для пошуку довгих рядків і розміщення всередині них через рівні проміжки часу ​ .

напр

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa​aaaaaaaaaaaaaaaaaaaaaaaaaaaaa

8
"розміщуйте всередині них через рівні проміжки часу html-об'єкт №8203", але тоді, коли ви спробуєте скопіювати текст і вставити його кудись, у вас з’явиться випадковий символ Unicode в середині
user102008

9

Єдиний, який працює в IE, Firefox, chrome, safari і opera, якщо в слові немає пробілів (наприклад, довга URL-адреса), є:

div{
    width: 200px;  
    word-break: break-all;
}

Я виявив це куленебезпечним.


9

Це працювало для мене

word-wrap: normal;
word-break: break-all;
white-space: normal;
display: block;
height: auto;
margin: 3px auto;
line-height: 1.4;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;

6

Ще одним варіантом є використання:

div
{
   white-space: pre-line;
}

Це встановить усі ваші елементи div у всіх браузерах, які підтримують CSS1 (що майже всі звичайні браузери аж до IE 8)


Якщо у вас є <pre>елемент , який ви хочете мати перенесення слів, це працює і word-breakчи word-wrapнемає.
Плутон

4

Крос-браузер

.wrap
{
    white-space: pre-wrap; /* css-3 */    
    white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
    white-space: -pre-wrap; /* Opera 4-6 */    
    white-space: -o-pre-wrap; /* Opera 7 */    
    word-wrap: break-word; /* Internet Explorer 5.5+ */
}

2

Додайте цей CSS до абзацу.

style="width:420px; 
min-height:15px; 
height:auto!important; 
color:#666; padding: 1%; 
font-size: 14px; 
font-weight: normal;
word-wrap: break-word; 
text-align: left" 

2
Мені подобається text-overflow:ellipsisнаступний хлопець, але це неправильна відповідь на це питання. Він дивиться, щоб перегорнути слова, а не обрізати перелив.
Спудлі

1

Приклад з фокусів CSS :

div {
    -ms-word-break: break-all;

    /* Be VERY careful with this, breaks normal words wh_erever */
    word-break: break-all;

    /* Non standard for webkit */
    word-break: break-word;

    -webkit-hyphens: auto;
    -moz-hyphens: auto;
    hyphens: auto;
}

Більше прикладів тут .


0

Рішення серверного боку, яке працює для мене, - це: $message = wordwrap($message, 50, "<br>", true);де $messageпеременная рядка, що містить слово / символи для розбиття. 50 - максимальна довжина будь-якого сегменту, і "<br>"це текст, який потрібно вставити кожні (50) символів.


4
Це рішення не буде працювати, якщо ширина символів у 50 разів перевищує необхідний максимум 200 пікселів. Просто скористайтеся функцією масштабування вашого браузера, і ви зрештою побачите, що він зламається ...
dokaspar

0

Спробуйте це

div{
  display: block;
  display: -webkit-box;
  height: 20px;
  margin: 3px auto;
  font-size: 14px;
  line-height: 1.4;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

текст-переповнення властивості: ellipsis add ... і рядок-затискач показують кількість рядків.


0

У тілі HTML спробуйте:

<table>
    <tr>
        <td>
            <div style="word-wrap: break-word; width: 800px">
                Hello world, how are you? More text here to see if it wraps after a long while of writing and it does on Firefox but I have not tested it on Chrome yet. It also works wonders if you have a medium to long paragraph. Just avoid writing in the CSS file that the words have to break-all, that's a small tip.
            </div>
        </td>
    </tr>
</table>

У тілі CSS спробуйте:

background-size: auto;

table-layout: fixed;


0

Я використав bootstrap. Мій html-код виглядає як ..

<div class="container mt-3" style="width: 100%;">
  <div class="row">
    <div class="col-sm-12 wrap-text">
      <h6>
        text content
      </h6>
    </div>
  </div>
</div>

CSS

.wrap-text {
     text-align:justify;
}

У Bootstrap є text-justifyклас, тому ви можете використовувати його замість.wrap-text
barbsan



-2

Використовуйте word-wrap:break-wordатрибут разом із необхідною шириною. Головним чином, покладіть ширину в пікселі, а не у відсотках.

width: 200px;
word-wrap: break-word;

14
Це ідентично відповіді вище. Навіщо турбуватися?
trgraglia
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.