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

CSS 實現(xiàn)從上到下從左到右的列表布局

開發(fā) 前端
有些同學可能會想到用 JS將元素數(shù)組分成三份,做成一個二維數(shù)組,然后每個數(shù)組嵌套一層容器水平排列就行了。其實呢,純 CSS 也是可以完成的,一起來看看吧。

正常情況下,網頁中的列表都是從左到右,從上到下的,如下:

但有時候可能需要從上到下,從左到右的排列方式,就像這樣。

其實這種排序更符合日常生活中的排列方式。

雖然在網頁中不常見,但如果真的碰到了這種布局,該如何處理呢?

有些同學可能會想到用 JS將元素數(shù)組分成三份,做成一個二維數(shù)組,然后每個數(shù)組嵌套一層容器水平排列就行了。其實呢,純 CSS 也是可以完成的,一起來看看吧。

一、grid 布局

很多同學很自然會想到grid布局。沒錯,grid也能實現(xiàn)這樣的效果,不過有些局限性。

簡單寫一下頁面結構,HTML如下:

<div class="list">
  <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>

簡單修飾一下。

.list{
  width: 400px;
  outline: 3px solid #3E65FF;
  padding: 8px;
  counter-reset: num;
}
.item{
  text-align: center;
  color: #fff;
  /*  */
  counter-increment: num;
}
.item::before{
  content: counter(num);
  display: block;
  line-height: 30px;
  background-color: #3E65FF;
}

我們這里通過計數(shù)器來顯示編號,效果如下:

現(xiàn)在用grid布局來實現(xiàn)3*N的排列。

.list{
  /**/
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}

效果如下:

這就是正常的、一般見到的網格布局了。

如何改成從上到下、從左到右的方式呢?這里要用到grid-auto-flow,也就是改變網格的排列方式。

https://developer.mozilla.org/zh-CN/docs/Web/CSS/grid-auto-flow。

由于是縱向排列,所以得知道縱向一共有多少格,因此需要規(guī)定一下縱向的規(guī)則。

.list{
  /**/
  grid-auto-flow: column;
  grid-template-rows: repeat(8, 1fr);
}

這樣就分成了N*8的網格,效果如下:

二、grid布局的小問題

不過這種實現(xiàn)還有點問題,當子項比較少時,可能會這樣。

其實也不算問題,如果你剛好就是需要這樣的效果的話。那么,如何才能在這種情況下也能自動改變縱向的數(shù)量,讓整個表格盡可能等分呢?

純 CSS暫時還沒想到好辦法,只能借助JS來計算了。由于一般都是在框架里,所以這種計算也比較方便。我們可以用 CSS變量來動態(tài)渲染,下面是vue中的寫法。

<div :style="--n: Math.ceil(list.length / 3)">
  
</div>

然后再CSS中使用這個變量。

.list{
  /**/
  grid-auto-flow: column;
  grid-template-rows: repeat(var(--n), 1fr);
}

這樣就能動態(tài)排列了。

你可以訪問以下鏈接查看真實效果

  • CSS columns grid (codepen.io)[1]
  • CSS columns grid (juejin.cn)[2]

三、columns 布局

沒錯我們這里又要用上這個不起眼的columns 布局。

回到這里,這種從上到下,從左到右不正好就是 columns 擅長的嗎?

比如默認布局是這樣的。

我們只需要加上分欄數(shù)量就可以了。

.list{
  column-count: 3; /* 分欄數(shù)量 */
}

無需任何其他規(guī)范,效果就出來了。

還可以通過column-gap來設置分欄的間隔。

.list{
  /**/
  column-gap: 8px; /* 分欄間隔 */
}

這樣就實現(xiàn)了我們想要的效果了,而且不論數(shù)量多少,都能自動等分。

是不是非常簡單呢?你可以訪問以下鏈接查看真實效果

  • CSS columns grid (codepen.io)[3]
  • CSS columns grid (juejin.cn)[4]

四、總結一下

一個非常實用的布局小技巧,你學到了嗎?下面總結一下。

  • 正常網頁中的列表都是從左到右,從上到下的,但有時候也會碰到從上到下,從左到右的。
  • grid布局可以實現(xiàn)m*n的網格布局。
  • grid布局可以通過grid-auto-flow,改變網格的排列方式。
  • grid布局無法自動改變縱向的數(shù)量,讓整個表格盡可能等分,需要借助一點點JS。
  • columns 布局可以直接實現(xiàn)從上到下,從左到右的布局。

[1]CSS columns grid (codepen.io): https://codepen.io/xboxyan/pen/dyEGprP。

[2]CSS columns grid (juejin.cn): https://code.juejin.cn/pen/7370229755154530356。

[3]CSS columns grid (codepen.io): https://codepen.io/xboxyan/pen/KKLVgOR。

[4]CSS columns grid (juejin.cn): https://code.juejin.cn/pen/7370233304550752293。

責任編輯:姜華 來源: 前端偵探
相關推薦

2021-12-03 09:16:03

二叉樹打印平衡

2023-11-07 00:04:53

2020-01-13 10:45:35

JavaScript解析前端

2021-01-15 08:19:26

二維數(shù)組LeetCode

2023-10-30 09:18:28

CSSColumns布局

2009-12-15 11:45:23

安裝Fedora 9

2010-09-14 17:07:26

DIV浮動定位CSS

2022-05-26 00:06:19

CSSFirefoxElectron

2010-09-02 13:53:58

CSS Sprites

2010-09-09 13:12:54

CSSfloatDIV

2019-04-03 13:00:27

CSSBFC前端

2020-10-22 08:25:22

JavaScript運作原理

2023-08-22 13:18:00

Web 開發(fā)CSS

2023-03-31 07:55:43

優(yōu)化Oracle數(shù)據(jù)庫

2022-05-10 11:02:02

電話子系統(tǒng)鴻蒙

2014-09-10 17:26:26

LTE空中接口

2010-08-23 15:22:56

CSSfloat

2024-06-27 00:36:06

2010-08-16 10:10:11

DIV+CSS

2021-07-31 23:25:34

CSS布局UI
點贊
收藏

51CTO技術棧公眾號