瀑布流的布局自我感觉还是很吸引人的,最近又看到实现瀑布流这个做法,在这里记录下,特别的,感觉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插件