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

关于每行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>

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,863评论 1 92
  • 1标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? CSS盒子模型:由四个属性组成的外边距(margi...
    秦小婕阅读 1,235评论 0 1
  • CSS 1、介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种,IE盒子模型、W3C...
    京程一灯阅读 1,762评论 3 26
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,830评论 0 2
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 1,001评论 0 1