实现瀑布流布局

309 阅读1分钟

一、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 -->

image.png

二、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

image.png 实践后发现,纯css实现的瀑布流只能是一列一列的排布,所以还是得用js来实现瀑布流更符合我们常见的瀑布流

正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯 ^_^