【发布时间】:2016-05-21 13:07:00
【问题描述】:
单独使用时,display: table 和 display: table-cell 在不同浏览器中的行为不同。
环境
我在三种不同的环境中进行了测试:
环境 1:
- 操作系统:Linux Ubuntu 桌面 14、64 位
- 浏览器 1:Chrome 45.0
- 浏览器 2:Firefox 43.0
环境 2:
- 操作系统:Windows 7,64 位
- 浏览器 1:Chrome 48.0
- 浏览器 2:Firefox 44.0
环境 3:
- 操作系统:Windows 10,64 位
- 浏览器 1:Chrome 51.0
- 浏览器 2:Firefox 47.0
案例 1 - display: table & box-sizing: content-box
.container {
display: table;
width : 500px;
height: 150px;
background: #ccf;
}
.content {
color: #000;
height : 100%;
padding: 20px;
background: #ffc;
}
<div class="container">
<div class="content">
Lorem Ipsum
</div>
</div>
在 FireFox 中,我得到以下输出:
在 Chrome 中,我得到以下输出:
另见this Fiddle。
案例 2 - display: table & box-sizing: border-box
.container {
display: table;
width : 500px;
height: 150px;
background: #ccf;
}
.content {
color: #000;
height : 100%;
padding: 20px;
-ms-box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #ffc;
}
<div class="container">
<div class="content">
Lorem Ipsum
</div>
</div>
在 FireFox 中,我得到以下输出:
在 Chrome 中,我得到以下输出:
另见this Fiddle。
案例 3 - display: table-cell & box-sizing: content-box
.container {
display: table-cell;
width : 500px;
height: 150px;
background: #ccf;
}
.content {
color: #000;
height : 100%;
padding: 20px;
background: #ffc;
}
<div class="container">
<div class="content">
Lorem Ipsum
</div>
</div>
在 FireFox 中,我得到以下输出:
在 Chrome 中,我得到以下输出:
另见this Fiddle。
案例 4 - display: table-cell & box-sizing: border-box
.container {
display: table-cell;
width : 500px;
height: 150px;
background: #ccf;
}
.content {
color: #000;
height : 100%;
padding: 20px;
-ms-box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #ffc;
}
<div class="container">
<div class="content">
Lorem Ipsum
</div>
</div>
在 FireFox 中,我得到以下输出:
在 Chrome 中,我得到以下输出:
另见this Fiddle。
我的问题:
- 规范是否定义了
display : table、display : table-row和display : table-cell在相互独立使用时的行为方式?如果是,哪些是预期的行为? - 这些浏览器差异是由 Firefox 的 Chrome 中的错误引起的吗?如果这些浏览器差异是由错误引起的,那么任一浏览器的开发团队是否正在尝试修复此问题?
- 虽然这些浏览器差异仍然存在,但我应该考虑哪些策略来规范跨浏览器的行为?
【问题讨论】:
-
两个测试都无效,导致表格单元格元素正常工作需要表格父级,以及表格单元格元素的表格或表格行。 在两个测试用例中,您都使用了所需的一半结构和规则。请注意,单个单元格将是 CSS 或普通 html 表格的表格行或表格的 100% 高度。所有兄弟都试图找出在屏幕上绘制这些的最佳方法 ... . 不知道你能在这里得到答案:)
-
@GCyrillus : 如果您能详细说明 两个测试都无效 和 两个测试用例我都使用了一半的陈述,我将非常感激所需的结构和规则。您能否提供表明我的“测试无效”的“所需结构和规则”的来源参考?如果是,那可能就是我正在寻找的答案...
-
您有没有想过单独使用 td 或使用 div 作为表的第一个子项? table 是 display:table,tr 是 table-row,tfoot 是 table-footer-group 等等,你为什么不选择另一个来看看它自己的行为如何? :) 。我信任的唯一来源是 W3C,您可以在其中找到这些显示选项所涉及的内容 :) 我的意见是您的测试无效,因为 html/css 基础不完整,如果失败,在我看来并不奇怪,或者至少不能作为参考;)
-
@GCyrillus :在过去的几年里,我一直将
display : table和display : table-cell视为其他人代码中的独立语句。我想他们真的是一种黑客行为,但这是我第一次看到有人认为这是对 CSS 的不当使用。这就是你的意思,对吧? -
firefox 1 是我使用的第一个能够处理 display:table 的浏览器(除了那个痛苦的 IE6),当你将容器设置为 display:table,direct-child 时转向display:table-cell 默认情况下,不再是这种情况了,因为 display:table 本身是一种处理浮动元素的简单方法。但它最初并不是要单独使用,我没有说它不合适,但它涉及一种行为,如果你有意想不到的结果,我对此并不感到惊讶。 display:flex 对于今天的这种使用来说更加可靠:)
标签: html css google-chrome firefox cross-browser