2011-04-13 50 views
13

我已经在TD中获得了长文本。我希望它是椭圆化的,但我不想定义这个列的绝对宽度 - 我希望它的父表动态地计算它。可能吗?下面是示例的代码:TD元素的控制溢出

<table width="100%" border="3"> 
<tr> 
<td ><span style="white-space: nowrap; overflow: hidden; 
text-overflow: ellipsis;" > 
Here should be very long text: 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
</span></td> 
</table> 

有什么办法迫使IE浏览器,即使没有与例如绝对宽度定义“跨度”元素来显示省略号:宽度= 300像素?

+0

你是否愿意使用一些JavaScript? – 2011-04-13 11:55:48

+0

顺便说一句 - 在上面的例子中,即使将表格的宽度更改为绝对值(例如width = 900px),它也不会更改任何内容,并且由于单元格文本的长度,表格的大小将超出屏幕大小 – Spiderman 2011-04-13 11:55:56

+0

关于JavaScript - 如果你有一个建议,继续前进,但基本上我宁愿一个基于CSS和HTML布局定义的解决方案 – Spiderman 2011-04-13 11:57:10

回答

34

最佳答案我发现: 与定义包裹TD的长期内容表:
表格的布局:固定”这会奇迹般地解决了这个问题。

看到自己 -

<table width="100%" border="3"> 
<tr> <td> 
<TABLE width=100% cellpadding=0 cellspacing=0 style='table-layout:fixed'><TR> 
<TD style='text-overflow: ellipsis; overflow: hidden; white-space: nowrap;'> 
Here should be very long text: 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
</TD></TR></TABLE> 
</td> 
</table> 
+2

看起来不错,在这里可以看到一个jsfiddle:http://jsfiddle.net/w9mDC/ – 2013-07-08 09:01:25

0

您是否尝试过使用-ms-text-overflow

http://msdn.microsoft.com/en-us/library/ms531174(v=vs.85).aspx

+0

是不是只有.NET框架的一部分?在任何情况下,我都不明白它是如何帮助解决这个用例的。 – Spiderman 2011-04-13 12:58:17

+0

没有。 -ms-text-overflow属性是CSS的扩展,可以在IE8模式下使用。 – 2011-04-13 13:11:03

0
使用jQuery

解决方案...

注: “文本溢出:省略号” 似乎并没有在FF4工作。

演示:http://jsfiddle.net/vgfDd/1/

$w = $('.setWidth').attr('width'); 
$('.setWidth').find('span').width($w); 

CSS ...

table { 
    border: 3px solid black; 
} 

span { 
    display: block; 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
} 

HTML ...

<table width="100px" class="setWidth"> 
    <tr> 
     <td> 
      <span> 
       Here should be very long text: 
       bla bla bla bla bla bla bla 
      </span> 
     </td> 
     <td> 
      <span> 
       Here should be very long text: 
       bla bla bla bla bla bla bla 
      </span> 
     </td> 
    </tr> 
</table> 
1

没有! IE不允许改变表格的显示方式,所以如果你不使用像span这样的元素,文本将不会被剪切。如果您需要使用省略号来剪辑文本,则必须使用绝对宽度的跨度或div等元素。

要自动打开它,您可以使用JavaScript或从表格切换到div。 我希望这可以帮助你。

+0

这很荒谬 - 因为如果我删除属性'white-space:nowrap',IE就会知道考虑表格的宽度并相应地包装文字。所以为什么不能在文本应该被剪辑的情况下做同样的事情呢?但你可能是对的 - IE有点奇怪有时 – Spiderman 2011-04-13 13:13:41

1

我找到了另一种方式工作没有表格的布局:固定。

把你的背景下进入使用输入价值占位属性的TD。

然后样式输入像正常情况下不能编辑。

这将与一个真正灵活的表td宽度。

<table> 
    <tr> 
    <td> 
     <input type="text" value="TitleTitleTitleTitle" /> 
    </td> 
    <td> 
     <input type="text" placeholder="ValueValueValueValue" /> 
    </td> 
    <td> 
     <input type="text" value="NumberNumberNumberNumber" /> 
    </td> 
    </tr> 
</table> 
<style> 
table{ 
    width: 100%; 
} 
td{ 
    input{ 
    display: block; 
    width: 100%; 
    text-overflow: ellipsis; 
    overflow: hidden; 
    -webkit-user-select: none; 
    cursor: default; 
    } 
} 
</style> 
-4

您应该使用<table width="inherit">从它继承其父元素的宽度。

+0

啊哈!谢谢ilmari;将来@Inyavic请用反引号(')围住任何HTML标签,以便它们出现在文本中。没有这个,所有的背景都失踪了。 – 2014-03-02 18:31:42