CSS显示:当宽度设置为100%时,表格行不会展开

chu*_*nce 91 css css3

我有一点问题.我正在使用FireFox 3.6并具有以下DOM结构:

<div class="view-row">
    <div class="view-type">Type</div>
    <div class="view-name">Name</div>                
</div>
Run Code Online (Sandbox Code Playgroud)

以下CSS:

.view-row {
width:100%;
display:table-row;
}

.view-name {
display: table-cell;
float:right;
}

.view-type {
display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)

如果我取下display:table-row它会显示正确,view-row显示宽度为100%.如果我把它放回去,它会缩小.我把它放在JS Bin上:

http://jsbin.com/ifiyo

这是怎么回事?

KP.*_*KP. 87

如果你正在使用display:table-row等,那么你需要适当的标记,其中包括一个包含表.没有它你的原始问题基本上提供了相同的坏标记:

<tr style="width:100%">
    <td>Type</td>
    <td style="float:right">Name</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

上面的表格在哪里?你不能只是有一排冒出(TR必须包含在任一table,thead,tbody,等)

相反,添加一个外部元素display:table,将100%宽度放在包含元素上.两个内部单元格将自动转到50/50并在第二个单元格上对齐文本.忘记floats表元素.这会引起如此多的头痛.

标记:

<div class="view-table">
    <div class="view-row">
        <div class="view-type">Type</div>
        <div class="view-name">Name</div>                
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.view-table
{
    display:table;
    width:100%;
}
.view-row,
{
    display:table-row;
}
.view-row > div
{
    display: table-cell;
}
.view-name 
{
    text-align:right;
}
Run Code Online (Sandbox Code Playgroud)

  • -1因为解释错了.根据[CSS2.1规范](http://www.w3.org/TR/CSS2/tables.html#anonymous-boxes),有问题的标记/ CSS应该有效. (34认同)
  • +5关于摆脱该死的花车! (10认同)
  • 没有浏览器与丢失的表有任何问题(Firefox 3.0 [有](https://bugzilla.mozilla.org/show_bug.cgi?id=148810)...)实际问题是[表行的宽度设置是完全忽略](http://www.w3.org/TR/CSS2/tables.html#fixed-table-layout).(这意味着有问题的标记/ CSS确实不能按预期工作,所以我上面的评论是错误的;)) (7认同)
  • 这个答案是不正确的.提问者的标记是正确的.正如Pumbaa80所说,问题在于假设宽度必须是行级而不是表级.宽度仅在表级解释.可以完全省略行.请参阅下面的完整答案. (3认同)

Ami*_*ana 54

测试答案:

在.view-row css中,更改:

display:table-row;
Run Code Online (Sandbox Code Playgroud)

至:

display:table
Run Code Online (Sandbox Code Playgroud)

摆脱"浮动".一切都会按预期工作.

正如评论中所建议的那样,不需要包装表.CSS允许省略隐式的树结构(在本例中为行)的级别.您的代码不起作用的原因是"宽度"只能在表级别解释,而不能在表级级别解释.当你有一个"表"然后直接在下面的"表格单元格"时,它们被隐含地解释为坐在一排.

工作范例:

<div class="view">
    <div>Type</div>
    <div>Name</div>                
</div>
Run Code Online (Sandbox Code Playgroud)

用css:

.view {
  width:100%;
  display:table;
}

.view > div {
  width:50%;
  display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)

  • CSS规则是正确的:http://www.w3.org/TR/CSS2/tables.html#anonymous-boxes.通过删除不必要的代码行(例如,KP建议的不必要的<view-row> div)来更容易维护.这帮助了我...我正在使用它.+1 (16认同)

小智 16

请注意,根据CSS3规范,您不必将布局包装在表格样式元素中.如果不存在,浏览器将推断包含元素的存在.

  • 同样是[在CSS 2.1中指定](http://www.w3.org/TR/CSS2/tables.html#anonymous-boxes),第17.2.1节,前3.2.下面的HBOX/VBOX示例正是如此.所以看起来浏览器根本就不在乎. (4认同)