滚动视口

时间:2015-12-17 14:10:49

标签: html css

(这是我initial question的更好的改写 - 你可以将另一个标记为此副本。谢谢)

我看到了很多类似的问题,但找不到修复方法。打开this sample并调整浏览器的大小,使其高度比主div高度(~400像素)短 向下滚动时,附着在身体上的背景图像会被切断。

html {
  height: 100%;
  color: white;
}
body { 
  height:100%; 
  padding: 0; 
  margin: 0; 
  background:url(bg.jpg) repeat-x; 
  background-position: bottom;
  background-size: contain;
}
/*#pageWrap {	background:url(bg.jpg) repeat-x;}*/
#page {
  height:100%;
}
#divHeader { 
  width:100%; 
  height:115px; 
}
#divMain {
  width:600px;
  height:400px;
  border: solid 1px brown;
}
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div id="pageWrap">
      <div id="page">
        <div id="divHeader">Header</div>
        <div id="divMain">Main</div>
        <div id="divFooter"><p>All Rights Reserved. Blabla® 2015</p></div>
      </div>
    </div>
  </body>
</html>

我尝试将背景图像移动到pageWrap div,就像有人建议的那样。 它解决了垂直滚动问题,但水平创建了一个类似的问题:当窗口太窄而向左滚动时,图像在右侧被切断。

任何真正的解决方案?

2 个答案:

答案 0 :(得分:3)

也许您可以从HTML,BODY和#page中删除高度:100%,然后将正文上的背景颜色设置为#3E3E3E(在此示例中)。

不同之处在于背景图像不会一直向下拉伸,但它会消除滚动问题。

高度:100%仅适用于浏览器窗口高度的100%,而不是浏览器窗口中页面的高度 - 这就是您的原因;向下滚动时,请在下方获取白色区域。

答案 1 :(得分:1)

我建议用CSS渐变替换背景图像,这可能看起来很难,但a fantastic tool可以为您完成所有操作(它们还会在工具下方显示浏览器支持表!)

您想要的渐变的输出CSS如下所示:

background: rgb(0,0,0); /* Old browsers */
background: -moz-linear-gradient(top,  rgba(0,0,0,1) 0%, rgba(204,204,204,1) 96%, rgba(204,204,204,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top,  rgba(0,0,0,1) 0%,rgba(204,204,204,1) 96%,rgba(204,204,204,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom,  rgba(0,0,0,1) 0%,rgba(204,204,204,1) 96%,rgba(204,204,204,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#cccccc',GradientType=0 ); /* IE6-9 */

此外,您可能希望删除height: 100%的html和正文上的min-height: 100%,因为您希望此渐变在此页面的长度上延伸。

你想在图像上使用渐变的原因纯粹是因为它用无请求替换了对~100-300kb图像的请求,并且只添加了~100-300b我认为CSS几乎可以与任何标准进行良好的交易。

该工具还支持导入图像,您基本上可以拍摄图像,上传图像并获得渐变效果,与手工制作完美结果相近。