Оберните текст тегом ‹td›

Я хочу обернуть некоторый текст, который добавляется к элементу <td>. Я пробовал с style="word-wrap: break-word;" width="15%". Но это не перенос текста. Обязательно ли указывать ширину 100%? У меня есть другие элементы управления для отображения, поэтому доступно только 15% ширины.


person Community    schedule 29.06.2009    source источник
comment
Какой HTML вы используете? это ‹td›какой-то текст...‹/td› или ваш TD содержит ‹p› или ‹span›? Кроме того, когда вы говорите, что это не перенос, я предполагаю, что вы видите, как TD расширяется по ширине, когда текст длиннее 15% ширины таблиц?   -  person scunliffe    schedule 29.06.2009
comment
В моем HTML есть динамический текст ‹td›.. ‹/td›, и ваши предположения о расширении TD абсолютно верны.   -  person    schedule 29.06.2009


Ответы (13)


Перенос текста TD

Стиль стола первого набора

table{
    table-layout: fixed;
}

затем установите стиль TD

td{
    word-wrap:break-word
}
person Jitender Mahlawat    schedule 29.05.2012
comment
Почему это не принятый ответ? Это сработало отлично для меня! Спасибо друг. - person Rorchackh; 30.11.2012
comment
Я полагаю, что это не принято, потому что оно не работает в Chrome... :-( Любое решение для webkit? - person MarcoS; 13.08.2013
comment
Отличный ответ, это сделало это для меня. Я использую Хром. - person ; 15.02.2014
comment
У меня отлично работало в Chrome. - person Alejandro Riedel; 15.04.2014
comment
Интересно... В Chrome мне пришлось использовать white-space: normal в стиле td, чтобы заставить работать перенос (вместо word-wrap:break-word) - person Jim; 20.10.2015
comment
Я могу подтвердить, что у меня был такой же опыт с ответом Джима. По какой-то причине Chrome не отвечает без white-space:normal; - person petrosmm; 26.07.2017
comment
Используйте white-space: pre-wrap, если вам нужно сохранить пробелы. - person eicksl; 03.11.2018
comment
Верно и для Firefox. white-space: normal — это все, что мне было нужно, чтобы обернуть текст внутри TD. - person alfadog67; 04.06.2020
comment
Это не работает для меня, если данные не содержат пробелов. Столбец остается правильной ширины, но данные выходят за пределы столбца и перекрывают данные в других столбцах. - person MikeKulls; 08.10.2020

Таблицы HTML поддерживают стиль css "table-layout:fixed", который не позволяет пользовательскому агенту адаптировать ширину столбцов к их содержимому. Возможно, вы захотите его использовать.

person Alsciende    schedule 30.06.2009
comment
Я пробовал это решение, но, похоже, оно не работает в Chrome. У меня есть таблица, которая динамически заполняется гиперссылкой, ширина которой более чем в два раза превышает ширину ячейки. table-layout:fixed решает проблему с растягиванием таблицы, но не переносит текст; вместо этого он продолжает растягиваться справа от страницы. Я что-то упускаю? - person VOIDHand; 03.11.2011

Я полагаю, вы столкнулись с ловушкой 22 таблиц. Таблицы отлично подходят для упаковывания содержимого в табличную структуру, и они прекрасно «растягивают» содержимое, чтобы оно соответствовало потребностям содержащегося в нем содержимого.

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

Есть несколько решений.

1.) Вы можете попробовать установить максимальную ширину на TD.

<td style="max-width:150px;">

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

<td><span style="max-width:150px;">Hello World...</span></td>

Имейте в виду, что более старые версии IE не поддерживают минимальную/максимальную ширину.

Поскольку IE изначально не поддерживает максимальную ширину, вам нужно будет добавить хак, если вы хотите заставить его это сделать. Есть несколько способов добавить хак, это только один.

При загрузке страницы, только для IE6, получите отображаемую ширину таблицы (в пикселях), затем получите 15% от нее и примените ее как ширину к первому TD в этом столбце (или TH, если у вас есть заголовки) снова в пикселях. .

