Grid 移动端双列瀑布流(移动端瀑布流布局)
zhezhongyun 2025-06-24 18:13 69 浏览
预览图:
原理
合理使用 Grid 的属性:
- display:设置为grid指明当前容器为Grid布局
- grid-template-columns: 定义每一列的列宽(百分比或绝对单位)
- grid-template-rows: 定义每一行的行高(百分比或绝对单位)
- grid-auto-rows:用来设置多余网格的行高 【瀑布流行数不确定时】
- column-gap:用于设置列间距
- grid-row-start:上边框所在的水平网格线
- grid-row-end:下边框所在的水平网格线
- grid-column-start:左边框所在的垂直网格线
- grid-column-end:右边框所在的垂直网格线
做一个简单的网格布局,其实不是那么复杂!
预览图:
具体的源码可以访问另一篇文章:Grid 实现九宫格布局 - 今日头条
那么什么是网格线呢?
划分网格的线,称为网格线。水平网格线划分出行,垂直网格线划分出列。正常情况下,n行有n + 1根水平网格线,m列有m + 1根垂直网格线,比如三行就有四根水平网格线。
比如一个 3 x 3 的网格,共有4根水平网格线和4根垂直网格线(如上面的九宫格布局)。
如何操控这些网格线呢?
这时候就要说上面那四个属性了,它们可以接收:
- auto:表示自动放置
- 自定义名称:可以给予网格线一个名称,并在此处引用
- 网格线索引: 代表第几条网格线(从1开始)
- span + 数字: 表示上下边框或左右边框跨越多少网格
简单用伪 CSS 代码举例:
.item{
height:100%;
}
.item:first-child{
grid-row-start:1;
grid-row-end:span 2;
}有了这些基础,就能看下面完整代码了!
完整代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>瀑布流布局</title>
<style>
* {
margin: 0;
padding: 0;
}
:root {
--container-w: 295px;
--container-h: 500px;
}
.container {
overflow-y: auto;
position: absolute;
top: 49%;
left: 50%;
display: grid;
width: var(--container-w);
height: var(--container-h);
grid-template-columns: 1fr 1fr;
grid-auto-rows: 10px;
column-gap: 4px;
padding: 1px 2px;
box-sizing: border-box;
transform: translate(-50%, -50%);
background-color: #252525;
border-radius: 1px;
}
.container::-webkit-scrollbar {
width: 1px;
}
.container .item {
overflow: hidden;
height: 208px;
border-radius: 1px;
grid-row-start: auto;
}
.container .item img,
.container .item .title {
color: #fff;
width: 100%;
}
.container .item .title {
overflow: hidden;
cursor: default;
padding: 3px 8px;
font-size: 14px;
/* text-indent: 2em; */
box-sizing: border-box;
/* 多行显示 */
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
svg {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<svg t="1692973028452" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="4924" width="700" height="650">
<path
d="M657.4 6.6H369.6c-69.7 0-130 32.1-130 106.4v784.5c0 69.7 55.8 123.7 130 123.7h287.9c74.3 0 129.9-60.4 129.9-134.6V106.7c0-69.6-55.7-100.1-130-100.1z m-135 16.5c4.8 0 8.8 4 8.8 8.8 0 4.8-4 8.8-8.8 8.8-4.9 0-8.8-4-8.8-8.8 0-4.9 4-8.8 8.8-8.8z m-44.8 47.2c0-5.1 4.2-9.3 9.3-9.3h75.7c5.1 0 9.3 4.2 9.3 9.3v0.7c0 5.1-4.2 9.3-9.3 9.3h-75.7c-5.1 0-9.3-4.2-9.3-9.3v-0.7zM449 62.1c4.9 0 8.8 4 8.8 8.8 0 4.9-3.9 8.8-8.8 8.8s-8.8-4-8.8-8.8c0-4.9 4-8.8 8.8-8.8z m64.6 926.1c-24.1 0-43.6-19.6-43.6-43.6 0-24.1 19.6-43.6 43.6-43.6 24.1 0 43.6 19.6 43.6 43.6 0.1 23.9-19.5 43.6-43.6 43.6z m229-129c0 7-5.8 12.8-12.9 12.8H297.5c-7.1 0-12.9-5.8-12.9-12.9v-734c0-7.1 5.8-12.9 12.9-12.9h432.2c7.1 0 12.9 5.8 12.9 12.9v734.1z"
fill="#727171" p-id="4925"></path>
</svg>
<div class="container"></div>
<script>
const data = [
{
title: "MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。",
img: "https://s1.ax1x.com/2023/07/12/pCfbg0A.png"
},
{
title: "Spring 框架是一个开源 Java 平台,它为非常容易和非常快速地开发健壮的 Java 应用程序提供全面的基础架构支持。 Spring 框架最初由 Rod Johnson 编写,于 2003 年 6 月在 Apache 2.0 许可下首次发布。本教程基于 2015 年 3 月发布的 Spring Framework 4.1.6 版本编写。",
img: "https://www.w3schools.cn/spring/images/spring.jpg"
},
{
title: "JavaScript 是 Web 的编程语言。所有现代的 HTML 页面都可以使用 JavaScript。JavaScript 非常容易学。本教程将教你学习从初级到高级 JavaScript 知识。",
img: "https://s1.ax1x.com/2023/06/20/pC8UDRf.png"
},
{
title: "Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。",
img: "https://s1.ax1x.com/2023/06/22/pCJ3oEq.png"
},
{
title: "小程序的主要开发语言是 JavaScript ,小程序的开发同普通的网页开发相比有很大的相似性。对于前端开发者而言,从网页开发迁移到小程序的开发成本并不高,但是二者还是有些许区别的。",
img: "https://s1.ax1x.com/2023/06/29/pC0A6k6.png"
},
{
title: "简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。",
img: "https://s1.ax1x.com/2023/06/20/pC83wcj.png"
},
{
title: "NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。",
img: "https://s1.ax1x.com/2023/06/20/pC8GJfS.png"
},
{
title: "React是一个自由及开放源代码的前端JavaScript工具库, 用于基于UI组件构建用户界面。 它由Meta和由个人开发者和公司组成的社群维护。 React可用作开发具有Next.js等框架的单页、手机或服务器渲染应用程序的基础。然而,React只专注状态管理和将状态渲染DOM,因此创建React应用程序通常需要使用额外的工具库来进行路由实现,以及某些客户端功能。",
img: "https://s1.ax1x.com/2023/06/20/pC8kAgS.png"
},
{
title: "Oracle Java 是广受欢迎的编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今,Java 仍是企业和开发人员的首选开发平台,全球有数百万开发人员运行超过 60 亿台 Java 虚拟机。",
img: "https://tse4-mm.cn.bing.net/th/id/OIP-C.mhadmzLMh4cZzx_r39FfiQHaD2?w=302&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7"
},
{
title: "RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。",
img: "https://tse2-mm.cn.bing.net/th/id/OIP-C.A_E5Ucxpc_-_N241EmD9_wHaEK?w=262&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7"
},
{
title: "Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。传统的spring项目中需要用到大量的xml配置,以及复杂的bean依赖关系,随着spring3.0的发布spring团队开始大量使用约定大于配置的思想来简化配置。",
img: "https://tse1-mm.cn.bing.net/th/id/OIP-C.ght-TirNgv05z-Ene0JlZgHaEK?w=282&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7"
},
]
data.push(...data)
</script>
<script>
const container = document.querySelector(".container")
const item_bottom_box_text_h = 100
for (let i = 0; i < data.length; i++) {
let item = document.createElement("div")
item.className = "item"
let img = document.createElement("img")
img.src = data[i].img
let titleP = document.createElement("p")
titleP.className = "title"
titleP.innerText = data[i].title
titleP.title = data[i].title
img.onload = () => {
let image = new Image()
image.src = data[i].img
let w = image.width
let h = image.height
// 求出真实渲染在页面上图片高度
let img_h = Math.floor(h * img.width / w)
// 求出 item 盒子高度 = img_h + 文字盒子高度[100px]
let item_h = img_h + item_bottom_box_text_h
item.style.gridRowEnd = `span ${Math.floor(item_h / 10)}`
}
item.appendChild(img)
item.appendChild(titleP)
container.appendChild(item)
}
</script>
</body>
</html>相关推荐
- Python入门学习记录之一:变量_python怎么用变量
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- python变量命名规则——来自小白的总结
-
python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...
- Python入门学习教程:第 2 章 变量与数据类型
-
2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...
- 绘制学术论文中的“三线表”具体指导
-
在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...
- Python基础语法知识--变量和数据类型
-
学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...
- 一文搞懂 Python 中的所有标点符号
-
反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...
- Python变量类型和运算符_python中变量的含义
-
别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...
- 从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序
-
在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...
- Python中下划线 ‘_’ 的用法,你知道几种
-
Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...
- 解锁Shell编程:变量_shell $变量
-
引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...
- 一文学会Python的变量命名规则!_python的变量命名有哪些要求
-
目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...
- 更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for
-
src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...
- C++第五课:变量的命名规则_c++中变量的命名规则
-
变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....
- Rust编程-核心篇-不安全编程_rust安全性
-
Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...
- 探秘 Python 内存管理:背后的神奇机制
-
在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- opacity 属性 (32)
- transition 属性 (33)
- 1-1. 变量声明 (31)
