国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 CSS Columns 布局來實現(xiàn)自動分組布局

開發(fā) 前端
Columns布局,又稱“多列”布局(或者“分欄”布局),這是一個使用場景比較有限,但是幾乎無法被替代的一種布局。

最近在項目中碰到這樣一個布局,有一個列表,先按照 4 * 2 的正常順序排列,當超過 8 個后,會橫向重新開始 4 * 2 的布局,有點像一個個獨立的分組,然后水平排列,如下

圖中序號是 dom 序列,所以其實這這樣的一個順序。

很多同學可能會想到給子元素分組(通過 JS將原數(shù)組拆分組合成一個二維數(shù)組),每 8 個套一層容器,然后水平排列就行了

是不是有點麻煩呢?

其實,無需單獨嵌套容器也能實現(xiàn)類似分組的效果,這就需要借助本文要介紹的 column 布局了,一起看看吧~

一、簡單介紹一下 columns

平時接觸較多的都是flex或者grid,但還有一個columns布局往往被忽視了。

https://developer.mozilla.org/zh-CN/docs/Web/CSS/columns

columns布局,又稱“多列”布局(或者“分欄”布局),這是一個使用場景比較有限,但是幾乎無法被替代的一種布局。

使用非常簡單,直接看一個例子,假設有這樣一段文本

p{
  width: 500px;
}
<p>歡迎關注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧,比如這篇文章,如何使用 CSS columns 布局來實現(xiàn)自動分組布局,一起看看吧</p>

默認是這樣的。

下面我們將段文本分成3列。

p{
  columns: 3;
}

看,自動就分成了3列。

并且閱讀順序是從左到右,從下到下,直到整列閱讀完成,非常類似以前的報刊讀物閱讀習慣。

除了指定列數(shù),還可以根據指定寬度自動去計算列數(shù),比如:

p{
  columns: 100px;
}

效果如下:

這個表示按照最小100px去分段,看最多可以分成多少列,并不是說每列就一定是 100,應該是大于等于 100,直到剩余空間可以再放下一列。

那為啥設置的是100,總寬度是500,卻只分成了4列?原因是有「默認列間距」,如果去除這個間距。

p{
  column-gap: 0px;
}

這樣就剛好被分成了5列。

看不清楚?加個分割線試試。

p{
	column-rule: 1px solid red;
}

是不是剛好分成了 5 列?(注意,這里的分割線是不占空間的)。

簡單了解columns多列布局后,下面來看另外的用途。

二、columns 實現(xiàn)橫向分組布局

可能你已經發(fā)現(xiàn)了,上面的文本分列布局和我們文章開頭所需要的效果非常類似,都是一列一列的,因此我們可以嘗試用columns布局來實現(xiàn)這樣的效果。

假設html是這樣的。

<div class="wrap">
  <div class="list">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
    <div class="item">9</div>
    <div class="item">10</div>
    <div class="item">11</div>
    <div class="item">12</div>
    <div class="item">13</div>
    <div class="item">14</div>
  </div>
</div>

這里多了一層wrap是用來做滾動容器的,簡單修飾一下。

.wrap{
  display: flex;
  width: 400px;
  overflow: auto;
  outline: 1px dashed #9747FF;
}
.item{
  display: inline-flex;
  width: 80px;
  margin: 10px;
  aspect-ratio: 1/1;
  background: #FFE8A3;
  color: #333;
  font-size: 30px;
  border-radius: 10px;
  align-items: center;
  justify-content: center;
}

效果如下,很正常的一個布局。

現(xiàn)在,我們希望縱向高度是固定的,然后橫向滾動,先加一個高度試試。

.list{
  height: 200px;
}

這樣就變成了縱向滾動的布局了。

那么,如何讓它橫向分欄并且滾動呢?其實非常簡單,只需要添加一行。

.list{
  height: 200px;
  column-width: 400px;
}

設置分欄寬度為滾動容器寬度之后,就自動將整個列表分成多組了,相當于每個滾動屏幕作為一組,從左到右排列,由于空間不足,所以可以橫向滾動。

是不是非常神奇?僅需一個屬性就實現(xiàn)了縱向滾動到橫向滾動的切換。

三、借助 scroll-snap 實現(xiàn)輪播效果

通常碰到這種橫向滾動的效果,你可能會想到一個swiper組件,也就是那種一屏一屏切換的效果,沒錯,我們這里也可以借助scroll-snap輕易實現(xiàn)。

關于scroll-snap,網上教程非常多,MDN 官網也有非常清晰的 demo,如果不熟悉的可以先去了解一下:https://developer.mozilla.org/zh-CN/docs/Web/CSS/scroll-snap-type。

這里就不詳細介紹了。

回到這里,由于整個列表下面只有一層子元素,好像并沒有辦法區(qū)分每一屏的臨界點。其實不然,可以想一下,這里每一屏有 8 個元素,也就是第1、9、17...個分別是每一屏的第一個元素,是不是可以以這些元素為標識(吸附對象)呢?

