詳解純css實現瀑布流(multi-column多列及flex布局)


瀑布流的布局自我感覺還是很吸引人的,最近又看到實現瀑布流這個做法,在這里記錄下,特別的,感覺flex布局實現瀑布流還是有點懵的樣子,不過現在就可以明白它的原理了

1.multi-column多列布局實現瀑布流

先簡單的講下multi-column相關的部分屬性

column-count設置列數column-gap設置列與列之間的間距column-width設置每列的寬度

還要結合在子容器中設置break-inside防止多列布局,分頁媒體和多區域上下文中的意外中斷

break-inside屬性值

  • auto 指定既不強制也不禁止元素內的頁/列中斷。
  • avoid 指定避免元素內的分頁符。
  • avoid-page 指定避免元素內的分頁符。
  • avoid-column 指定避免元素內的列中斷。
  • avoid-region 指定避免元素內的區域中斷。

截取了部分,可自己填充

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* html文件 */
<!-- 使用multi-columns實現瀑布流 -->
< div id = "root" >
     < div class = "item" >
         < img class = "itemImg" src = "../images/1.jpeg" alt = "" />
         < div class = "userInfo" >
             < img class = "avatar" src = "../images/gift.png" alt = "" />
             < span class = "username" >牽起你的左手護着你</ span >
         </ div >
     </ div >
     < div class = "item" >
         < img class = "itemImg" src = "../images/2.jpg" alt = "" />
         < div class = "userInfo" >
             < img class = "avatar" src = "../images/gift.png" alt = "" />
             < span class = "username" >牽起你的左手護着你</ span >
         </ div >
     </ div >
     < div class = "item" >
         < img class = "itemImg" src = "../images/3.jpg" alt = "" />
         < div class = "userInfo" >
             < img class = "avatar" src = "../images/gift.png" alt = "" />
             < span class = "username" >牽起你的左手護着你</ span >
         </ div >
     </ div >
     < div class = "item" >
         < img class = "itemImg" src = "../images/4.jpg" alt = "" />
         < div class = "userInfo" >
             < img class = "avatar" src = "../images/gift.png" alt = "" />
             < span class = "username" >牽起你的左手護着你</ span >
         </ div >
     </ div >
     < div class = "item" >
         < img class = "itemImg" src = "../images/5.jpeg" alt = "" />
         < div class = "userInfo" >
             < img class = "avatar" src = "../images/gift.png" alt = "" />
             < span class = "username" >牽起你的左手護着你</ span >
         </ div >
     </ div >
</ div >
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* css樣式 */
body {
     background : #e5e5e5 ;
}
/* 瀑布流最外層 */
#root {
      margin : 0 auto ;
      width : 1200px ;
      column-count: 5 ;
      column- width : 240px ;
      column-gap: 20px ;
}
/* 每一列圖片包含層 */
.item {
      margin-bottom : 10px ;
      /* 防止多列布局,分頁媒體和多區域上下文中的意外中斷 */
      break-inside: avoid ;
      background : #fff ;
}
.item:hover {
      box-shadow: 2px 2px 2px rgba( 0 , 0 , 0 , . 5 );
}
/* 圖片 */
.itemImg {
      width : 100% ;
      vertical-align : middle ;
}
/* 圖片下的信息包含層 */
.userInfo {
      padding : 5px 10px ;
}
.avatar {
      vertical-align : middle ;
      width : 30px ;
      height : 30px ;
      border-radius: 50% ;
}
.username {
      margin-left : 5px ;
      text-shadow : 2px 2px 2px rgba( 0 , 0 , 0 , . 3 );
}


2.jQuery特效 flex布局實現瀑布流將外層設置為row布局,然后再設置一個容器並設置為column布局,它是將列作為一個整體,然后在對列進行划分,在列里進行寬固定來實現的

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* html文件(只截取兩列布局)*/
< div id = "root" >
     < div class = "itemContainer" >
         < div class = "item" >
             < img class = "itemImg" src = "../images/1.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/2.jpg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/3.jpg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/4.jpg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/5.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/6.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/7.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
     </ div >
     < div class = "itemContainer" >
         < div class = "item" >
             < img class = "itemImg" src = "../images/5.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/7.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/6.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/5.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/6.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
         < div class = "item" >
             < img class = "itemImg" src = "../images/6.jpeg" alt = "" />
             < div class = "userInfo" >
                 < img class = "avatar" src = "../images/gift.png" alt = "" />
                 < span class = "username" >牽起你的左手護着你</ span >
             </ div >
         </ div >
     </ div >
</ div >
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* css文件 */
body{
    background : #e5e5e5 ;
}
#root{
     display : flex;
     flex- direction : row;
     margin : 0 auto ;
     width : 1200px ;
}
.itemContainer{
     margin-right : 10px ;
     flex- direction : column;
     width : 240px ;
}
.item{
    margin-bottom : 10px ;
    background : #fff ;
}
.itemImg{
    width : 100% ;
}
.userInfo {
    padding : 5px 10px ;
}
.avatar {
    vertical-align : middle ;
    width : 30px ;
    height : 30px ;
    border-radius: 50% ;
}
.username {
    margin-left : 5px ;
    text-shadow : 2px 2px 2px rgba( 0 , 0 , 0 , . 3 );
}

實踐后發現,純css實現的瀑布流只能是一列一列的排布,所以還是得用js來實現瀑布流更符合我們常見的瀑布流jQuery插件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM