前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每天一个小技巧:纯CSS实现瀑布流(Masonry) HTMLCSS

每天一个小技巧:纯CSS实现瀑布流(Masonry) HTMLCSS

作者头像
MudOnTire
发布于 2020-07-08 02:49:50
发布于 2020-07-08 02:49:50
2.3K00
代码可运行
举报
文章被收录于专栏:MudOnTireMudOnTire
运行总次数:0
代码可运行

瀑布流提供了一种错落有致的美观布局,被各种注重交互品味的素材网站(如:花瓣unsplash)广泛应用。社区也提供了不少瀑布流布局的工具,如:masonrycolcade 等。常规的实现瀑布流的做法是用 JS 动态的计算“砖块”的尺寸和位置,计算量大、性能差。今天给大家介绍一种使用纯 CSS 实现瀑布流的方法,简洁优雅。主要使用到了 CSS 中的多列属性 columns

在使用一个比较陌生的 CSS 属性之前,习惯性的了解一下它的兼容性,去 caniuse.com 瞅一眼:

看着兼容性还不错,那就放心的用吧。

HTML

先构造页面结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="masonry">
  <div class="item">
    <img src="http://source.unsplash.com/random/400x600" />
    <h2>Title Goes Here</h2>
    <p>
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quis quod et
      deleniti nobis quasi ad, adipisci perferendis totam, ducimus incidunt
      dolore aut, quae quaerat architecto quisquam repudiandae amet nostrum
      quidem?
    </p>
  </div>

  ...more...
</div>

div.masonry 容器中可以塞进任意多的 “砖块” div.item,“砖块” 中的图片可以从 unsplash 中随机获取,且可以制定图片的尺寸。

CSS

容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.masonry {
  width: 1440px; // 默认宽度
  margin: 20px auto; // 剧中
  columns: 4; // 默认列数
  column-gap: 30px; // 列间距
}

砖块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.item {
  width: 100%;
  break-inside: avoid;
  margin-bottom: 30px;
}

.item img {
  width: 100%;
}

.item h2 {
  padding: 8px 0;
}

.item P {
  color: #555;
}

上面的样式其他都挺好理解,唯独 break-inside 这个属性比较陌生。让我们看一下去掉 break-inside 之后会有什么问题吧:

可以看到有两个“砖块”的文字跑到上面和图片分开了。所以当设置了 break-inside: avoid 之后可以避免“砖块”内部的内容被断开。

不同屏幕尺寸适配

以上样式默认适配 PC,在其他尺寸设备上需要重新设置列数、列间距等样式,可以通过 media query 进行适配,比如:

ipad pro:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@media screen and (min-width: 1024px) and (max-width: 1439.98px) {
  .masonry {
    width: 96vw;
    columns: 3;
    column-gap: 20px;
  }
}

ipad:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@media screen and (min-width: 768px) and (max-width: 1023.98px) {
  .masonry {
    width: 96vw;
    columns: 2;
    column-gap: 20px;
  }
}

mobile:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@media screen and (max-width: 767.98px) {
  .masonry {
    width: 96vw;
    columns: 1;
  }
}

注意:屏幕尺寸区间不要有交集,也不要有缺口!

好了,大功告成,来张全家福!