首先要在滾動容器下定義一下。

.wrap{
  scroll-snap-type: x mandatory;
}

然后給第1、9、17...個元素添加吸附對象,這里可以用nth-child選擇器。

.item:nth-child(8n+1){
  scroll-snap-align: start;
}

效果如下(為了區(qū)分,把每一屏的第一個元素背景做了高亮)。

還可以多添加點元素,多切幾屏看看效果:

完整代碼可以參考:

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

四、CSS 實現(xiàn)的優(yōu)勢和總結

相對于傳統(tǒng)的 JS實現(xiàn)來說,有哪些好處呢?

  • 少了一層嵌套容器,業(yè)務邏輯會根據干凈。
  • 自適應強,可以根據需求選擇固定列數(shù)或者固定寬度,JS往往只能根據數(shù)量去分組。
  • 不會報錯,想想看,JS中的數(shù)組經常會出現(xiàn)xxx.slice is not function這樣的錯誤,輕則警告,總則整個頁面白屏。
  • 布局足夠靈活,想橫向滾動就橫向滾動,想縱向滾動就縱向滾動,而JS方式往往還需要改變數(shù)組形態(tài)。

有這么多好處還不趕緊用起來?下面再來回顧一下columns布局。

  • columns布局,又稱“多列”布局(或者“分欄”布局),可以將默認的文本流輕易分成多欄,非常類似以前的報刊讀物排版。
  • column可以通過寬度(column-width)去自動分割,或者通過指定數(shù)量(column-count)將布局分成多少欄。
  • column-gap可以設置分欄之間的空隙,默認是有間隔的。
  • column-rule可以設置分隔線,這種分割線是不占據空間的。
  • columns布局使用場景比較有限,但是幾乎無法被替代。

多想象一下,其實可以有更多的使用場景,雖然本來并不是做這個事情的。

[1]CSS columns (juejin.cn): https://code.juejin.cn/pen/7293927297596260379。

[2]CSS column (codepen.io): https://codepen.io/xboxyan/pen/RwvPLEM。

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

2020-03-26 10:43:57

CSS Grid Ge Grid代碼

2010-08-24 11:00:55

DIV CSS

2017-10-10 15:52:17

前端FlexboxCSS Grid

2010-08-17 11:12:18

DIV CSS

2010-09-14 17:07:26

DIV浮動定位CSS

2023-02-07 09:01:22

CSS

2022-10-13 09:01:24

GridCSS二維布局

2010-08-23 15:22:56

CSSfloat

2019-04-03 13:00:27

CSSBFC前端

2024-04-09 10:10:23

GridCSS網格

2021-12-01 09:53:46

CSS 技巧代碼重構

2022-10-08 00:02:00

CSS工具系統(tǒng)

2010-09-02 13:53:58

CSS Sprites

2010-09-09 13:12:54

CSSfloatDIV

2020-07-01 08:36:43

CSS規(guī)范web

2022-05-26 00:06:19

CSSFirefoxElectron

2010-08-30 14:03:59

CSS

2010-09-13 16:22:19

ulliCSS

2010-09-02 11:18:46

CSSfloatposition

2010-09-09 10:56:56

CSS
點贊
收藏

51CTO技術棧公眾號

