CSS设置div高度自适应

通过CSS实现Div高度自适应:

问:

在一个DIV中有多个未知高度的子元素DIV,怎样通过CSS实现子元素div同高 或 怎样实现同行div按照内容最多的那个设置高度。

如图:

 

 

实现1:添加表格特性

方式:

父级元素添加属性  display: table;

子一级元素添加属性 display: table-cell;

        <div class="div-row">

        <style type="text/css">

            .div-row {

                width: 400px;

                border: 1px solid #23527C;

                display: table;

            }

            .div-col {

                display: table-cell;

            }

        </style>

 

            <div class="div-col" style="background-color: #28A4C9;">

                <p><span>内容1</span></p>

            </div>

            <div class="div-col"  style="background-color: #31B0D5;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

            </div>

            <div class="div-col"  style="background-color: #269ABC;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

            </div>

            <div  class="div-col" style="background-color: #5BC0DE;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

                <p><span>内容4</span></p>

                <p><span>...</span></p>

            </div>

        </div>

效果如下:

注意:

浏览器兼容问题:IE6/IE7可能存在不兼容的情况

display: table时子元素会自动左浮动,不需要再进行浮动操作

   display: table时padding会失效

display: table-cell时margin会失效,会先均分父级框,然后根据占比

 

实现2:补丁法

      方式:父级元素溢出隐藏:overflow:hidden;

      子一级元素“正内补丁”“负外补丁”结合: padding-bottom:9999px;margin-bottom:-9999px; 

       <div class="div-row">

       <style type="text/css">

           .div-row {

              width: 400px;

              border: 1px solid #23527C;

              overflow: hidden;

           }

           .div-col {

width: 25%;

              float: left;

              padding-bottom: 9999px;

              margin-bottom: -9999px;

           }

       </style>

 

           <div class="div-col" style="background-color: #28A4C9;">

              <p><span>内容1</span></p>

           </div>

           <div class="div-col"  style="background-color: #31B0D5;">

              <p><span>内容1</span></p>

              <p><span>内容2</span></p>

           </div>

           <div class="div-col"  style="background-color: #269ABC;">

              <p><span>内容1</span></p>

              <p><span>内容2</span></p>

              <p><span>内容3</span></p>

           </div>

           <div  class="div-col" style="background-color: #5BC0DE;">

              <p><span>内容1</span></p>

              <p><span>内容2</span></p>

              <p><span>内容3</span></p>

              <p><span>内容4</span></p>

              <p><span>...</span></p>

           </div>

       </div>

效果如下:

注意:

  1. 只是视觉上的“障眼法”
  2. 其他属性需要(浮动,宽度)需要自己再设置

 

实现3:填充背景

方式:通过在父级元素使用一张背景图片实现

        <div class="div-row">

        <style type="text/css">

            .div-row {

                width: 400px;

                background-image: url(../img/similarHeight.jpg);

                background-repeat: repeat-y;

                border: 1px solid #23527C;

            }

            .div-col {

                width:25%;

                float: left;

            }

            .clear {

                clear: both;

            }

        </style>

 

            <div class="div-col">

                <p><span>内容1</span></p>

            </div>

            <div class="div-col">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

            </div>

            <div class="div-col">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

            </div>

            <div  class="div-col">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

                <p><span>内容4</span></p>

                <p><span>...</span></p>

            </div>

            <div class="clear"></div>

        </div>

效果如下:

注意:

只是多加载了一张背景图,据说是目前比较流行的方式

背景图片需要视情况设计

标签最后用于清除浮动的元素等同于父元素加overflow: hidden; 让父元素高度自适应

实现4:flex布局

实现:

         父级元素设置:display: flex;

        <div class="div-row">

            <style type="text/css">

              .div-row {

                width: 400px;

                border: 1px solid #23527C;

                display: flex;

              }

              .div-col {

                width: 25%;

              }

            </style>

 

            <div class="div-col" style="background-color: #28A4C9;">

                <p><span>内容1</span></p>

            </div>

            <div class="div-col"  style="background-color: #31B0D5;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

            </div>

            <div class="div-col"  style="background-color: #269ABC;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

            </div>

            <div  class="div-col" style="background-color: #5BC0DE;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

                <p><span>内容4</span></p>

                <p><span>...</span></p>

            </div>

        </div>

效果如下:

注意:

版本兼容,IE10+

 

 

补充:指定子元素

实现:根据相对和绝对定位实现

         父级元素设置:position: relative;

         子一级元素设置:position: absolute;

 

        <div class="div-row">

        <style type="text/css">

            .div-row {

                width: 400px;

                position:relative ;

                border: 1px solid #23527C;

                overflow: hidden;

            }

            .div-col1 {

                width: 25%;

                float: left;

            }

            .div-col2 {

                width: 25%;

                left: 25%;

                top: 0;

                float: left;

                position: absolute;

            }

            .div-col3 {

                width: 25%;

                left: 50%;

                top: 0;

                float: left;

                position: absolute;

            }

            .div-col4 {

                width: 25%;

                left: 75%;

                top: 0;

                float: left;

                position: absolute;

            }

        </style>

 

            <div class="div-col1" style="background-color: #28A4C9;">

                <p><span>内容1</span></p>

            </div>

            <div class="div-col2"  style="background-color: #31B0D5;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

            </div>

            <div class="div-col3"  style="background-color: #269ABC;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

            </div>

            <div  class="div-col4" style="background-color: #5BC0DE;">

                <p><span>内容1</span></p>

                <p><span>内容2</span></p>

                <p><span>内容3</span></p>

                <p><span>内容4</span></p>

                <p><span>...</span></p>

            </div>

        </div>

效果如下:

注意:

需要指定某个子元素,用于指定的子元素不做定位操作,根据他的高度而实现同一高度。

方法实用性差,也不是实现 根据内容最高的子元素自适应高度。

补充:js实现

    <div class="div-row">

        <div class="div-col" style="background-color: #28A4C9;">

            <p><span>内容1</span></p>

        </div>

        <div class="div-col"  style="background-color: #31B0D5;">

            <p><span>内容1</span></p>

            <p><span>内容2</span></p>

        </div>

        <div class="div-col"  style="background-color: #269ABC;">

            <p><span>内容1</span></p>

            <p><span>内容2</span></p>

            <p><span>内容3</span></p>

        </div>

        <div  class="div-col" style="background-color: #5BC0DE;">

            <p><span>内容1</span></p>

            <p><span>内容2</span></p>

            <p><span>内容3</span></p>

            <p><span>内容4</span></p>

            <p><span>...</span></p>

        </div>

    </div>

    <script type="text/javascript" src="jquery.js" ></script>

    <script type="text/javascript">

        $(function(){

            var baseHeight = 0;

            $(".div-col").each(function(){

                if(baseHeight < $(this).height()){

                    baseHeight = $(this).height()

                }

            })

            $(".div-row").css({"width":"400px","border":"1px solid #111","overflow":"hidden"});

            $(".div-col").css({"width":"25%","height":baseHeight,"float":"left"});

 

        })

    </script>

效果如下:

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值