HTML表忽略元素样式的宽度

时间:2012-10-25 16:48:10

标签: html html-table

HTML表忽略元素样式宽度

我有一个HTML表格,其中某些单元格有很长的文本内容。

我想使用jQuery为这些单元格指定宽度(以像素为单位),但渲染表只是忽略给定的宽度。

有没有办法强制表格尊重这个宽度?

谢谢!


JSFiddle http://jsfiddle.net/sangil/6hejy/35/

(如果检查单元格,则可以看到计算出的宽度与元素样式宽度不同)


HTML

<div id="tblcont" class="tblcont">
 <table id="pivot_table">
 <tbody>
   <tr>
      <th id="h0" >product</th>
      <th id="h1" >price</th>
      <th id="h2" >change</th>
   </tr>         
   <tr>
      <!-- this is the cell causing trouble -->
      <td id="c00" >Acer 2400 aaaaaaaaaaaaaaaaaaaaaaaaaa</td>
      <td id="c01" >3212</td>
      <td id="c02" >219</td>         

   </tr>
   <tr>
      <td id="c10" >Acer</td>
      <td id="c11" >3821</td>
      <td id="c12" >206</td>         

   </tr>
</tbody>
</table>
</div>

CSS

.tblcont {
  overflow: hidden;
  width: 500px;
}

table {
  table-layout: fixed;
  border-collapse: collapse; 
  overflow-x: scroll; 
  border-spacing:0; 
  width: 100%;
}

th, td {
 overflow: hidden;
 text-overflow: ellipsis;
 word-wrap: break-word;
}

th {
 height: 50px;
}

的Javascript

$(document).ready(function() {

  // THIS LINE HAS NO EFFECT!
  $('#c00').width(30);
});​

4 个答案:

答案 0 :(得分:7)

我可以从你的小提琴中看出,你已经很好地掌握了如何截断这样的词语。我认为您可能会发现执行以下操作很有用:

<table>
  <colgroup>
    <col style="width: 30px;" /> <!-- this style affects the whole 1st column -->
    <col />
    <col />
  </colgroup>

  <!-- the rest of your table here -->
</table>

此方法以符合标准的方式使用HTML规范 - 并将调整整个列的大小。如果您将单元格的display更改为inline-block,如上所述,将会发生的情况是您将单元格从表格流中取出 - 其他样式更改可能会停止工作。

通过使用上面的代码设置整个col的样式,您可以使用table元素的table-layout: fixed样式代替。

此外 - 我注意到您已设置单元格以使用text-overflow: ellipsis;在quirksmode上查看this article以了解它无法正常工作的原因。您需要的修复是进行以下编辑:

th, td {
    border: solid #4682B4 1px;
    overflow: hidden;
    text-overflow: ellipsis;
    word-wrap: break-word;
    text-align: center;

    white-space: nowrap; /* Add this line */
}

答案 1 :(得分:6)

默认情况下,表格单元格符合其内容并忽略您的宽度。

已提供答案的其他可能性:

用其他容器包围文本:

<td id="c00" ><div>Acer 2400 aaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>

改变宽度:

$('#c00 div').width(30);

答案 2 :(得分:2)

你有几个问题:

table-layout: fixed告诉列相等。

然后,即使你把它拿出来,你的文字宽度超过30像素,没有空格,所以它不会比"aaaaaaaaaa"等更窄。你需要让文字变小,或添加空格。

最后,width应为"30px"(引号中)。

希望有所帮助。

答案 3 :(得分:1)

试试这个:

$('#c00').css("width","30px");

或者这个:

<td id="c00" style='width:30px'>

如果您使用的是IE,则可能需要启用兼容模式。另外,请确保导入正确的jQuery插件。