高度自适应

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

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

比如这样的

    <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就没法清除。。是不是什么时候也给它出一个清除。。。

时间: 2024-10-26 00:48:48

高度自适应的相关文章

&lt;li&gt;高度自适应

使用ul和li代替表格进行排版的时候,会发现li无法自适应高度. 只需要将li的overflow置为auto就可以了,因为li默认的overflow是visible,会将内部元素显示在li之外. 引自:http://blog.sina.com.cn/s/blog_6ae7a3960100u0e6.html

如何处理 在html中 li 的高度自适应(且li里面的内容有浮动的情况下)

废话不多说,我们写贴出代码 这个是 Html 代码 <div class="main"> <ul> <li> <div class="main-left">23</div> <div class="main-right"> <p>text1</p> <p>text2</p> </div> </li> &l

overflow解决float浮动后高度自适应问题

也许你在做网页的时候发现,发一个区块内的元素被应用了float之后,那么整个box的高度对就不以被浮动对象的高度为标准了.如图中的城市导航内的城市列表中采用了float之后,那个外框的高度并不是内容元素的高度: 怎么解决这个问题呢?经发现可以采用overflow来解决!方法是在父元素加上如下代码即可 overflow:auto; zoom:1; overflow:auto;是让高度自适应, zoom:1;是为了兼容IE6,也可以用height:1%;的方式来解决. 1 1 <!DOCTYPE h

里面的div怎么撑开外面的div让高度自适应

参考网址:http://www.jb51.net/css/140685.html 随着微软新操作系统的上市,ie6现在用的人越来越少了,但是XP系统看来是太过经典,仍然有相当多的用户在使用,且这部分人群中的大部分也没有单独升级浏览器的习惯,于是乎ie6依旧是使用最多的浏览器版本.根据本站流量的统计,来自ie6的访问比重为72.6%.表明了以上的观点,虽然最高的时候,ie6占了90%以上. 言归正传,div+css作为网页的布局已经是大势所趋.它的优点不在这里啰嗦.但最近经常有朋友提到关于容器高度

跨子域的iframe高度自适应

一.跨子域的iframe高度自适应 比如 'a.jd.com/3.html' 嵌入了 'b.jd.com/4.html',这种跨子域的页面 3.html 1 2 3 4 5 6 7 8 9 10 11 12 13 <!DOCTYPE html> <html>   <head>     <meta charset='utf-8' />     <title>1.html</title>     <script type="

跨域iframe的高度自适应

原文:跨域iframe的高度自适应 跨子域的iframe高度自适应 完全跨域的iframe高度自适应 同域的我们可以轻松的做到 1. 父页面通过iframe的contentDocument或document属性访问到文档对象,进而可以取得页面的高度,通过此高度值赋值给iframe tag. 2. 子页面可以通过parent访问到父页面里引入的iframe tag,进而设置其高度. 但跨域的情况则不允许对子页面或父页面的文档进行访问(返回undefined),所以我们要做的就是打通或间接打通这个壁

利用padding-top/padding-bottom百分比,进行占位和高度自适应

在css里面,padding-top,padding-bottom,margin-top,margin-bottom取值为百分比的时候,参照的是父元素的宽度. 比如:父元素宽度是100px, 子元素padding-top:50%,那么padding-top的实际值就是100*50%=50px 这个小小的知识点,其实有很大的用处,应用也很广泛,就是进行提前占位,避免资源加载时候的闪烁,还可以让高度自适应. 举例: 一般来说,想要自适应屏幕大小,我们设置元素的宽度自适应是完全没有问题的,比如希望一行

利用padding-top/padding-bottom百分比OA幸运飞艇平台,进行占位和高度自适应

在css里面,padding-top,padding-bottom,margin-top,margin-bottom取值为百分比的时候,参照的是父元素的宽度. 比如:父元素宽度是100px, 子元素padding-top:50%,那么padding-top的实际值就是100*50%=50px 这个小小的知识点,其实有很大的用处,应用也很广泛,就是进行提前占位,避免资源加载时候的闪烁,还可以让高度自适应. 举例: 一般来说,想要自适应屏幕大小,我们设置元素的宽度自适应是完全没有问题的,比如希望一行

让里面的div撑开外面的div,让高度自适应

<!-- 设置clearfloat样式,让里面的div撑开外面的div,让高度自适应 --> <style type="text/css"> .clearfloat{clear:both;height:0;font-size: 1px;line-height: 0px;} </style> </head> <div class="choose-bg-box"> <c:forEach items=&qu