使用CSS td宽度绝对值,位置


103

请参阅此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宽度有什么影响?我寻找的不仅仅是解决问题的原因。我希望了解它是如何工作的。

td宽度不是所需的300px


display: table-cell不尊重width(以无法使用的方式display: inline)。我不明白您在问什么position fixed|absolute
爆炸药

@ExplosionPills,因为在我的实际代码中,我将表设置为固定的。您可能会猜到,我正在尝试在页面顶部实现时间表。所以我只是说一下位置属性会影响宽度。
杰克

Answers:


144

这可能不是您想听到的,但display: table-cell不考虑宽度,并且会基于整个表格的宽度而折叠。您只需display: block在指定宽度的表格单元格内部放置一个元素即可轻松解决此问题,例如

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

如果它<table>本身是position: fixed绝对值或绝对值,则这没有太大区别,因为单元格的位置相对于表格都是静态的。

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

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


31
+1-我以前使用过这种解决方法。奇怪的是,min-widthTD似乎在Chrome和FF工作:jsfiddle.net/Mkq8L/7
蒂姆梅多拉

2
实际上,像往常一样,在发布问题后,我发现它min-width: 300px可行!(@TimMedora,您快了几秒钟!)
Jake

我认为最好的答案是提及显示:表格单元行为。谢谢!
杰克

这种行为对我来说很有意义:如果您在同一列上为两个单元格设置了两个不同的宽度,应该怎么办?随着min-width不存在问题,但,拿最大的。
西罗Santilli郝海东冠状病六四事件法轮功

3
这是一个技巧,我不推荐这样做。组合的td宽度溢出了表格宽度。这就是问题。您不应该通过添加更多HTML结构来解决此问题。
大卫

28

你最好用 table-layout: fixed

“自动”是默认值,并且大表可能会导致客户端滞后,因为浏览器会对其进行迭代以检查所有大小是否合适。

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

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

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

在这里看到了实际应用:JSFIDDLE


11

它在您提供的链接中不起作用的原因是,您正尝试显示300px列加上52列,每列跨越7列。缩小列数即可。屏幕上不能容纳那么多。

如果要强制列适合,请尝试设置:

body {min-width:4150px;}

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


2
+1用于发现表宽度阈值随主体宽度增加。
杰克

8

原因是,因为您未指定表格的宽度,并且整个td都在溢出。

例如,我给表设置了5000px的宽度,我认为这可以满足您的要求。

table{
    width:5000px;
}

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

我相信这是因为您的TD已超出默认表格宽度。可以看到,如果您在每个tr中抽出约45个td(即您在问题中提供的代码,而不是jsfiddle),则可以正常工作


2
+1表示存在表格宽度阈值。问题是有时候我们不知道手工之前的总宽度。表格的默认宽度是多少?
杰克

我真的不知道 我所知道的是,如果您有太多的列,表将被压缩,从而使所有子节点宽度无效。我以前遇到过这一点,但我的“M还没有找出默认值也许我应该问,作为一个问题。
何辉

我相信我解决了这个问题stackoverflow.com/questions/14767459/...
何辉

这是实际答案,而不是高度评价的答案。如果内容没有溢出整个表格宽度,则只能设置宽度。
大卫


5

尝试使用

table {
  table-layout: auto;
}

如果使用Bootstrap,tabletable-layout: fixed;默认情况下具有class 。



3

我的疯狂解决方案。)

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

2

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


2

将内容从div中的第一个单元格换行,例如:

HTML:

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

CSS:

.rhead {
  width: 300px;
}

这是一个jsfiddle


1

您还可以使用:

.rhead {
    width:300px;
}

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

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.