CSS:自适应N列布局如何解决两端对齐

作者: luichooy | 来源:发表于2016-06-24 11:49 被阅读1488次

关于每行N列的这种布局,存在一个两端对齐的问题,因为每一列都会存在一个margin-left或者margin-right,导致最后一个超出父元素的边界。
通过一番努力,终于解决了这个遗留很久的问题,废话不多说,先看做完之后的效果图

2.PNG

先给出dom结构

<body>
    <div class="container">
        <div class="main">
            <div class="item">头条</div>  
            <div class="item">推荐</div> 
            <div class="item">视频</div> 
            <div class="item">娱乐</div>  
            <div class="item">体育</div>
            <div class="item">高考</div>
            <div class="item">汽车</div>
            <div class="item">科技</div>
            <div class="item">图片</div>
            <div class="item">地方</div>
            <div class="item">军事</div>
            <div class="item">社会</div>
            <div class="item">NBA</div>
            <div class="item">八卦</div>
            <div class="item">时尚</div>
            <div class="item">女性</div>
            <div class="item">博客</div>
            <div class="item">数码</div>
            <div class="item">教育</div>
            <div class="item">星座</div> 
            <div class="item">游戏</div> 
            <div class="item">家具</div> 
            <div class="item">健康</div> 
        </div>
    </div>
</body>

一、解决思路

1.PNG

1.假定每行4列,则每一列宽度应该为25%,包括border和margin-right,此时4列加起来的宽度应该正好是100%,即父元素的宽度
2.按照第一步的逻辑,每一行最后一列的margin-right会使每一行的右侧和父元素并不是对齐的,看下图。我们暂时不管这个问题,后面会解决。

3.PNG

3.每一列包括自己本身div.item和margin-right,设本身宽度为23%,margin-right为2%,这样加起来刚好25%。

注意:div.item自身有border,会影响百分比计算,将它的box-sizing设置为border-box,会将border的宽度计算在23%的width里面,这样就可以消除影像

4.最后解决第2步中存在的问题,通过给div.item的父元素div.main 设置margin-right:-2%,就可以解决这个问题了。
二、完整CSS代码

<style type="text/css">
        .container{
    margin:50px 10px;
    border-top:1px solid #000;
    overflow: hidden;
    }
    .main{
        margin-top:10px;
        margin-right:-2%;   
    }
    .item{
        width:23%;
        height:30px;
        line-height: 30px;
        text-align: center;
        margin-right:2%;
        box-sizing:border-box;
        float:left;
        border:1px solid #cbd1d0;
        margin-bottom:10px;
    }
</style>

最后,大家如果还有其他的解决办法或者思路,欢迎指导。如果文章有问题,也可以在评论中指出来,么么~~~

相关文章

网友评论

    本文标题:CSS:自适应N列布局如何解决两端对齐

    本文链接:https://www.haomeiwen.com/subject/lyuodttx.html