纯css实现简单瀑布流(flex 和 column-count 两种方式)
CSS 实现 简单 方式 两种 Column count flex
2023-09-11 14:22:30 时间
两种实现方式虽然都能实现瀑布流效果,但都有各自的缺点,会有介绍到
方式一:column-count实现
直接复制可预览,可以不做任何修改
这种实现方式的缺点是:图片是先从上到下排列,再从左到右排列的
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
body {
margin: 4px;
font-family: Helvetica;
/* Centering & Limit Width */
margin: auto;
width: 720px;
/*定义一个item-counter初始值为0*/
counter-reset: item-counter 0;
}
.masonry {
column-count: 4;
column-gap: 0;
}
.item {
padding: 2px;
position: relative;
/*使item-counter的值+1*/
counter-increment: item-counter;
}
.item img {
display: block;
width: 100%;
height: auto;
}
.item::after {
position: absolute;
display: block;
top: 2px;
left: 2px;
width: 24px;
height: 24px;
text-align: center;
line-height: 24px;
background-color: #000;
color: #fff;
/*使用item-counter的值*/
content: counter(item-counter);
}
</style>
<body>
<div class="masonry">
<div class="item">
<img src="https://picsum.photos/360/460?random=1">
</div>
<div class="item">
<img src="https://picsum.photos/360/520?random=2">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=3">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=4">
</div>
<div class="item">
<img src="https://picsum.photos/360/480?random=5">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=6">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=7">
</div>
<div class="item">
<img src="https://picsum.photos/360/400?random=8">
</div>
<div class="item">
<img src="https://picsum.photos/360/440?random=9">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=10">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=11">
</div>
<div class="item">
<img src="https://picsum.photos/360/460?random=12">
</div>
<div class="item">
<img src="https://picsum.photos/360/480?random=13">
</div>
<div class="item">
<img src="https://picsum.photos/360/440?random=14">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=15">
</div>
</div>
</body>
</html>
方式二:flex布局+巧用order属性实现
这种方式可以做到先从左到右,再从上到下显示
缺点:需要预先设定flex容器的高度,且调整页面大小时会出现一些间距过大的问题
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
body {
margin: 4px;
font-family: Helvetica;
/* Centering & Limit Width */
margin: auto;
width: 720px;
}
.masonry {
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 1000px;
}
.item {
position: relative;
width: 25%;
padding: 2px;
box-sizing: border-box;
counter-increment: item-counter;
}
.item img {
display: block;
width: 100%;
height: auto;
}
.item::after {
position: absolute;
display: block;
top: 2px;
left: 2px;
width: 24px;
height: 24px;
text-align: center;
line-height: 24px;
background-color: #000;
color: #fff;
content: counter(item-counter);
}
/*巧用order使得排列顺序从左到右,再从上到下*/
.item:nth-child(4n+1) {
order: 1;
}
.item:nth-child(4n+2) {
order: 2;
}
.item:nth-child(4n+3) {
order: 3;
}
.item:nth-child(4n) {
order: 4;
}
</style>
<body>
<div class="masonry">
<div class="item">
<img src="https://picsum.photos/360/460?random=1">
</div>
<div class="item">
<img src="https://picsum.photos/360/520?random=2">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=3">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=4">
</div>
<div class="item">
<img src="https://picsum.photos/360/480?random=5">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=6">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=7">
</div>
<div class="item">
<img src="https://picsum.photos/360/400?random=8">
</div>
<div class="item">
<img src="https://picsum.photos/360/440?random=9">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=10">
</div>
<div class="item">
<img src="https://picsum.photos/360/500?random=11">
</div>
<div class="item">
<img src="https://picsum.photos/360/460?random=12">
</div>
<div class="item">
<img src="https://picsum.photos/360/480?random=13">
</div>
<div class="item">
<img src="https://picsum.photos/360/440?random=14">
</div>
<div class="item">
<img src="https://picsum.photos/360/420?random=15">
</div>
</div>
</body>
</html>
总结:
以上两种方式,如果不考虑复杂的情况, 直接使用是非常简单,便捷的,两种方式都有各自的优缺点,根据实际情况使用吧
相关文章
- [转] 使用babel-plugin-react-css-modules简化CSS Modules的使用
- CSS To SCSS Converter
- How do negative margins in CSS work and why is (margin-top:-5 != margin-bottom:5)?
- 小程序/CSS实现单行与多行文本溢出显示省略号
- Css & JavaScript & jquery 实现选项卡的制作
- 纯 CSS 实现波浪效果!
- 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
- 【Cssflex】css中关于弹性布局flex的综合用法(示例展示)
- 【转】css布局居中和CSS内容居中区别和对应DIV CSS代码
- CSS: 多出文字ellipsis
- CSS 媒体查询
- 【前端学习之HTML&CSS进阶篇】-- CSS第二篇 -- 块级格式化上下文与堆叠上下文
- css多种方式实现等宽布局
- DIV+CSS+PS实现背景图的三层嵌套以及背景图的合并
- 在css中,可以使用white-space属性和word-break属性来设置字符超出宽度就自动换行输出。下面小编举例讲解用DIV+CSS实现字符超出宽度就自动换行输出。
- 《HTML与CSS入门经典(第8版)》——1.9 练习
- vue项目报错——This dependency was not found: * -!../../node_modules/@vue/cli-service/node_modules/css...
- css旋转属性如何理解
- 好玩的CSS---实现打字效果
- Jquery+css实现图片无缝滚动轮播
- 浅析css-loader和style-loader的作用、css-loader和style-loader是如何配合使用的、less-loader和css-loader和style-loader的实现原理
- CSS中英文字符两端对齐实现
- CSS学习知识整理(二)Css 背景
- 在head里的CSS link 竟然粗如今body里了?
- CSS实现完美垂直居中
- CSS 加粗(css font-weight)
- CSS