【问题标题】:Using CSS td width absolute, position使用 CSS td width absolute, position
【发布时间】:2013-01-23 19:41:15
【问题描述】:

请看这个JSFIDDLE

td.rhead { width: 300px; }

为什么 CSS 宽度不起作用?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

另外,position:fixed、absolute 等对 td 宽度有什么影响(如果有的话)?我正在寻找一个不仅仅是解决问题的原因。我希望了解它是如何工作的。

【问题讨论】:

  • display: table-cell 不尊重width(就像它不适用于display: inline)。我不明白你在问什么position fixed|absolute
  • @ExplosionPills 因为在我的实际代码中,我将表格设置为固定。你可以猜到,我试图在页面顶部实现时间线。所以我只是说明位置属性会影响宽度。

标签: html css html-table


【解决方案1】:

尝试使用

table {
  table-layout: auto;
}

如果你使用 Bootstrap,table 类默认有table-layout: fixed;

【讨论】:

    【解决方案2】:

    从 div 中的第一个单元格包装内容,例如像这样:

    HTML:

    <td><div class="rhead">a little space</div></td>
    

    CSS:

    .rhead {
      width: 300px;
    }
    

    这是jsfiddle

    【讨论】:

      【解决方案3】:

      使用表格布局属性和表格上的“固定”值。

      table {
         table-layout: fixed;
         width: 300px; /* your desired width */
      }
      

      设置完表格的整个宽度后,您现在可以设置宽度为 td 的百分比。

      td:nth-child(1), td:nth-child(2) {
         width: 15%;  
      }
      

      您可以通过以下链接了解更多信息:http://www.w3schools.com/cssref/pr_tab_table-layout.asp

      【讨论】:

        【解决方案4】:

        如果表格宽度为 100%,请尝试在 td 上使用百分比宽度,例如 20%。

        【讨论】:

          【解决方案5】:

          你最好使用table-layout: fixed

          Auto 是默认值,对于大型表格可能会导致一些客户端延迟,因为浏览器会遍历它以检查所有尺寸是否合适。

          Fixed 要好得多,并且可以更快地呈现到页面。表格的结构取决于表格的整体宽度和每列的宽度。

          这里适用于原始示例:JSFIDDLE,您会注意到其余列被压碎并重叠其内容。我们可以用更多的 CSS 来解决这个问题(我所要做的就是在第一个 TR 中添加一个类):

              table {
                  width: 100%;
                  table-layout: fixed;
              }
          
              .header-row > td {
                  width: 100px;
              }
          
              td.rhead {
                  width: 300px
              }
          

          在这里看到实际操作:JSFIDDLE

          【讨论】:

            【解决方案6】:

            你也可以使用:

            .rhead {
                width:300px;
            }
            

            但这仅适用于某些浏览器,如果我没记错的话 IE8 不允许这样做。总的来说,将width="" 属性放在&lt;td&gt; 本身中会更安全。

            【讨论】:

              【解决方案7】:

              我的疯狂解决方案。)

              $(document).ready(function() {
                  $("td").each(function(index) { 
                  var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
                  $(this).html(htmlText);
                });
              });
              

              【讨论】:

                【解决方案8】:

                原因,是因为你没有指定表格的宽度,你的一堆td都溢出了。

                This for example,我给表格设置了 5000px 的宽度,我认为这符合您的要求。

                table{
                    width:5000px;
                }
                

                这与您提供的代码完全相同,我只是在表格宽度中添加了。

                我相信正在发生的事情是因为您的 TD 超出了默认表格宽度。你可以看到,如果你在每个 tr 中取出大约 45 个 td,(即你在问题中提供的代码,而不是 jsfiddle)它工作得很好

                【讨论】:

                • +1 表示存在表格宽度阈值。问题是有时我们事先不知道整体宽度。默认表格宽度是多少?
                • 其实我也不知道。我所知道的是,如果你有太多列,表格会被压扁,使所有子节点的宽度都变得毫无用处。我以前遇到过这种情况,但我还没有找到默认值。也许我应该问这个问题。
                • 我相信我解决了这个问题stackoverflow.com/questions/14767459/…
                • 这是实际答案,而不是高度评价的答案。只有在内容没有溢出整个表格宽度的情况下才能设置宽度。
                【解决方案9】:

                它在您提供的链接中不起作用的原因是因为您试图显示一个 300 像素的列加上 52 列,每列跨越 7 列。减少列数,它可以工作。你不能在屏幕上放那么多。

                如果您想强制列适合尝试设置:

                body {min-width:4150px;}
                

                见我的 jsfiddle:http://jsfiddle.net/Mkq8L/6/ @mike 我还不能发表评论。

                【讨论】:

                • +1 用于发现表格宽度阈值随着正文宽度的增加而增加。
                【解决方案10】:

                这可能不是你想听到的,但display: table-cell 不尊重宽度,会根据整个表格的宽度折叠。您可以通过在您指定宽度的表格单元格本身内添加一个 display: block 元素来轻松解决这个问题,例如

                <td><div style="width: 300px;">wide</div></td>
                

                如果&lt;table&gt; 本身是position: fixed 或绝对值,这应该没有太大区别,因为单元格的位置相对于表格都是静态的。

                http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

                编辑:我不能相信,但正如 cmets 所说,您可以在表格单元格上使用 min-width 而不是 width

                【讨论】:

                • +1 - 我以前使用过这种解决方法。奇怪的是,TD 上的 min-width 似乎在 Chrome 和 FF 中有效:jsfiddle.net/Mkq8L/7
                • 其实和往常一样,在发布问题后,我发现min-width: 300px 有效! (@TimMedora 你快了几秒!)
                • 我认为最好的答案是提及 display: table-cell 行为。谢谢!
                • 这种行为对我来说很有意义:如果为同一列上的两个单元格设置两个不同的宽度会发生什么? min-width 没问题,取最大的。
                • 这是一个hack,我不推荐它。组合的 td 宽度超出了表格宽度。这就是问题。您不应该通过添加更多 HTML 结构来解决此问题。
                【解决方案11】:

                试试这个吧。

                <table>
                <thead>
                <tr>
                <td width="300">need 300px</td>
                

                【讨论】:

                • 哇!谢谢♥
                • 请添加一些解释,说明此代码为何/如何帮助 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅this Meta question and its answers 了解更多信息。
                • 请注意 HTML5 中不推荐使用 的 width 属性。
                猜你喜欢
                • 2018-09-21
                • 2023-01-25
                • 1970-01-01
                • 1970-01-01
                • 2014-06-02
                • 1970-01-01
                • 2014-01-19
                • 1970-01-01
                • 2017-04-23
                相关资源
                最近更新 更多