中出福利视频| 黄色av免费在线看| 亚洲另类自拍| 91精品国产色综合久久不卡98口| 视频免费一区| 岛国av一区二区| 欧美xx网站| 中文字幕中文字幕一区二区| 免费的av在线| 精品午夜一区二区三区在线观看| 国产日韩欧美亚洲一区| 亚欧美无遮挡hd高清在线视频| 国产91在线播放精品91| 国产劲爆久久| 91黑丝高跟在线| 奇米777国产一区国产二区| 欧美猛男性生活免费| 欧美专区一区| 午夜免费日韩视频| 国产精品一线天粉嫩av| 国产精品视频白浆免费视频| 成人影视亚洲图片在线| 国产成人啪精品视频免费网| 清纯唯美亚洲综合一区| 国产玖玖精品视频| 在线看片不卡| 久久资源亚洲| 国产精品一卡二| 亚洲欧洲日产国码无码久久99| 国产清纯美女被跳蛋高潮一区二区久久w| 韩国日本美国免费毛片| 亚洲免费av在线| 国产在线网站| 亚洲电影在线看| 激情开心成人网| www亚洲欧美| 女同久久另类99精品国产| 国产精品福利在线观看| 真实国产乱子伦精品一区二区三区| 99国产超薄肉色丝袜交足的后果| 在线免费高清一区二区三区| 亚洲精品中文字幕乱码三区不卡| 狠狠色2019综合网| 999在线免费视频| 五月天亚洲婷婷| 欧美猛烈性xbxbxbxb| 亚洲激情视频网| 亚洲91在线| 国产精品成人va在线观看| 欧美人成在线| 一区二区三区偷拍| 国产亚洲成av人在线观看导航| 最近中文字幕mv2018在线高清| 91福利视频在线| 欧美1级2级| 国产精品91久久久| 美女精品在线观看| 黄色一级二级三级| 91国产丝袜在线播放| 一区二区三区电影大全| 久久99热精品| 欧美一区二区三区久久精品| 一区二区精品免费视频| 国产欧美日韩精品a在线观看| 头脑特工队2免费完整版在线观看| 精品av久久707| 欧美三级午夜理伦三级在线观看| 国产在线精品一区二区三区| 26uuu欧美| av在线1区2区| 欧美日韩国产第一页| 欧美日韩亚洲一区二区三区在线| 免费视频爱爱太爽了| 日韩欧亚中文在线| 国产精品成人3p一区二区三区| **亚洲第一综合导航网站| 成人黄色777网| 精品av中文字幕在线毛片| 老司机免费在线视频| 高清欧美一区二区三区| 中文字幕免费一区二区| 亚洲美女av在线播放| 日韩极品在线| 日韩久久久久久久| 亚洲精品va在线观看| 黄色在线网站噜噜噜| 国产精品扒开腿做| 成人做爰69片免费看网站| 毛片在线播放网站| 性色av一区二区三区在线观看| 日韩精品成人一区二区在线| 久草在线在线视频| 国产午夜精品一区理论片飘花| 男人日女人下面视频| 亚洲6080在线| 日本久久伊人| 一区二区三区四区免费视频| 亚洲高清久久久| jizz久久久久久| 韩日午夜在线资源一区二区 | 日韩一卡二卡三卡国产欧美| 亚洲都市激情| 日韩a∨精品日韩在线观看| 欧美网站大全在线观看| 久草成人在线| 成人精品视频一区二区| 国产手机视频精品| 午夜亚洲性色福利视频| 日本福利在线观看| 国产精品国产三级国产aⅴ浪潮| 久久综合久久综合亚洲| 色偷偷偷在线视频播放| 欧日韩一区二区三区| 欧美亚洲禁片免费| 99久久夜色精品国产亚洲96 | 欧美亚洲不卡| 视频三区在线观看| 欧美一区在线直播| 精品一区二区免费视频| www免费网站在线观看| 国产精品人成电影| 欧美韩日一区二区三区| 欧美成人ⅴideosxxxxx| 先锋影音日韩| 日韩免费观看高清完整版在线观看| 午夜国产精品视频| 中文字幕电影在线| 国产精品亚发布| 综合色天天鬼久久鬼色| 成人av影音| 亚洲精品自拍网| 欧美精品精品精品精品免费| 久久久高清一区二区三区| 91成人福利社区| 欧美三级午夜理伦三级| 欧美精品手机在线| 日本一区二区三区在线观看| 国产成人免费视频网站视频社区| 第九区2中文字幕| 在线播放国产一区中文字幕剧情欧美 | 操碰在线免费| 国产成人一区二区三区电影| 国产精品福利一区二区| 麻豆成人入口| 日本按摩中出| 国产有码一区二区| 色婷婷综合五月| 久久都是精品| 欧美成人精品一区二区男人小说| 国产av人人夜夜澡人人爽麻豆| 中文字幕综合一区| 久久综合色婷婷| 午夜精品福利影院| 三级黄视频在线观看| 看高清中日韩色视频| 亚洲精品在线不卡| 日本一区二区综合亚洲| 久久中文字幕av| 中文字幕在线三区| 老子影院午夜伦不卡大全| 久久噜噜噜精品国产亚洲综合| 亚洲精品综合在线| 亚洲私拍自拍| 日韩一区二区三区免费视频| 2020色愉拍亚洲偷自拍| 国产精品爱久久久久久久| 欧美精品日韩一区| 丰满放荡岳乱妇91ww| 网曝91综合精品门事件在线| 国产高清视频在线观看| 日本一区二区免费高清视频| 美女av一区二区| 好吊成人免视频| 激情成人综合网| 超碰在线成人| 91免费在线| eeuss中文| 日本久久久久久久久| 欧美日高清视频| 9l国产精品久久久久麻豆| 成人3d精品动漫精品一二三| 蜜乳av一区| 黄色漫画在线免费观看| 久久香蕉综合色| 欧美激情视频在线观看| 欧美日本韩国一区二区三区视频| 99久久久久免费精品国产| 欧美aa国产视频| www.欧美视频| av在线电影播放| 午夜在线观看av| 任我爽在线视频精品一| 亚洲91精品在线| 亚洲成人av资源网| 亚洲一区二区三区美女| 国产一区二区在线观看视频| 99精品全国免费观看视频软件| 中文另类视频| 日本中文字幕在线看| 四虎精品一区二区永久在线观看|