成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CSS 實現從上到下從左到右的列表布局

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

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

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

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

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

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

一、grid 布局

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

簡單寫一下頁面結構,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;
}

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

現在用grid布局來實現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。

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

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

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

二、grid布局的小問題

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

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

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

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

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

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

這樣就能動態排列了。

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

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

三、columns 布局

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

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

比如默認布局是這樣的。

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

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

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

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

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

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

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

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

四、總結一下

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

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

[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

二維數組LeetCode

2023-10-30 09:18:28

CSSColumns布局

2009-12-15 11:45:23

安裝Fedora 9

2022-05-26 00:06:19

CSSFirefoxElectron

2010-09-14 17:07:26

DIV浮動定位CSS

2010-09-02 13:53:58

CSS Sprites

2019-04-03 13:00:27

CSSBFC前端

2010-09-09 13:12:54

CSSfloatDIV

2020-10-22 08:25:22

JavaScript運作原理

2023-08-22 13:18:00

Web 開發CSS

2023-03-31 07:55:43

優化Oracle數據庫

2022-05-10 11:02:02

電話子系統鴻蒙

2014-09-10 17:26:26

LTE空中接口

2010-08-23 15:22:56

CSSfloat

2024-06-27 00:36:06

2021-07-31 23:25:34

CSS布局UI

2017-10-10 15:52:17

前端FlexboxCSS Grid
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费激情视频 | 欧美精品乱码久久久久久按摩 | 欧美一区二区三区在线观看视频 | 久久99精品久久 | 九九色综合 | 欧美毛片免费观看 | 一级黄片一级毛片 | 中文字幕电影在线观看 | 中文字幕av中文字幕 | 欧美bondage紧缚视频 | 日韩欧美国产精品 | 自拍第1页| 区一区二在线观看 | 国产99久久久国产精品 | 国内自拍视频在线观看 | 日本不卡一区 | 久操伊人 | 男女羞羞免费网站 | 欧美涩 | 99亚洲国产精品 | 国产在线色 | 亚洲一区在线免费观看 | 国产99久久 | 看一级毛片| 五月综合色啪 | 亚洲一区二区精品视频 | 国产精品久久久久久久久久久免费看 | 国产激情91久久精品导航 | 一本一道久久a久久精品综合 | 国产亚洲精品久久午夜玫瑰园 | 午夜免费看 | 精品久久久久久久人人人人传媒 | 91不卡在线 | 天堂国产 | 日韩精品无码一区二区三区 | 国产在线区 | 99国内精品久久久久久久 | 视频二区 | 亚洲国产成人av好男人在线观看 | 99视频免费 | 亚洲精品一区二区 |