如何让DIV随同层最高DIV自适应高度?

同层级有6个DIV,都随内容自适应,且有边框圆角属性,如何用纯CSS实现所有DIV高度一致。

HTML

<div class="con-pop clearfloat">
    <div class="recommend-sort sort-box"><p>推荐排序</p></div>
    <div class="distance-sort sort-box"><p>离我最近</p></div>
    <div class="distance-sort2 sort-box"><p>离我最近离我最近</p></div>
    <div class="distance-sort2 sort-box"><p>离我最近离我最近</p></div>
    <div class="distance-sort2 sort-box"><p>离我最近离我最近</p></div>
</div>

SCSS

.con-pop{
    width:92%;
    margin:1.5rem 4%;

    .sort-box{
        width: 30%;
        min-height: 3.45rem;
        border:1px solid #e5e5e5;
        border-radius:0.5rem;
        margin-right:4.5%;
        padding: 0.7rem 2.5%;
        display: table;
        float: left;
        &:nth-child(n+4){
            margin-top:0.9rem;
        }
        &:nth-child(3n){
            margin-right: 0;
        }
        p{
            display: table-cell;
            text-align: center;
            vertical-align:middle; 
            font-size:1.6rem;
            color:#000000;
        }
    }
}

现在效果:
图片描述

已使用解决方案:
1、padding-bottom和margin-bottom方法,但是会遮掉底部的border效果
2、使用父元素display:table,子元素display:table-cell,但是会挤在一行中,宽度30%自动忽略
3、Flex布局,只能实现同一行内高度自适应
图片描述

阅读 15.2k
2 个回答

我觉得纯CSS可能实现不了这个功能哈。
首先,在浏览器中如果没有事先指定一个高度,并且父元素也没有设置,那么这个元素的高度就只能通过内部元素计算而来了。所以想想题主的需求,那么就出现矛盾,明明要靠子元素计算父元素高度,但又要事先将父元素等分计算后将高度赋值给子元素,这肯定是不可能的。
那么为什么同一行可以?因为一行中最高的那一个子元素决定了这一行的高度,父元素得到这个高度后再赋值给同行的其他子元素,这就没问题了。其实任何元素都不可能直接知道自己兄弟元素的高度的。

以上是我的理解,如果有不对的,请指正。

外层元素使用display:table;内层元素使用display:table-cell;就会模拟table>tr>td的等高效果
另外还有使用margin和padding正负为零的方法,不过ie8以前的浏览器已经快死绝了吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题