码迷,mamicode.com
首页 > 其他好文 > 详细

高度自适应

时间:2015-09-09 01:08:37      阅读:608      评论:0      收藏:0      [点我收藏+]

标签:

最近一直遇到关于高度自适应的问题,今天来做一下总结。

其实如果元素没有设置高度,一般都会跟随内容变化,包裹内容

比如这样的

    <div class="wrap">
        <h1>高度自适应</h1>
        <p>
         我是高度自适应<br/>
         我是高度自适应<br/>
         我是高度自适应<br/>
         我是高度自适应<br/>
        </p>
    </div>

在浏览器中可以看到.wrap这个div的高度为所有标签的高度和

技术分享

回到整题,要使高度自适应一般有2种办法,第一就是设置元素的高度为100%,第二就是用js计算文档内容的实际高度,然后设置css样式。

我一般不会先考虑第二种,因为自己觉得有点麻烦。而且我觉得大部分都可以用css来解决。

当然设置高度100%是相对(父元素要有高度,子元素设置了100%才有效),所以一般就需要用到相对定位(父元素)和绝对定位(子元素)

基本思路是这样的

html:

<div class="wrap">
    <div class="left"></div>
    <div class="right></div>
</div>

css:

.wrap{position:relative;}
.left{
    position:absolute;
    height:100%;
    top:0;
    left:0;
}

嗯,思路对了,可是我最近在公司做的一个页面死活不起效果,但是后来还是解决了,下面贴一个类似的例子

总体是两列布局(左边是导航),右边是两行布局(一个头部和一个主题)

一开始我从html到div都设置了height:100%;但如果右边的内容一旦超出可视区域,左边的导航部分就不会跟着拉伸(因为没有足够多的内容来撑开),因为不管是html或者是body,设置了height:100%之后也只是获得窗口可视区域的高度而已,所有被它们包裹的元素只要设置了height:100%,也都只获得了窗口可视区域的高度而已(这样反而有可能会截掉部分内容)。

但是,我发现在包裹左边部分和右边部分的外层div的高度其实是可以取决于高度大的那个部分的,就像最前面讲到的外层div的高度会根据内容而变化。所有关键就是获得内容多的那一部分的高度

html

    <div class="page">
        <div class="left">
            <ul>
                  <li class="left_item"></li>
                  <li class="left_item"></li>
                  <li class="left_item"></li>
                  <li class="left_item"></li>
                  <li class="left_item"></li>
                  <li class="left_item"></li>
              </ul>          
        </div>
        <div class="right">
            <div class="top"></div>
            <div class="main">
                <ul id="list">
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                    <li class="main_item"></li>
                </ul>
                <div id="hide" class="hide">
                    <div><i id="close"class="btn">X</i></div>
                </div>
            </div>
        </div>
    </div>

css

    *{margin: 0;padding: 0;}
    html,body{width: 100%;}
/*page为外层div,要设置为相对定位*/ .page{ width:100%; position: relative; } .page:after{ display: block; content: ""; clear: both; }
/*左边部分设置为绝对定位,设置min-height是为了防止右边内容很少时(高度小于可视区域高度),左边部分仍可铺满*/ .left{ background-color: #099082; width: 20%; position: absolute; top: 0; left: 0; height: 100%; min-height: 631px; }
/*这里要注意,本来一般我会给右边也设置绝对定位,但是这样外层div就无法包裹这个部分的内容了,也就是外层的div的高度就不是实际内容的高度了(因为绝对定位之后脱离了文档流,所有父元素高度会坍塌),所以,右边的部分我采用了浮动来定位,这样就可以使外层div获得最大高度*/ .right{float:right;width: 80%;} .top{ width:100%; height: 60px; border-bottom: 1px solid #ff0000; } .main{ width: 100%; background-color: #ccc; } ul li{list-style: none;} .left_item{width: 100px;height: 50px;border:1px solid #fff;margin:10px auto;} .main_item{width: 80%;margin: 0 auto;margin-bottom:10px;height: 90px;background-color: #fff;border-radius: 5px;}

这样就可以解决高度自适应的问题了:当右边的高度大于或左边部分的时候,左边也会跟着拉伸。当右边部分内容小于左边的时候,由于左边设置了min-height,所以左边也会拉伸铺满整个屏幕。当然这样问题都出现在该div有背景颜色的时候。

我这样写还有一个问题,因为我这是基于右边部分没有被背景色的时候,如果有背景色的话,同样会因为左边高度高,但右边内容少无法铺满整个屏幕。所以,写了这么多,发现其实用css也是很麻烦。。。嗯,我下次研究一下怎么在模板化的代码中js。。所以浮动可以清除,position就没法清除。。是不是什么时候也给它出一个清除。。。

 

高度自适应

标签:

原文地址:http://www.cnblogs.com/tsngke/p/4793451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!