你肯定会用到的CSS多行多列布局

前言:因为项目中使用flex过程中,如果采用space-between两端对齐,会遇到最后一行难以对齐的问题。本文主要对多行多列这种常见的布局,列出解决方案,方便大家日常开发使用。

创新互联建站是网站建设技术企业,为成都企业提供专业的成都做网站、网站设计,网站设计,网站制作,网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制适合企业的网站。10年品质,值得信赖!

话不多说,直接进入正题:

方案一:标签补位
我们都知道,之所以对不齐是因为最后一行的子项目没有达到4个,space-between的对齐方式,自然会把中间空出来。既然如此,何不直接补位,让元素排满4个。

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.     
 
  •     
  •  
  •     
  •  
  •      
  •      
  •      
  •  
  •      
  •      
  •      
  •  
  • 效果如下:

    如果子元素个数不是4个怎么办?我们细心观察,不难发现,最后一行的最小值是1个,那么我们只需要补位n-1个即可。如果只有3个,也可以用伪元素::after去补最后一个位置。

    方案二:计算剩余空间
    如果我们知道最后一行剩余空间的话,完全可以控制最后一个元素的边距或者缩放比例去占满剩下的空间,自然就能左对齐了。要做到这一点,首先得确定宽度和边距,宽度通常是已知的,我们只需要把边距确定下来,就能确认剩余空间。

    接上面的的例子,假设一行有4个, 每个占比24%,4个就是24% * 4 = 96% , 那么可以确定总边距是4%,由于一行有4个元素,而最后一个的右边距是多余的,那么可以确定单个的边距为 4% / 3 = 1.333% , 计算出来后就可以开始写代码了:

     
     
     
     
    1.  
    2.  
    3.  
    4.  
    5.      
    6.      
    7.      
    8.      
    9.      
    10.      
    11.  

    效果如下:

    可能有些小伙伴觉得懒得记,那么下面直接给出封装好的sass mixin, 复制即可使用:

     
     
     
     
    1. /** 
    2.  * 多列布局 
    3.  * $count 项目数量 
    4.  * $itemWidth 项目宽度,百分比,不含百分号 
    5.  * $itemHeight 项目高度,随意 
    6.  */ 
    7. @mixin grid($count:4, $itemWidth:20, $itemHeight:auto) { 
    8.     $rest: 100 - $itemWidth * $count; // 剩余空间 
    9.     $space: percentage($rest/($count - 1)/100); // 边距 
    10.     display: flex; 
    11.     flex-wrap: wrap; 
    12.  
    13.     /*此处的*号建议替换成具体的布局容器(div,view...),以加快css解析*/ 
    14.     & > * { 
    15.         flex: 0 0 #{$itemWidth + '%'}; 
    16.         height: $itemHeight; 
    17.         margin-right: $space; 
    18.         margin-bottom: $space; 
    19.         box-sizing: border-box; 
    20.  
    21.         &:nth-child(#{$count}n) { 
    22.             margin-right: 0; 
    23.         } 
    24.  
    25.         &:nth-last-child(-n + #{$count}) { 
    26.             margin-bottom: 0; 
    27.         } 
    28.  
    29.         /*为了兼容space-between的布局,占满剩余空间*/ 
    30.         &:last-child { 
    31.             margin-right: auto; 
    32.         } 
    33.     } 
    34.  
    35. /*使用方法*/ 
    36. .list{ 
    37.     /* 一行4项,每项20%宽度 */ 
    38.     @include grid(4,20) 

    以上为flex版本,假如你需要兼容ie浏览器,那么可以用float布局替换,float自动左对齐,也就不需要填充最后的剩余空间了。

    方案三:网格布局
    网格布局,默认就是左对齐,即使使用space-between。

     
     
     
     
    1.  
    2.  
    3.  
    4.  
    5.      
    6.      
    7.      
    8.      
    9.      
    10.      
    11.  

    效果如下:

    上面的三个方案各有各的好处:

    1. 方案一的缺点是实现不够优雅,需要增加无用的占位标签。
    2. 方案二倒没什么缺点,除了写法会复杂点,但只要封装好mixin在sass中使用足够简单,即使需要兼容ie,也只需要换成float即可。
    3. 方案三,兼容性最差,无法在ie中正常使用,但用法最简单,布局甚至比flex还要强大。

    综上,实际使用中,还是推荐使用方案二。

    标题名称:你肯定会用到的CSS多行多列布局
    本文地址:http://www.mswzjz.cn/qtweb/news39/507639.html

    攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能

    贝锐智能技术为您推荐以下文章

    网站建设知识

    同城分类信息