HTML标签的背景位置无法工作

3

我在学习一个关于网页设计的教程,最终页面如下: http://webdesigntutsplus.s3.amazonaws.com/126_RibbonNavTutorial/code/demo_css_ribbon.html

我已经完成了所有步骤,但是在HTML样式方面出现了一个问题,你可以看到我已经包含了height:100%,但在原始教程中没有这一行,如果我删除这一行,则会导致页面崩溃,但在原始教程中却完美地显示。为什么会这样呢?

此外,现在我已经设置了height:100%,然后您可以滚动到底部,可以看到底部有一段空白的边距,我希望图片可以粘在页面的底部。

请下载图片以便您可以尝试此代码,以下是图像链接:

http://webdesigntutsplus.s3.amazonaws.com/126_RibbonNavTutorial/code/bottom_bg.jpg

http://webdesigntutsplus.s3.amazonaws.com/126_RibbonNavTutorial/code/top_bg.png

CodePen = http://codepen.io/joe/full/xruKk

jsFiddle = http://jsfiddle.net/rssatnam/YekQe/embedded/result/

代码:

<html>
<head>
<style type="text/css">
html{
  background:#77d5fb url('bottom_bg.jpg') bottom center no-repeat;
  height:100%;
}
body{
  background:transparent url('top_bg.png') top center no-repeat;
  height:100%;
  width:100%;
  margin:0 0;
}
#container{
  width:900px;
  margin:0 auto;
}
#navBar{
  height:62px;
  background-color:#e5592e;
  margin:3em 0;
  position:relative;
  -webkit-box-shadow:0px 0px 4px rgba(0,0,0,0.55);
  box-shadow:0px 0px 4px rgba(0,0,0,0.55);
  -moz-box-shadow:0px 0px 4px rgba(0,0,0,0.55);
  -o-box-shadow:0px 0px 4px rgba(0,0,0,0.55);
  border-radius:3px;
  z-index:500;
}
#menu li{
  list-style-type:none;
  display:block;
  float:left;
  margin:1em 0.8em;
}
#menu li a{
  display:block;
  text-decoration:none;
  color:#F0F0F0;
  font-size:1.6em;
  margin:0;
  line-height:28px;
  text-shadow:0 2px 1px rgba(0, 0,0, 0.5);
}
#menu li a:hover{
  /*transition:margin-top 0.3s;
  -webkit-transition:margin-top 0.3s;*/
  margin-top:2px;
}
#lt-corner{
  width:0px;
  height:0px;
  border:50px solid;
  border-color:#d9542b transparent transparent;
  position:relative;
  float:left;
  top:1px;
  left:-50px;
}
#lb-corner{
  border:50px solid;
  border-color:transparent transparent #d9542b;
  width:0px;
  height:0px;
  position:relative;
  float:left;
  top:-40px;
  left:-150px;
}
#rt-corner{
  width:0px;
  height:0px;
  border:50px solid;
  border-color:#d9542b transparent transparent;
  position:relative;
  float:right;
  top:-107px;
  right:-45px;
}
#rb-corner{
  border:50px solid;
  border-color:transparent transparent #d9542b;
  width:0px;
  height:0px;
  position:relative;
  float:right;
  top:-149px;
  right:-145px;
}
</style>
</head>

<body>
    <div id="container">
      <div id="lt-corner"></div>
      <div id="lb-corner"></div>
        <div id="navBar">
            <ul id="menu">
                <li><a href="#">&#10029; Home</a></li>
                <li><a href="#">&#10029; About</a></li>
                <li><a href="#">&#10029; Services</a></li>
                <li><a href="#">&#10029; Contact</a></li>
            </ul>
        </div>
        <div id="rt-corner"></div>
      <div id="rb-corner"></div>
    </div>    
</body>
</html>

我觉得看起来不错,我的意思是在Safari和Firefox中看不到底部的边距,但有一个垂直滚动条。 - Daniel Kurz
当我在jsfiddle中尝试时,当注释掉height: 100%时,我无法重现此问题。 - Ryan Gates
请使用图片,这样您就能看到页面底部的边距了,我已在Chrome和Firefox中进行了测试。 - Satnam Singh
我已经更新了我的帖子中的jsFiddle和codePen链接,请在页面底部检查。 - Satnam Singh
你所遇到的问题是由于边距折叠(http://reference.sitepoint.com/css/collapsingmargins)引起的。`div#navBar`的顶部边距向下推`body`3em,由于`body`必须为`100%`,所以页面占据了垂直空间的`100% + 3em`。 - Hawken
显示剩余2条评论
1个回答

0
这是一个可运行的示例:JSbin。一定要编辑并尝试它。
margin:0padding:0添加到html&body元素中。要删除底部的margin,只需从body元素中删除height:100%。所以这是基本的CSS:
html,body{ 
  margin:0;
  padding:0;
}

html{
  background:#77d5fb url('http://i.imgur.com/xbMWo.jpg') bottom center no-repeat; 
  height:100%;
  width:100%;
}

body{
  background:transparent url('http://i.imgur.com/2NPJi.png') top center no-repeat; 
  width:100%;
} 

小提示:如果解决了您的问题,请将其标记为答案。


嘿,abdhoms,我已经尝试了所有方法,但仍然无法正常工作。 它在JSbin上可以工作,因为有DOCTYPE。 如果在本地尝试,只有在不包括DOCTYPE的情况下才能正常工作。 但是,如果包括DOCTYPE,则问题将再次出现,很奇怪,但该怎么办呢? 这是DOCTYPE Bug哈哈。 - Satnam Singh
这不是真正的错误,只是样式高度/宽度的问题。请参见此问题。 您可以通过在CSS中为“html”添加“height:100%”和“width:100%”来解决此问题。 - abdhoms
如果底部有边距,请尝试从“body”中删除“height:100%”。我已经更新了答案。 - abdhoms
已经告诉你们问题已经解决了。 只有在不包含DOCTYPE的情况下才能正常工作。但是如果包含DOCTYPE,问题将再次出现。 - Satnam Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接