2011-11-24 111 views
3

我在滚动内容和溢出div中背景时遇到问题。在溢出div中滚动背景

我的情况:

<style> 
    .parent{ 
     background-image: url(http://www.google.lv/images/srpr/logo3w.png); 
     width:100px; 
     height:200px; 
     overflow:scroll; 
    } 
    .parent div{ 
     background-color:red; 
     width:10px; 
     height:1000px; 
    } 
</style> 
<div class="parent"> 
    <div> 
     a 
     b 
     c 
     f 
     d 
    </div> 
</div> 

内容是滚动的,但父母的背景保持不变。我也想滚动背景。我认为这是可能的,而不需要在父div中添加具有所需背景的额外图层。

任何想法?

回答

1

将您的背景设置为内部div,而不是容器,因为容器停留在相同的位置,但内部div正在向上移动。

<style> 
    .parent{ 
     width:100px; 
     height:200px; 
     overflow:scroll; 
    } 
    .parent div{ 
     background-image: url(http://www.google.lv/images/srpr/logo3w.png); 
     width:10px; 
     height:1000px; 
    } 
</style> 
+0

不能这样做,因为我的内部div可能有它自己的背景。而且我不想在 – Yurish

+0

内添加额外的图层像选项一样,您可以使用JavaScript移动背景,但这不是一个好的解决方案。你可以通过订阅容器的'onscroll'事件并在'scrollOffset'值上移动背景位置来做到这一点。 – Samich

+0

另外,你的内容只有不同的背景颜色,所以你可以将它与图像混合:'background:#f00 url(http://www.google.lv/images/srpr/logo3w.png)no-repeat left top;' – Samich

0

不知道纯CSS的方法来解决它(因为溢出容器的大小不计算从它的内容的大小,而是从集大小)。只有这样我可以通过添加第二个容器想到的是:

http://jsfiddle.net/cBMNs/1/

+0

我做到了,使用第二个容器,但为了不破坏我的.parent容器内的结构,我只是用div来包装一切溢出。和你一样。但是,我仍然认为,这可能与CSS,因为它很奇怪 - 为什么背景在身体上滚动,但在溢出的div没有。 – Yurish

9

好了,2年前,这可能不是一直如此,但background-attachment:local;在Chrome 4+,IE 9,火狐25解决问题+和Safari 5+。

移动浏览器的支持是可变的。在IOS中工作,在Android浏览器中不起作用,Android Chrome 47声称支持它,但它在所有情况下都无法正常工作。

我更新了@Alexey Ivanov的小提琴并删除了额外的bg包装。

http://jsfiddle.net/nilloc/c5yfn81s/