HTML表忽略元素样式的宽度

san*_*gil 5 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>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$(document).ready(function() {

  // THIS LINE HAS NO EFFECT!
  $('#c00').width(30);
});?
Run Code Online (Sandbox Code Playgroud)

Tro*_*ord 7

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

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

  <!-- the rest of your table here -->
</table>
Run Code Online (Sandbox Code Playgroud)

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

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

另外 - 我注意到你已经设置了单元格使用在quirksmode上text-overflow: ellipsis;查看这篇文章以了解它为什么不起作用.您需要的修复是进行以下编辑:

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

    white-space: nowrap; /* Add this line */
}
Run Code Online (Sandbox Code Playgroud)


小智 6

表格单元格默认适合其内容并忽略您的宽度.

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

用其他容器包围文本:

<td id="c00" ><div>Acer 2400 aaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
Run Code Online (Sandbox Code Playgroud)

并改变其宽度:

$('#c00 div').width(30);
Run Code Online (Sandbox Code Playgroud)

  • 这也是一个非常可行的解决方案.我认为它不适合他的目的 - 但嵌套元素是我经常使用的技巧.然后,您可以执行以下操作:在`:hover`上切换嵌套项的样式,并使内部元素像工具提示一样弹出,等等. (3认同)