瀑布流的布局自我感覺還是很吸引人的,最近又看到實現瀑布流這個做法,在這里記錄下,特別的,感覺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插件