where interesting happend !

网站头部底部布局方法1

jimmy
说到布局方案,先让大家看一个效果图。



这个是我们平时想要实现的的页面头部和底部版权效果。

头部放公司或者产品的 LOGO 菜单之类的。底部放公司的版权、友情链接、部分菜单。

当页面内容不多时,版权模块在底部,而内容很多时,页面出现滚动条。

我们探讨下实现这个布局的两种方式: sticty footer 圣杯布局

先定义一个基本的 html 结构:
index.html

 <body>
     <!-- 外套 -->
    <div id="wrap">
        <div id="header">header</div>
        <!--主要内容-->
        <div id="main" class="clearfix">
            <!--网页中部主体-->
            <div id="content">
                <p>123</p>
            </div>
        </div>
    </div>
    <div id="footer">footer</div>
</body>

这里我们把除 footer 以外的元素都包在 wrap 里面,这么做的原因是我们想在页面内容少的时候, wrap 会把 footer 往下推, footer 就会跟在 wrap 的后面。

如果要实现贴在浏览器底边,仅仅这么做还是不够的,我们还要设置 wrap 的最小高度 min-height:100%

根据 css 的继承规定,高度百分比生效的前提是父级也有高度设置,所以 body,html 也要设置相应 height 信息。

于是 css 我们可以这么写:

css

body{
    margin: 0;
}
html,body{
    height: 100%;
}
body>#wrap{
    height: auto;
    min-height: 100%;
}
#footer{
    background-color: #fafafa;
    border-top: 1px solid #d9d9d9;
    height: 50px;
    text-align: center;
    line-height: 50px;
}

这时侯的效果是这样的:

image

我们发现出现滚动条,滚动下去, footer 出现了。

image

原因是我们的 wrap 最小高度是 100% ,所以会把 footer 往后面推。这个效果并不是我们想要的。解决这个问题我们分两步:

  1. footer 添加 margin-top:-50px; 因为有一个上边框,所以我们把高度设置为 49px;

效果变成这样了,感觉几乎达到我们的预期。

image

但是等等,我们发现一个问题。当内容很多事, wrap 的内容部分被盖住了,如图红框内的文字。

image

我们再修改:

  1. wrap 添加 padding-bottom: 50px;

再刷新页面,效果完美。
最后的 css 是这样的:

body,p{
    margin: 0;
}
html,body{height: 100%;}
body>#wrap{
    height: auto;
    min-height: 100%;
}
#main{
    padding-bottom: 50px;  /*数值和footer的高一样*/
    padding-top: 65px;    /*数值和header的高一样*/
}
#header{
    position: fixed;
    top:0;
    left: 0;
    width: 100%;
    height: 65px;
    background-color:#fff;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
    text-align: center;
    line-height: 65px;
}
#footer{
    margin-top:-50px;
    background-color: #fafafa;
    border-top: 1px solid #d9d9d9;
    height: 49px;
    text-align: center;
    line-height: 49px;
}

下一篇我们再讲第二种布局,圣杯布局(使用 flex 实现)

Comments

Proudly published with Hexo