【问题标题】:Why do these two snippets render differently using display:table/table-cell/table-row?为什么这两个片段使用 display:table/table-cell/table-row 渲染不同?
【发布时间】:2018-09-11 19:09:37
【问题描述】:

在使用 display: table/table-row/table-cell 编写一些 CSS 时,我遇到了一些我不理解的行为,但在 Chrome 和 Firefox 中是一致的。我将其简化为以下两个 sn-ps 突出差异:

样式规则很简单:

* { box-sizing: border-box; border: none; margin: 0; }
.stack, .flow {
    width: 100%;
    display: table;
}
.stack > * {
    display: table-row;
}
.flow > * {
    display: table-cell;
}
.w-100 { width: 100%; }

html 很粗糙:

<div class="flow">
  <div>L</div>
  <input type="text"class="w-100" placeholder="M" />
  <div>R</div>
</div>

第二个链接的唯一区别是最后一个带有 R 的 div 被替换为

有趣的是,Edge 渲染它们的效果与我最初预期的完全一样。

编辑:如果您将 L 和 R 元素限制为固定大小,并且将整个行设置为 100%,则 M/中间单元格应扩展以适应整个宽度,但它不起作用预计在 Chrome 中。由于某些莫名其妙的原因,这两个 sn-ps 的呈现方式也不同:

似乎只有当所有用作表格单元的元素都是 div 时,渲染才能始终如一地工作,如下所示:https://codepen.io/anon/pen/mxKreZ

【问题讨论】:

  • 考虑使用 flexbox 而不是表格。我 99% 确定它没有此类问题

标签: html css css-tables


【解决方案1】:

这种按钮行为是影响两个浏览器(issue for Chromefor Firefox)的已知问题。两家厂商给出的解释是按钮的特殊渲染,因为它们作为表单元素的性质。两家供应商都没有计划解决这个问题,至少在 css-display-3 和/或 css-tables-3 规范成熟之前不会。

正如您所观察到的,Edge 会按预期呈现您的 sn-ps,因为 Edge(实际上是 IE11)确实支持将按钮呈现为表格单元格。

【讨论】:

  • 谢谢,这太烦人了。我曾认为 display:table 在浏览器中是相对一致的,但似乎 css 搞砸的方式没有尽头。请原谅我的咆哮,但这才是真正让网络变得如此糟糕的东西。
  • @naasking: display: table 可能是 CSS all 中最糟糕的部分。 even the CSSWG doesn't know what to do with it 真是太糟糕了。相比之下,其余部分相当温和:P
  • sigh,我有一些希望,因为它似乎在大多数情况下都可以正常工作,并且 display:table 似乎是唯一普遍可用的垂直居中项目的显示模式。如果 FF 和 Chrome 在表格显示模式下只是在任何输入元素周围插入一个匿名 div,它们将与预期的工作方式一致。看起来一点也不难解决,但你暗示这里潜伏着其他龙,所以我想回到绘图板......
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多