html5 - 关于CSS布局(不使用JS)
怪我咯
怪我咯 2017-04-17 13:46:33
[HTML讨论组]
<header></header>
<section></section>
<footer></footer>
  1. 头部和底部高度固定(30px),怎么让中间的的section高度自适应剩下的屏幕高度?

  2. 当section的高度小于浏览器视窗时,footer在浏览器的底部,当section高度大了视窗时,即出现滚动条时,footer在不固定在视窗底部,而是紧跟在section的后面,只有滚动条拖到section的尾部才看到footer

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(5)
迷茫

题主可能想问的是有名的Sticky Footer的问题。推荐的做法:

html结构稍作变动,如下。

<p class="wrapper">
    <header></header>
    <section></section>
    <p class="footer_placeholder"></p>
</p>
<footer class="footer">
    <!--页脚-->
</footer>

搭配的css:

html, body{height: 100%;}
.wrapper{
    min-height: 100%;
    margin-bottom: -30px;
}
.footer, .footer_placeholder{height: 30px;}

这个实现方式来源于 Ryan Fait's HTML5 CSS Sticky Footer。如果英文内容看起来费劲,也可以阅读这篇文章。

伊谢尔伦
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
    
      html{
        /*height: 100%; *//*如果想看看效果可以放出该行,中间section自适应,当然要父级高度不为0才能看出来,细节楼主可自己调*/
      }
      body{
        display: flex;
        flex-direction: column;
        height: 100%;
        margin: 0
      }
      footer,header{
        background: blue;
        height: 30px;
      }

      section{
        flex-grow: 100;
        background: red;
      }




    </style>
  </head>
  <body>
    <header></header>
    <section>
      是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发 是打发打发是否打算发生的说的发生东方闪电艾弗森发生的发生大幅阿斯蒂芬阿斯蒂芬阿斯蒂芬啊是打发打发卡就是短发快速的恢复卡上打飞机了阿斯达会计法还是看见了地方哈时间考虑对方好啊开始建立地方啊看来是的理解发射基地发
    </section>
    <footer></footer>

  </body>
</html>

flex布局在有的浏览器中需要加上浏览器前缀,主流浏览器应该没问题

ringa_lee

纯css方案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        html,body{
            height:100%;
            overflow: visible;
            margin:0;
            padding:0;
        }
        header,footer{
            height:30px;
            outline: 1px dotted #f00;
        }
        section{
            box-sizing: border-box;
            min-height:100%;
            padding-top:30px;
            margin-top: -30px;
            padding-bottom:30px;
            margin-bottom: -30px;
        }
    </style>
    <script>
        function fill(){
            var i = 0;
            var el = document.getElementsByTagName('section')[0];
            while(i++ <= 100){
                el.innerHTML += 'section<br>';
            }
        }
    </script>
</head>
<body>
    <header>header</header>
    <section>
        <button type="button" onclick="fill()">填充section</button><br>
    </section>
    <footer>footer</footer>
</body>
</html>
大家讲道理

html,body {

width:100%;
height:100%;

}
section {

height:calc(100% - 60px)

}

不知道这样行不行,因为我一直都是js控制$(window).height()-60px;不过这样的话会卡,你的意思就是想在section里面滚动页面内容是吧,加上-webkit-overflow-scrolling: touch苹果设备可能会好,之前的安卓4.4会很卡。不过如果真的要这样实现的话,最好js,好像有个iscroll。而且,就算你这么实现,你肯定要把页面滚动条取消掉,改用section区域的滚动条,在这个方面,ios和安卓又不同,不过发现只要给安卓(还是苹果,不记得了,就是不出现滚动条)添加一个空p,就可以出现滚动条。哎,说了这么多,感觉没啥用,满纸荒唐言,一把辛酸泪。
阿神

section类为sec
第一种情况很简单

.sec
    padding:30px 0;
}

第二种就不用js真心很蛋疼

var fixedHeight = $(window).height();
var secHeight=$(".sec").css("height");
if (secHeight>fixedHeight) {
    $(".sec").css("position","staic");
}
else {
     $(".sec").css("position","fixed");
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号