在<td>标签中换行


136

我想包装一些添加到<td>元素的文本。我试过了style="word-wrap: break-word;" width="15%"。但这不是包装文字。是否必须提供100%的宽度?我还有其他控件要显示,因此只有15%的宽度可用。


1
您正在使用什么HTML?是<td>某些文字... </ td>还是您的TD包含<p>或<span>?另外,当您说它没有换行时,我想您是在文本长于表格宽度的“ 15%”时看到TD的宽度扩大了吗?
scunliffe

我的HTML具有<td>动态文本.. </ td>,并且您对TD扩展的假设是绝对正确的。

Answers:


221

换行TD文本

首先设置表样式

table{
    table-layout: fixed;
}

然后设置TD风格

td{
    word-wrap:break-word
}

5
我想它没有被接受,因为它在chrome中不起作用... :-( Webkit的任何解决方案?
MarcoS 2013年

4
在Chrome浏览器中非常适合我。
Alejandro Riedel 2014年

17
有趣的...在Chrome中,我必须使用white-space: normaltd样式才能使包装起作用(而不是word-wrap:break-word
Jim

3
我可以确认我对Jim的回答也有同样的经验。由于某些原因,Chrome无法响应white-space:normal;
petrosmm

1
white-space: pre-wrap如果需要保留空白,请使用。
eicksl

47

HTML表支持“ table-layout:fixed” css样式,可防止用户代理根据其内容调整列宽。您可能要使用它。


7
我已经尝试过这种解决方案,但是它似乎无法在Chrome中运行。我有一张表格,该表格动态地填充了一个超链接,该超链接是单元格宽度的两倍。'table-layout:fixed'解决了表扩展的问题,但不包装文本;相反,它会继续扩展页面的右侧。我想念什么吗?
VOIDHand 2011年

30

我相信您遇到过桌子的问题22。表格非常适合以表格形式将内容包装起来,它们在“拉伸”方面做得很出色,可以满足其中包含的内容的需求。

默认情况下,表格单元格将拉伸以适合内容……因此您的文本只会使其更宽。

有一些解决方案。

1.)您可以尝试在TD上设置最大宽度。

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

2)您可以尝试将文本放在包装元素(例如,跨度)中并对其设置约束。

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

请注意,尽管旧版本的IE不支持最小/最大宽度。

由于IE本身不支持最大宽度,因此如果要强制它,则需要添加一个hack。有多种添加hack的方法,这只是一种。

在页面加载时,仅对于IE6,获取表的呈现宽度(以像素为单位),然后获取该宽度的15%,并将其作为该列中第一个TD的宽度(或者,如果有标题则为TH)再次以像素为单位。


我有两种方式。但无法包装文字。我正在使用IE6.0

1
嗯,IE6。这增加了复杂性。我将用IE6 hack修改答案。
scunliffe

11

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>


9

这对某些CSS框架(材料设计精简版[MDL])为我工作。

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

td {
  word-wrap: break-word;
}

8

使用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>


3

这真的很好:

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

您可以为所有都使用相同的宽度<div,或者在每种情况下都可以调整宽度以在需要的地方断开文本。

这样,您不必四处寻找固定的表格宽度或复杂的CSS。


1
您可能打算改用CSS,但是在现代HTML中通常避免使用内联样式,尤其是对于每个复制的div一遍又一遍地重复相同的样式时。
TankorSmash

3

我有一些td与:

white-space: pre;

这为我解决了:

white-space: pre-wrap;


1

这可能可行,但在将来的某个时刻(如果不是立即)可能会造成一些麻烦。

<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正如其他人所指出的那样,的理由是,a <td>通常会扩展以容纳内容,而a <span>可以给定-并希望保持设置的宽度;的overflow: hidden打算,但可能不是,隐藏着怎样的否则会导致<td>扩大。

我建议使用titlespan 的属性来显示可视单元格中存在(或剪切)的文本,以便该文本仍然可用(如果您不希望/不需要人们看到它,那么为什么要拥有它首先,我想...)。

另外,如果您为td {...}td 定义了一个宽度,它将扩展(或可能缩小,但我对此表示怀疑)以填充其隐含宽度(如我所见,这似乎是table-width/number-of-cells),则似乎不会创建指定的表宽度同样的问题。

缺点是用于演示的其他标记。


1

实际上,文本换行自动发生在表格中。人们在测试时犯的错误是假设一个长字符串,例如“ ggggggggggggggggggggggggggggggggggggggggggg”,并抱怨说它没有包装。实际上,英语中没有这么长的单词,即使有单词,也很少会在其中使用它<td>

尝试使用“预定条件下的对位是迷信”之类的句子进行测试。


这是对的。无法理解为什么人们建议使用“ white-space:nowrap”,因为这样做与OP想要的恰好相反。
mluisbrown 2010年

29
更正英语中没有这么长的单词,但是假设我正在显示一个filepath,它将是连续且非常长的。
克里斯普(Krisp)2011年

2
..或长逗号分隔的数字列表,例如,不幸的是碰巧没有空格。
Aditya Sanghi 2012年

4
..或长域名,最多可以包含63个字符(不包括扩展名和www), http
//www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/

当“单词”是一个非常长的网址时,我正在尝试解决此问题。上面带有“ gggggggggggggggggggggggggggggggggggggggggggggggggggggggg”示例的注释未考虑长网址。
geekandglitter

0

将类应用于您的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>

我认为OP虽然没有明确说明,但是在包装非空间动态内容方面存在问题。在这种情况下,上述解决方案将无法使用-jsfiddle.net/qZrFW
2013年

-1
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
    border: 1px solid black;
}
</style>
</head>
<body>

<table>
  <tr>
    <th>Poem</th>
    <th>Poem</th>
  </tr>
  <tr>
    <td nowrap>Never increase, beyond what is necessary, the number of entities required to explain anything</td>
    <td>Never increase, beyond what is necessary, the number of entities required to explain anything</td>
  </tr>
</table>

<p>The nowrap attribute is not supported in HTML5. Use CSS instead.</p>

</body>
</html>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.