【发布时间】:2015-08-18 21:59:55
【问题描述】:
我正在尝试通过this post from Four Kitchens 中描述的代码来实现固定的背景图像,但有多个背景图像,而不仅仅是一个。这是帖子中的代码:
.what-we-do-cards {
@include clearfix;
border-top: 10px solid rgba(255, 255, 255, .46);
color: $white;
padding-bottom: 4em;
overflow: hidden; // added for pseudo-element
position: relative; // added for pseudo-element
// Fixed-position background image
&::before {
content: ' ';
position: fixed; // instead of background-attachment
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: white;
background: url('/img/front/strategy.jpg') no-repeat center center;
background-size: cover;
will-change: transform; // creates a new paint layer
z-index: -1;
}
}
基本思想是使用:before 伪元素为固定位置的背景图像创建内容部分,除了帖子中链接到的示例仅使用单个固定位置部分。
我有一个故障排除jsfiddle,它适用于 Safari 和 Chrome,但不适用于 Firefox,我试图弄清楚浏览器如何以不同的方式处理伪元素。此外,如果您在 Chrome 中注释掉 will-change: transform;(第 25 行),您将看到与 Firefox 相同的行为,我认为这是由于 Chrome triggering a stacking context 造成的。我不确定为什么 Safari 没有在 Chrome 中触发堆栈上下文的情况下工作。
关于堆叠上下文here 有一个很好的 SO 答案,但我不确定它如何与固定位置元素、伪元素和显式设置 z-index 一起使用。
编辑:最初的 jsfiddle 展示了如何跨浏览器创建(或不创建)固定元素的包含框,但并没有真正展示背景图像如何变化。 @Oriol 解释了添加 transform: rotate(0); 如何强制在 Firefox 上创建包含框,但它也删除了 Chrome 中的固定关系到视口效果。我创建了一个new jsfiddle - 是什么导致了渲染的差异?
【问题讨论】:
标签: css cross-browser background-image css-position z-index