person scunliffe    schedule 29.06.2009
comment
У меня в обоих случаях. Но не в состоянии обернуть текст. Я использую IE6.0 - person ; 29.06.2009
comment
ах, IE6. Это добавляет сложности. Я пересмотрю свой ответ с помощью взлома IE6. - person scunliffe; 29.06.2009

используйте word-break, его можно использовать без стилей от table до table-layout: fixed

table {
  width: 140px;
  border: 1px solid #bbb
}

.tdbreak {
  word-break: break-all
}
<p>without word-break</p>
<table>
  <tr>
    <td>LOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG</td>
  </tr>
</table>

<p>with word-break</p>
<table>
  <tr>
    <td class="tdbreak">LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG</td>
  </tr>
</table>

person ewwink    schedule 15.06.2018
comment
Единственное решение, которое не полностью уничтожило размеры и выравнивание текста в моих ячейках - спасибо - person velkoon; 25.04.2021

table-layout:fixed решит проблему с расширяющейся ячейкой, но создаст новую. IE по умолчанию скрывает переполнение, но Mozilla отображает его нестандартно.

Другим решением было бы использовать: overflow:hidden;width:?px

<table style="table-layout:fixed; width:100px">
 <tr>
   <td style="overflow:hidden; width:50px;">fearofthedarkihaveaconstantfearofadark</td>
   <td>
     test
   </td>
 </tr>
</table>
person Costin    schedule 18.06.2010

.tbl {
    table-layout:fixed;
    border-collapse: collapse;
    background: #fff;
 }

.tbl td {
    text-overflow:ellipsis;
    overflow:hidden;
    white-space:nowrap;
}

Кредиты http://www.blakems.com/archives/000077.html

person Sam A.    schedule 28.07.2010

Это работало для меня с некоторыми фреймворками css (облегченный дизайн материалов [MDL]).

table {
  table-layout: fixed;
  white-space: normal!important;
}

td {
  word-wrap: break-word;
}
person All Іѕ Vаиітy    schedule 22.09.2016

Это работает очень хорошо:

<td><div style = "width:80px; word-wrap: break-word"> your text </div></td> 

Вы можете использовать одинаковую ширину для всех ваших <div или настроить ширину в каждом случае, чтобы разбить текст там, где вам нравится.

Таким образом, вам не придется возиться с фиксированной шириной таблицы или сложным CSS.

person Betty Mock    schedule 15.08.2016
comment
Возможно, вместо этого вы хотели использовать CSS, но в современном HTML обычно избегают встроенных стилей, особенно если вы повторяете одни и те же стили снова и снова для каждого скопированного элемента div. - person TankorSmash; 17.03.2017

У меня были некоторые из моих td с:

white-space: pre;

Это решило это для меня:

white-space: pre-wrap;
person MikeL    schedule 19.01.2020

Чтобы сделать ширину ячейки точно такой же, как самое длинное слово текста, просто установите ширину ячейки на 1px

i.e.

td {
  width: 1px;
}

Это экспериментальный и я узнал об этом в процессе проб и ошибок.

Живая скрипка: http://jsfiddle.net/harshjv/5e2oLL8L/2/

person Harsh Vakharia    schedule 25.10.2014

Возможно, это сработает, но в какой-то момент в будущем (если не сразу) это может оказаться неприятностью.

<style> 
tbody td span {display: inline-block;
               width: 10em; /* this is the nuisance part, as you'll have to define a particular width, and I assume -without testing- that any percent widths would be relative to the containing `<td>`, not the `<tr>` or `<table>` */
               overflow: hidden; 
               white-space: nowrap; }

</style>

...

<table>

<thead>...</thead>
<tfoot>...</tfoot>

<tbody>

<tr>

<td><span title="some text">some text</span></td> <td><span title="some more text">some more text</span></td> <td><span title="yet more text">yet more text</span></td>

</tr>

</tbody>

</table>

Обоснование span заключается в том, что, как указывали другие, <td> обычно расширяется для размещения содержимого, тогда как <span> может быть задана - и ожидается, что она сохранит - заданную ширину; overflow: hidden предназначено, но может и не скрывать то, что в противном случае привело бы к расширению <td>.

Я бы рекомендовал использовать свойство title диапазона, чтобы показать текст, который присутствует (или обрезан) в визуальной ячейке, чтобы текст все еще был доступен (и если вы не хотите/не нуждаетесь в том, чтобы люди его видели, то зачем это в первую очередь, я думаю...).

Кроме того, если вы определите ширину для td {...}, td будет расширяться (или потенциально сжиматься, но я сомневаюсь в этом), чтобы заполнить подразумеваемую ширину (как я вижу, это кажется table-width/number-of-cells), указанная ширина таблицы не кажется создать такую ​​же проблему.

Недостатком является дополнительная разметка, используемая для представления.

person David says reinstate Monica    schedule 29.06.2009

На самом деле перенос текста в таблицах происходит автоматически. Ошибка, которую люди совершают во время тестирования, заключается в том, что они гипотетически предполагают длинную строку, например «gggggggggggggggggggggggggggggggggggggggggggggggg», и жалуются, что она не переносится. В английском языке практически нет такого длинного слова, и даже если оно есть, есть небольшой шанс, что оно будет использоваться в этом <td>.

Попробуйте проверить с помощью таких предложений, как «Противоположность суеверна при заранее определенных обстоятельствах».

person John    schedule 08.12.2010
comment
Это верно. Не могу понять, почему люди предлагают использовать white-space:nowrap, поскольку это будет делать прямо противоположное тому, что хочет OP. - person mluisbrown; 17.12.2010
comment
правильно, нет слова на английском, что это так долго, но предположим, что я показываю путь к файлу, который будет непрерывным и очень длинным. - person krisp; 02.05.2011
comment
..Или, например, длинный список чисел, разделенных запятыми, в котором, к сожалению, нет пробелов. - person Aditya Sanghi; 09.06.2012
comment
.. Или длинное доменное имя, которое может содержать до 63 символов (исключая расширение и www) ком/ - person Brainfeeder; 10.04.2013
comment
Я пытаюсь решить эту проблему, когда слово является очень длинным URL-адресом. Комментарий выше с примером ggggggggggggggggggggggggggggggggggggggggggggggg не учитывает длинные URL-адреса. - person geekandglitter; 05.05.2019

Примените классы к своим TD, примените соответствующую ширину (не забудьте оставить одну из них без ширины, чтобы она принимала оставшуюся часть ширины), затем примените соответствующие стили. Скопируйте и вставьте приведенный ниже код в редактор и просмотрите его в браузере, чтобы увидеть, как он работает.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
<!--
td { vertical-align: top; }
.leftcolumn { background: #CCC; width: 20%; padding: 10px; }
.centercolumn { background: #999; padding: 10px; width: 15%; }
.rightcolumn { background: #666; padding: 10px; }
-->
</style>
</head>

<body>
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="leftcolumn">This is the left column. It is set to 20% width.</td>
    <td class="centercolumn">
        <p>Hi,</p>
        <p>I want to wrap a text that is added to the TD. I have tried with style="word-wrap: break-word;" width="15%". But the wrap is not happening. Is it mandatory to give 100% width ? But I have got other controls to display so only 15% width available.</p>
        <p>Need help.</p>
        <p>TIA.</p>
    </td>
    <td class="rightcolumn">This is the right column, it has no width so it assumes the remainder from the 15% and 20% assumed by the others. By default, if a width is applied and no white-space declarations are made, your text will automatically wrap.</td>
  </tr>
</table>
</body>
</html>
person Elle    schedule 29.06.2009
comment
Я считаю, что ОП, хотя и не заявляет об этом прямо, имеет проблемы с переносом динамического содержимого без пробелов. В этом случае приведенное выше решение не будет работать — jsfiddle.net/qZrFW - person user66001; 18.03.2013