自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你肯定會(huì)用到的CSS多行多列布局

開(kāi)發(fā) 前端
因?yàn)轫?xiàng)目中使用flex過(guò)程中,如果采用space-between兩端對(duì)齊,會(huì)遇到最后一行難以對(duì)齊的問(wèn)題。本文主要對(duì)多行多列這種常見(jiàn)的布局,列出解決方案,方便大家日常開(kāi)發(fā)使用。

前言:因?yàn)轫?xiàng)目中使用flex過(guò)程中,如果采用space-between兩端對(duì)齊,會(huì)遇到最后一行難以對(duì)齊的問(wèn)題。本文主要對(duì)多行多列這種常見(jiàn)的布局,列出解決方案,方便大家日常開(kāi)發(fā)使用。

話(huà)不多說(shuō),直接進(jìn)入正題: 

方案一:標(biāo)簽補(bǔ)位
我們都知道,之所以對(duì)不齊是因?yàn)樽詈笠恍械淖禹?xiàng)目沒(méi)有達(dá)到4個(gè),space-between的對(duì)齊方式,自然會(huì)把中間空出來(lái)。既然如此,何不直接補(bǔ)位,讓元素排滿(mǎn)4個(gè)。

  1. <!-- 樣式 --> 
  2. <style> 
  3.     .list{ 
  4.         display: flex; 
  5.         justify-content: space-between
  6.         flex-wrap: wrap; 
  7.     } 
  8.     .item{ 
  9.         /* flex: 0 0 24% 該屬性等價(jià)于 flex:none;width:24% */ 
  10.         flex: 0 0 24%; 
  11.         height: 100px; 
  12.         background-color: aqua; 
  13.         margin-bottom: 10px; 
  14.     } 
  15.     .item-fill{ 
  16.         flex: 0 0 24%; 
  17.         height:0; 
  18.     } 
  19.     /* 消除最后一行多余邊距 */ 
  20.     .list .item:nth-last-child(-n+4){ 
  21.         margin-bottom: 0; 
  22.     } 
  23. </style> 
  24.  
  25. <!-- html --> 
  26. <div class="list"
  27.     <div class="item"></div> 
  28.     <div class="item"></div> 
  29.     <div class="item"></div> 
  30.     <div class="item"></div> 
  31.     <div class="item"></div> 
  32.     <div class="item"></div> 
  33.  
  34.     <div class="item-fill"></div> 
  35.     <div class="item-fill"></div> 
  36.     <div class="item-fill"></div> 
  37. </div> 

效果如下:

如果子元素個(gè)數(shù)不是4個(gè)怎么辦?我們細(xì)心觀(guān)察,不難發(fā)現(xiàn),最后一行的最小值是1個(gè),那么我們只需要補(bǔ)位n-1個(gè)即可。如果只有3個(gè),也可以用偽元素::after去補(bǔ)最后一個(gè)位置。

方案二:計(jì)算剩余空間
如果我們知道最后一行剩余空間的話(huà),完全可以控制最后一個(gè)元素的邊距或者縮放比例去占滿(mǎn)剩下的空間,自然就能左對(duì)齊了。要做到這一點(diǎn),首先得確定寬度和邊距,寬度通常是已知的,我們只需要把邊距確定下來(lái),就能確認(rèn)剩余空間。

接上面的的例子,假設(shè)一行有4個(gè), 每個(gè)占比24%,4個(gè)就是24% * 4 = 96% , 那么可以確定總邊距是4%,由于一行有4個(gè)元素,而最后一個(gè)的右邊距是多余的,那么可以確定單個(gè)的邊距為 4% / 3 = 1.333% , 計(jì)算出來(lái)后就可以開(kāi)始寫(xiě)代碼了:

  1. <!-- css --> 
  2. <style> 
  3.     .list{ 
  4.         display: flex; 
  5.         justify-content: space-between
  6.         flex-wrap: wrap; 
  7.     } 
  8.     .item{ 
  9.         flex: 0 0 24%; 
  10.         height: 100px; 
  11.         background-color: aqua; 
  12.         /* 邊距懶得算,css函數(shù)代替 */ 
  13.         margin-right: calc(4% / 3); 
  14.         margin-bottom: calc(4% / 3); 
  15.     } 
  16.     /* 去除每行尾的多余邊距 */ 
  17.     .item:nth-child(4n){ 
  18.         margin-right: 0; 
  19.     } 
  20.     /* 使最后一個(gè)元素的邊距填滿(mǎn)剩余空間 */ 
  21.     .item:last-child{ 
  22.         margin-right: auto; 
  23.     } 
  24.     /* 也可以給列表增加一個(gè)占位元素,自動(dòng)縮放填滿(mǎn)剩余空間 */ 
  25.     /* .list::after
  26.         content: ''
  27.         flex: 1; 
  28.         height: 0; 
  29.     } */ 
  30.     .list .item:nth-last-child(-n+4){ 
  31.         margin-bottom: 0; 
  32.     } 
  33. </style> 
  34. <!-- html --> 
  35. <div class="list"
  36.     <div class="item"></div> 
  37.     <div class="item"></div> 
  38.     <div class="item"></div> 
  39.     <div class="item"></div> 
  40.     <div class="item"></div> 
  41.     <div class="item"></div> 
  42. </div> 