本文Demo参考:Codepen Trick by Day (2020-07-06) Pure CSS Masonry

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分享一次纯 css 瀑布流 和 js 瀑布流
现在百度图片,360 图片搜索,都是以一种瀑布流的形式展示,那么接下来,分享一波纯 css 瀑布流 和 js 瀑布流
Krry
2018/11/04
2.5K0
分享一次纯 css 瀑布流  和 js 瀑布流
CSS 3.0实现瀑布流布局
瀑布流布局是网页中常见的布局效果,一般我们都是用JS实现的,其实用CSS 3.0的属性也可以实现这个功能,并且还自带了响应式功能,效果如下 :
越陌度阡
2020/11/26
5400
CSS 3.0实现瀑布流布局
什么?2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?
瀑布流页面布局,故名思义就是页面上的元素子项像瀑布一样进行上下紧凑布局,一般图片类网站、电商类或者博客类的网站经常会使用这种布局,使得展示的元素比较紧凑和丰富, 类似下图
前端蛋卷
2024/07/04
7090
什么?2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?
【说站】css流式布局的介绍
2、通过将盒子的宽度设置为百分比根据屏幕的宽度进行伸缩,不受固定像素的限制,内容向两侧填充。
很酷的站长
2022/11/23
4100
【说站】css流式布局的介绍
5 种瀑布流场景的实现原理解析
我已经将这 5 种场景的实现封装成 npm 包,npm 包地址:https://www.npmjs.com/package/react-masonry-component2,可以直接在 React 项目中安装使用。
winty
2022/11/07
5K0
5 种瀑布流场景的实现原理解析
分享 10 个常见的 CSS 页面布局代码片段
大家好,本篇文章将分享我们业务中很常见的10个页面布局代码片段,这10 种页面布局很常见,实现方式也有很多种,本篇文章将用最简单的新方式进行实现,希望对大家有所启发。
前端达人
2022/03/25
3.6K0
分享 10 个常见的 CSS 页面布局代码片段
瀑布流式布局怎么实现(什么是瀑布流布局)
今天逛闲鱼的时候观察到每一行的高度不是相同的,经了解才知道原来这是一种瀑布流布局,感觉挺有意思,于是决定研究一下,在网上也找了一些方案,实现瀑布流大概有3种方式。
全栈程序员站长
2022/08/02
1.6K0
瀑布流式布局怎么实现(什么是瀑布流布局)
【Web前端】CSS“多列布局”(补充)
CSS多列布局允许我们将内容分成多个垂直列,使页面布局更加灵活和多样化。多列布局的主要属性包括 ​​column-count​​、​​column-width​​ 和 ​​column-gap​​,这些属性可以单独或结合使用,以实现所需的列布局效果。
一条晒干的咸鱼
2024/11/19
2500
【Web前端】CSS“多列布局”(补充)
冷门又好用的 CSS 特性
CSS 提供了对多列布局的支持。支持设置布局中的列数 (column-count)、内容应如何列之间的流动规则、列之间的间距 (column-gap) 以及列分割线(column-rule)的样式。
MudOnTire
2022/03/22
1.5K0
冷门又好用的 CSS 特性
真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!
这个列表显示顺序是 左边 123右边456,不符合正常展示逻辑;然后可以使用js对数据进行预处理; 大致逻辑如下:
刘小夕
2020/07/15
2K0
真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!
瀑布流布局方案
调研: 1、蘑菇街/堆糖/花瓣:absolute 2、手淘:flex,但不算瀑布流,每个card高度一样
杨肆月
2021/01/26
1.4K0
四种方式实现瀑布流
css3的column属性实现 外层容器设置column-count(改变列数)和column-gap(改变间隙),即可实现瀑布流布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>css瀑布流</title> <style>
hss
2022/02/25
1.2K0
CSS3与页面布局学习总结(四)——页面布局大全
张果
2018/01/04
8.2K0
CSS3与页面布局学习总结(四)——页面布局大全
CSS3实现瀑布流布局(display: flex/column-count/display: grid)
在css3到来之前,都是用js来操作dom元素,计算位置,大小,形成瀑布流布局。但是有了css3之后,一切实现起来就太简单了,没有复杂的逻辑,轻松的几行样式代码就可以搞定。
Javanx
2019/09/04
3K0
CSS3实现瀑布流布局(display: flex/column-count/display: grid)
前端必看的8个HTML+CSS技巧
8个前端常用HTML+CSS技巧教程 CSS是一个很独特的语言。看起来非常简单,但是某种特殊效果看似简单,实现起来就颇有难度。这篇文章主要是给在学习前端的童鞋分享一些新的CSS技巧,一些在前端教程和培训课堂中不会讲到的知识。第二就是让还在前端开发这条道路上的童鞋们,重新燃起对前端排版和特效的热爱和热情!1. 固定底部内容 这种是一个非常常见的布局方式,但是对于新手来说是比较常见的难题。 这种布局方式在后台管理系统中比较常见,当我们内容不足浏览器窗口高度时,底部内容需要固定在底部。当内容超出了浏览器窗口高度,
三钻
2020/10/29
1.8K0
前端必看的8个HTML+CSS技巧
8个有用的 CSS 技巧:视差图像,sticky footer 等等
CSS是一种独特的语言。乍一看,这似乎很简单,但是,某些在理论上看起来很简单的效果在实践中往往不那么明显。
前端小智@大迁世界
2019/04/18
1.2K0
Css实现瀑布流布局
我们只需要设置最外层的父级(waterfall)和子级的父元素(poster)的css就可以
明知山
2020/09/03
6390
CSS Layout API初探:瀑布流布局实现
因为这篇文章前戏很长,所以将结果放在了最前面呈现,完整的示例可以前往 https://masonry.daidr.me 查看。
戴兜
2023/02/23
9100
CSS3与页面布局学习总结(四)——页面布局的多种方法
所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%。当一个元素与另一个元素margin取负值时将拉近距离。常见的功能如下:
全栈程序员站长
2022/09/20
2.6K0
CSS3与页面布局学习总结(四)——页面布局的多种方法
详解瀑布流布局的5种实现及oject-fit属性,附源码
最近项目中需要处理与图片相关的布局,不得不说图片这玩意真想要得到完美的展示效果还真是要费些力气。因为图片的尺寸或者比例各不相同。所以想要不同尺寸的图片有好的显示效果,你就需要找到适合的方式。
六小登登
2019/08/01
1.5K0
推荐阅读
相关推荐
分享一次纯 css 瀑布流 和 js 瀑布流
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验