【问题标题】:Firefox vs Chrome: Background overlay is incorrectly sized with display:table-cellFirefox vs Chrome:背景覆盖的大小与 display:table-cell 不正确
【发布时间】:2013-07-24 09:37:13
【问题描述】:

我有一块 HTML/CSS 在 Firefox (22.0) 和 Chrome (28.0.1500.71) 中表现不同。我试图找出原因。我创建了一个 jsfiddle,以便可以轻松观察到生成的输出。 http://jsfiddle.net/treejanitor/Q8zn4/3/

下面的源代码试图在表格单元格上覆盖简单的背景颜色,其中一组 div 元素嵌套在带有display: table 的 div 下。只有标记有 playbtn 类的表格单元格才应该有覆盖。

在确定盒子模型尺寸时,table-cell CSS 似乎对 Firefox 有问题。出于某种原因,top/bottom/left/right CSS 属性错误地使用了最外面的块,tbl 类'<div>。这似乎不是 Chrome、Safari、IE9+ 的问题。

当我将 CSS 显示值从 table-cell 更改为 inline-block 时,我相信我得到了我想要的行为,但我没有进一步追求它;我需要display: table-cell 才能正确管理更复杂的表格显示,包括均匀分布的表格单元格之间的间距。

有人有什么想法吗?

HTML

<div class="tbl">
    <div>
        <div>
            <img src="http://placekitten.com/200/240" />
            <div class="playbtn"></div>
        </div>
        <div>Description</div>
    </div>
    <div>
        <div>
            <img src="http://placekitten.com/200/240" />
            <div class="playbtn"></div>
        </div>
        <div>Description</div>
    </div>
</div>

CSS

.tbl {
    display: table;
}
.tbl > div {
    display: table-row;
}
.tbl > div > div {
    position: relative;
    display: table-cell;
    vertical-align: middle;
    padding: 5px;
}
div.playbtn {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
    background: blue;
    background-size: 100%;
    opacity: 0.3;
}

【问题讨论】:

标签: css google-chrome firefox overlay css-tables


【解决方案1】:

CSS 2.1 规范“9.3.1 Choosing a positioning scheme: 'position' property”说:

'position:relative' 对 table-row-group、table-header-group、table-footer-group、table-row、table-column-group、table-column、table-cell 和 table 的影响-caption 元素未定义。

因此,即使所有其他浏览器都使用值relative 作为“预期”,Firefox 忽略它也没有错。

编辑

我认为用position: relative; 将内容包装到另一个&lt;div&gt; 是最简单的解决方案:

HTML

<div class="cell">
    <div class="relative">
        <img src="http://placekitten.com/200/240" />
        <div class="overlay"></div>
    </div>
</div>

CSS

div.cell {
    display: table-cell;
}

div.relative {
    position: relative;
    line-height: 0;
}

div.overlay {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background: rgba(255, 255, 255, 0.7);
    border: 1px solid red;
}

演示

Try before buy

【讨论】:

  • 是的,我想我有一种预感,从我上面发布的链接来看,这是一个灰色区域。我主要是在寻找一种实用的解决方案,如果有的话,不管规格如何。感谢您快速回复以确认我对确切规格的怀疑。
  • @treejanitor 我已经用一个使用包装器的解决方案更新了我的答案——就像他评论中链接的答案 kalley 一样。
  • 完美!我刚刚得出了相同的答案,使用你的 line-height 作为我最后的调整。我对原始更改的小提琴就在这里。 jsfiddle.net/treejanitor/Q8zn4/4我会把这个答案标记为正确的。
  • 相当不错的结果。我很高兴我可以在这里投入我的两分钱,最终它有所帮助。 :)
  • 我在 Chrome 中遇到了奇怪的渲染问题,例如颜色未更新...通过删除 td 上的 position: relative 它修复了这些意外行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多