效果如下:

可能有些小伙伴覺(jué)得懶得記,那么下面直接給出封裝好的sass mixin, 復(fù)制即可使用:

  1. /** 
  2.  * 多列布局 
  3.  * $count 項(xiàng)目數(shù)量 
  4.  * $itemWidth 項(xiàng)目寬度,百分比,不含百分號(hào) 
  5.  * $itemHeight 項(xiàng)目高度,隨意 
  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.     /*此處的*號(hào)建議替換成具體的布局容器(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的布局,占滿(mǎn)剩余空間*/ 
  30.         &:last-child { 
  31.             margin-right: auto; 
  32.         } 
  33.     } 
  34.  
  35. /*使用方法*/ 
  36. .list{ 
  37.     /* 一行4項(xiàng),每項(xiàng)20%寬度 */ 
  38.     @include grid(4,20) 

以上為flex版本,假如你需要兼容ie瀏覽器,那么可以用float布局替換,float自動(dòng)左對(duì)齊,也就不需要填充最后的剩余空間了。

方案三:網(wǎng)格布局
網(wǎng)格布局,默認(rèn)就是左對(duì)齊,即使使用space-between。

  1. <style> 
  2.     .list { 
  3.         display: grid; 
  4.         justify-content: space-between
  5.         grid-template-columns: 1fr 1fr 1fr 1fr; /*設(shè)置等比列*/ 
  6.         gap: 10px; /*行間距*/ 
  7.     } 
  8.     .item{ 
  9.         background-color: aqua; 
  10.         height: 100px; 
  11.     } 
  12. </style> 
  13.  
  14. <!-- html --> 
  15. <div class="list"
  16.     <div class="item"></div> 
  17.     <div class="item"></div> 
  18.     <div class="item"></div> 
  19.     <div class="item"></div> 
  20.     <div class="item"></div> 
  21.     <div class="item"></div> 
  22. </div> 

效果如下:

上面的三個(gè)方案各有各的好處:

  1. 方案一的缺點(diǎn)是實(shí)現(xiàn)不夠優(yōu)雅,需要增加無(wú)用的占位標(biāo)簽。
  2. 方案二倒沒(méi)什么缺點(diǎn),除了寫(xiě)法會(huì)復(fù)雜點(diǎn),但只要封裝好mixin在sass中使用足夠簡(jiǎn)單,即使需要兼容ie,也只需要換成float即可。
  3. 方案三,兼容性最差,無(wú)法在ie中正常使用,但用法最簡(jiǎn)單,布局甚至比f(wàn)lex還要強(qiáng)大。

綜上,實(shí)際使用中,還是推薦使用方案二。

 

責(zé)任編輯:姜華 來(lái)源: 前端歷劫之路
相關(guān)推薦

2023-03-22 08:09:40

ChatGPTBard

2015-04-08 09:54:41

OpenStack資源私有云部署

2021-06-06 16:52:11

工具函數(shù)JS

2009-07-15 18:23:36

跨流覽器多列布局

2022-10-19 15:20:58

pandas數(shù)據(jù)處理庫(kù)技巧

2019-04-03 13:00:27

CSSBFC前端

2010-11-29 10:31:01

連接Sybase

2019-09-09 09:50:27

設(shè)置Java線(xiàn)程池

2011-07-05 15:53:35

CSS

2021-01-29 11:05:50

PrintPython代碼

2023-02-28 07:56:07

V8內(nèi)存管理

2021-01-02 09:48:13

函數(shù)運(yùn)算js

2022-04-01 15:17:05

Java開(kāi)發(fā)技巧

2022-06-14 12:45:34

物聯(lián)網(wǎng)物聯(lián)網(wǎng)技術(shù)

2017-03-07 09:15:08

iOS技巧開(kāi)發(fā)

2025-04-08 05:55:00

CSS布局Grid

2021-12-29 22:29:10

JavaScript前端數(shù)組

2010-09-06 15:46:08

CSSDIV

2013-09-16 15:42:00

Android優(yōu)化界面UI

2011-06-03 15:32:25

CSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)