【发布时间】:2015-08-30 03:15:43
【问题描述】:
这段代码在每个浏览器中似乎有不同的效果。
.container {
display: inline-block;
border: 1px solid black;
padding-top: 5px;
padding-bottom: 5px;
}
.box {
display: table;
width: 10px;
height: 10px;
background-color: red;
border: 5px solid blue;
}
<div class="container">
<div class="box"></div>
</div>
在 Chrome 43.0 中,表格不局限于容器:
在 Safari 5.1 中,边框与表格完全重叠,因为它似乎将宽度解释为包含边框宽度:
在 Firefox 38.0 和 Internet Explorer 11.0 中,表格正确呈现:
理想的情况是所有浏览器的行为都类似于 Firefox/Internet Explorer。
使用box-sizing: border-box并增加.box的宽度来包含边框的宽度使所有浏览器都显示Firefox/Internet Explorer版本,但是假设边框的宽度未知,有什么办法可以使所有主流浏览器都根据 Firefox/Internet Explorer 渲染模型(不使用 JavaScript)?
以下内容根本没有帮助:
- 在
.box上使用table-layout: fixed。 - 在
.box上使用border-collapse: separate - 在
.box上使用box-sizing: content-box - 使用
<table>而不是display: table(这只是让 Chrome 的预览看起来与 Safari 的相同,我不想使用表格元素。)
这个问题好像和Chrome vs. box-sizing:border-box in a display:table类似,不过这个问题已经解决了。
仅供参考:
这只是演示相同问题的一个最小示例。实际问题是我有一个<div> 和display: table,其宽度仅由其单元格的宽度(等于单元格的高度)和它们之间的填充定义。那个 div 也恰好有一个边框。该 div 包含在另一个向右浮动的元素中。但是因为这个问题,当浮动容器完全靠右时,div会溢出屏幕。
【问题讨论】:
-
你必须在 .box 上使用 display:table 吗?
-
@sdcr 是的,它是具有完整表的较大代码的一部分。
-
如果在表格中填入一些数据,它就会开始正确渲染 - jsfiddle.net/vy53oaLd
-
@sdcr 哦,这很有趣。但是,这些单元格中实际上并没有任何内容,即使我使用
&nbsp;,表格单元格也有定义的宽度和高度,以使宽度等于高度,但效果不太好测试时:jsfiddle.net/vy53oaLd/1 -
@sdcr 我在问题末尾添加了完整问题的更具体版本,希望能澄清任何其他问题。
标签: html css google-chrome safari