HTML+CSS+JS实现图片的瀑布流布局的示例代码
瀑布流布局是一种网页布局方式,其特点是多列布局,每列的高度不固定,内容块会自动填充到上一行最短的一列中,就像瀑布一样。这种布局形式常用于图片展示、商品列表等场景,可以展示更多内容,提升用户体验。
<div class="container">
<div class="item"></div>
<div class="item"></div>
</div>
container
是所有 item 的父元素,用于设置整体布局。item
是单个内容块,可以是图片、文字等。
.container {
column-count: 3; /* 设置列数 */
column-gap: 20px; /* 设置列间距 */
}
.item {
width: 200px; /* 设置每个item的宽度 */
/* 其他样式,如背景色、边框等 */
}
column-count
属性定义了列数。column-gap
属性定义了列之间的间距。
const items = document.querySelectorAll('.item');
// 获取每列的高度,初始值为0
const columnHeights = new Array(3).fill(0);
// 遍历每个item,将其添加到最短的一列
items.forEach(item => {
const minHeightIndex = columnHeights.indexOf(Math.min(...columnHeights));
item.style.top = columnHeights[minHeightIndex] + 'px';
columnHeights[minHeightIndex] += item.offsetHeight;
});
querySelectorAll
获取所有具有 item
类的元素。
<!DOCTYPE html>
<html>
<head>
<title>瀑布流布局</title>
<style>
/* ... CSS样式 ... */
</style>
</head>
<body>
<div class="container">
<div class="item" style="height: 200px;"></div>
</div>
<script>
// ... JavaScript代码 ...
</script>
</body>
</html>
column-count
和 column-gap
属性的兼容性不是很好,可能需要添加前缀或使用polyfill。通过 CSS 的 column-count
和 column-gap
属性,以及 JavaScript 的计算,可以实现基本的瀑布流布局。对于更复杂的场景,可以结合其他技术进行优化。
更多优化和扩展可以参考以下资源:
如果你想实现更复杂的瀑布流效果,可以进一步研究以下方面:
希望这个示例能帮助你实现 HTML5 瀑布流布局!