首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么CSS宽度被视口宽度覆盖在TD上?

为什么CSS宽度被视口宽度覆盖在TD上?
EN

Stack Overflow用户
提问于 2017-05-26 08:59:51
回答 2查看 247关注 0票数 0

当一个宽度值被应用到表格单元格时,一旦表宽度到达视口宽度,规则就会被忽略。

代码语言:javascript
复制
td, th { width: 400px; }

我希望一个10列的表是4000 10,但火狐和Chrome只将表扩展到视口宽度(见Fiddle)。在此基础上,单元格宽度实际上没有设置为400‘t。我在下面的问题中看到,table-layout:fixed用于强制单元格宽度,但在这里不起作用。

这里这里存在两个类似的问题,但它们只处理初始宽度,而不讨论视口限制。

为什么会发生这种事?我看到有个解决办法..。

代码语言:javascript
复制
td, th { min-width: 400px; max-width:400px; }

...but只是觉得奇怪的是,只有width才能达到这个目的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-26 09:10:58

显示:表格单元格(这是td元素的缺省值)使td的宽度限制在table宽度。如果表的宽度为100 in,则它们将保持100 in宽度。但是,如果设置它们的宽度为400 if,而表的宽度为100 if,则它们将忽略表的宽度并不受限制地展开。见第一答案

  1. width:0添加到table中,它将工作,因为表单元格不能相对于width:0折叠,因此它们不受限制地展开。

见下面的片段或jsFIddle

代码语言:javascript
复制
table {
  table-layout:fixed;
  border-collapse: collapse;
  background-color: white;
width:0;
}

td,
th {
  border: 1px solid #999;
  padding: 0.25em;
  text-align: left;
  width: 400px; // If uncommented, rule is ignored
}
代码语言:javascript
复制
<div>
  <table>
    <thead>
      <tr>
        <th>&nbsp;</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
    </tbody>

  </table>
</div>

  1. 您可以设置包含表的div的宽度,并将溢出自动设置为表(这是一个修复,而不是一个整洁的解决方案)。

见下面的片段或jsFiddle

代码语言:javascript
复制
table {
  table-layout:fixed;
  border-collapse: collapse;
  background-color: white;
}
div {
	width:4000px;
	overflow:auto;
}

td,
th {
  border: 1px solid #999;
  padding: 0.25em;
  text-align: left;
  width: 400px;
}
代码语言:javascript
复制
<div>
  <table>
    <thead>
      <tr>
        <th>&nbsp;</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
    </tbody>

  </table>
</div>

  1. 我知道您没有在您的问题中设置jQuery标记,但是您可能需要使用它,以便根据div宽度之和动态地计算divtd

见下面的片段或jsFiddle

代码语言:javascript
复制
var tdWidthTotal = 0;

$('td').each(function(index) {
    tdWidthTotal += parseInt($(this).width(), 10);
});
$("div").width(tdWidthTotal)
代码语言:javascript
复制
table {
  table-layout:fixed;
  border-collapse: collapse;
  background-color: white;
}
div {
	overflow:auto;
}

td,
th {
  border: 1px solid #999;
  padding: 0.25em;
  text-align: left;
  width: 400px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <table>
    <thead>
      <tr>
        <th>&nbsp;</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
        <th>aaa</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
      <tr>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
        <td>Cell</td>
      </tr>
    </tbody>

  </table>
</div>

票数 1
EN

Stack Overflow用户

发布于 2017-05-26 09:23:17

显然,display: table-cell忽略宽度。您可以在th元素中添加一个带有display: blockwidth: 400px的元素,它可以工作:

代码语言:javascript
复制
th div{
  width: 400px;
}

https://jsfiddle.net/abogvgsb/11/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44197584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档