分类
标签
.NET 9008 adb android apt asp.net ASP.NET Core audio bug C c++ C++ chrome cmd csharp CSharp css css3 debian debug dotnet dotnet Framework dpkg GDI&GDI+ gdi&gdi+ golang graphics html html5 http java javascript json kali linux linux mci microsoft minimap MSBuild mysql OpenCV PInvoke powershell python QQ rust shell speex sql tutorial ubuntu ui unity vb.net visual studio Visual Studio web Web win32 winapi windows winform WinForm wpf WPF xaml xfce 列表 刷机 前端 加密 反射 反编译 可视化 图像处理 多线程 字符串 安卓 实例 局域网 幻影坦克 库 开发语言 异步 微信 手册 手机 接口 摘要 救砖 数字签名 数字证书 数字音频 数据库 桌面程序 游戏 游戏引擎 源码 爬虫 玩游戏 电脑硬件 笔记 算法 类库 线性代数 编程语言 网络 脚本语言 计算机图形学 计算机基础 设计模式 语音编解码 运维 进制 面向对象编程 音频 音频编码解码
378 字
2 分钟
[Web] 简单瀑布流布局实现
目前的纯 CSS 布局, 是没办法实现比较完美的瀑布流布局的.
我使用 JS + CSS, 并且自动布局实现了较为简单, 观赏性好的瀑布流布局.
代码
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<button onclick="add_new()">add</button>
<button onclick="start_loop()">start loop</button>
<button onclick="stop_loop()">stop loop</button>
<!--瀑布流容器-->
<div id="masonry">
<!--瀑布流列-->
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
<div class="masonry-column-container">
<div class="masonry-column"></div>
</div>
</div>
<script>
// 包装一个简单的随机数
function random(start, end) {
return Math.random() * (end - start) + start;
}
// 在瀑布流中添加一个元素
function add_new() {
let masonry = document.getElementById("masonry");
let columns = masonry.querySelectorAll(".masonry-column");
let minHeightColumn = columns[0];
// 拿到高度最低的列
columns.forEach(ele => {
if (ele.scrollHeight < minHeightColumn.scrollHeight) {
minHeightColumn = ele;
}
});
// 创建一个新元素 (设置高度, 背景颜色)
let new_item = document.createElement('div');
new_item.classList.add('item');
new_item.style.height = `${Math.random() * 200 + 70}px`;
new_item.style.backgroundColor = `rgb(${random(0, 255)},${random(0, 255)},${random(0, 255)})`
// 在高度最低的列中添加元素
minHeightColumn.appendChild(new_item);
}
var masonry_loop;
function start_loop() {
masonry_loop = setInterval(add_new, 50);
}
function stop_loop() {
clearInterval(masonry_loop);
}
</script>
</body>
</html>
CSS:
/* 瀑布流容器 */
#masonry {
margin: 0 auto;
width: 80vw; /* 居中 */
display: grid; /* 网格布局 */
grid-template-columns: repeat(7, 1fr); /* 总共 7 列 */
gap: 10px; /* 间距 10px */
}
/* 指定列是相对位置 (其中的元素可以相对列来定位) */
#masonry .masonry-column {
position: relative;
}
/* 限制内容的宽度占满列, 加上边距, 圆角 */
#masonry .item {
width: 100%;
margin-top: 10px;
border-radius: 1em;
}
在 CodePen 上查看: Simple Masonry
[Web] 简单瀑布流布局实现
https://slimenull.com/posts/20230214094547/