一、multi-column多列布局实现瀑布流
先简单的讲下multi-column相关的部分属性
column-count
设置列数column-gap
设置列与列之间的间距column-width
设置每列的宽度
还要结合在子容器中设置break-inside防止多列布局,分页媒体和多区域上下文中的意外中断
<style>
/* css样式 */
body {
background: #e5e5e5;
}
/* 瀑布流最外层 */
#root {
margin: 0 auto;
column-count: 5;
column-width: 28%;
column-width: 240px;
column-gap: 20px;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
/*
auto 指定既不强制也不禁止元素内的页/列中断。
avoid 指定避免元素内的分页符。
avoid-page 指定避免元素内的分页符。
avoid-column 指定避免元素内的列中断。
avoid-region 指定避免元素内的区域中断。
column-fill: balance-all;
*/
}
.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);
}
</style>
<!-- div#root>(div.item>img.itemImg[src="./$.jpg"]+div.userInfo>img.avatar[src="./$.jpg"]+span{牵起你的左手护着你})*20 -->
二、flex布局实现瀑布流
将外层设置为row布局,然后再设置一个容器并设置为column布局,它是将列作为一个整体,然后在对列进行划分,在列里进行宽固定来实现的
<style>
#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);
}
</style>
div#root>(div.itemContainer>(div.item>img.itemImg[src=""]+div.userInfo)*10)*5
实践后发现,纯css实现的瀑布流只能是一列一列的排布,所以还是得用js来实现瀑布流更符合我们常见的瀑布流
正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯 ^_^ )