【发布时间】:2015-06-28 00:12:33
【问题描述】:
我正在使用Keith Clark's CSS-only 方法创建一个两层视差效果,使背景图像的滚动速度比网站其他内容的滚动速度慢。为了清楚起见,图像覆盖了整个页面,内容位于其顶部。
我的网站分为两个主要的div 元素(和一个容器div)- 一个用于背景图像,另一个用于页面内容。下面是我用于不同 div 元素的代码。
.container {
height: 100%;
overflow-x: hidden;
overflow-y: auto;
perspective: 1px;
position: absolute;
left: 0;
right: 0;
}
.background {
background-image: url(images/background.jpg);
background-size: cover;
position: absolute;
/* margin-bottom: -200em;
overflow: hidden; */
height: 200em;
left: 0;
right: 0;
transform: translateZ(-2px) scale(3);
}
.page-content {
transform: translateZ(0);
}
如果不添加margin-bottom 和overflow 属性,背景div 元素一旦设置为足以覆盖所有页面内容的高度,最终会留下垂直空白。
添加负边距后,问题在 Chrome 和 Firefox* 中得到了解决,我将div 元素的高度和负边距增加了很多,以确保它适用于不同的环境。页面长度。
IE 11 仍然有空白区域。通常background-size: cover; 属性会删除任何空白,但这不适用于视差效果。
你知道有什么方法可以删除适用于 IE9+ 和其他主要浏览器的空白,还是我不走运?
这是一个JSFiddle,其代码与我正在创建的网站几乎完全相同。
*Firefox 没有空白,但负边距不适用于所有页面长度。对于较短的页面,您可以滚动通过页面内容的末尾。我可以通过更改每个页面的高度和边距来解决这个问题,但如果可能的话,我们将不胜感激。
【问题讨论】:
-
为什么你使用
height: 100%而不是像文章提到的height: 100vh? -
@LeandroRuel,因为百分比得到了更好的支持并且它们似乎具有相同的效果,所以我决定使用它们而不是 vh 单位。我刚刚测试了将单位更改为 vh,但它并没有解决 IE 11 中的问题。
-
是的,但是,如果你设置百分比,你还需要将
html,body设置为height: 100%,以使元素达到其高度的100%。或者您可以使用固定高度将元素包裹在父元素中 -
@LeandroRuel,我认为默认情况下就是这样。另外,vh 不受支持。
-
@AndrewHansen 的问题是,对于
.back,您已将高度指定为 50em,大致转换为 50*16=800px,但您的line-height: 300px;转换为 900px,因为您有三个文本元素,因此是空白。检查这个小提琴jsfiddle.net/Lawrg9mv/15我已经删除了图像,因为它没有加载,url显示白色背景并将高度更改为60em
标签: css background-image whitespace parallax