首页 > 其他分享 >纯 CSS 实现瀑布流式排版

纯 CSS 实现瀑布流式排版

时间:2023-03-21 15:56:54浏览次数:40  
标签:column 布局 流式 瀑布 内容 排版 order CSS

最近写了个页面,想到了用瀑布流实现页面布局。在我看来一个合格的横向瀑布流式布局包含以下几个条件:

  • 1、每个内容块高度可以不等,但宽度相等。
    由于内容的不确定性,内容块的高度应根据内容高度伸缩。高度相等的话就变成了网格布局,规整倒是规整,不仅没有瀑布效果,内容的个性也无从体现。
  • 2、内容块应进行横向排序。
    由于是默认的瀑布流式是纵向布局,用户的浏览顺序自上而下。加载的新内容始终排列在最下方,因此整个布局的高度可以无限延展,而宽度始终固定。这就要求内容在有排序需求时,必须从左到右依次填充页面。
  • 3、内容块列数固定。
    内容块的列数应是可控的,在当前 div 下不会因为容器空间不足造成内容块溢出或缩小。三列的瀑布流,就应该始终是三列。

用 flexbox, :nth-child() 和 order 实现 CSS 瀑布流式布局

用 flexbox 制作瀑布流布局乍看似乎很容易:只要用 flex-flow: column wrap 就能实现。问题在于这个方法实现出的内容块会排序错乱:内容块渲染是由上至下,而用户阅读是由左至右,因此用户看到的内容块顺序可能是1, 3, 6, 2, 4, 7, 8, 5之类的。

在 flexbox 里用 column 布局实现在 row才能达到的排序绝非易事,但加上 :nth-child()order 这两个属性就能做到不依靠 JavaScript ,仅用CSS实现瀑布流式布局。

先上干货总结:假设要渲染三列布局,用 flex-direction: column 实现 row 排序的话,只需要:

html:

<div class="container">
  <div class="item" style="height: 140px"></div>
  <div class="item" style="height: 190px"></div>
  <div class="item" style="height: 170px"></div>
  <div class="item" style="height: 120px"></div>
  <div class="item" style="height: 160px"></div>
  <div class="item" style="height: 180px"></div>
  <div class="item" style="height: 140px"></div>
  <div class="item" style="height: 150px"></div>
  <div class="item" style="height: 170px"></div>
  <div class="item" style="height: 170px"></div>
</div>

css:

/* 让内容按列纵向展示 */
.container {
  display: flex;
  flex-flow: column wrap;
}

/* 重新定义内容块排序优先级,让其横向排序 */
.item:nth-child(3n+1) { order: 1; }
.item:nth-child(3n+2) { order: 2; }
.item:nth-child(3n)   { order: 3; }

/* 强制使内容块分列的隐藏列 */
.container::before,
.container::after {
  content: "";
  flex-basis: 100%;
  width: 0;
  order: 2;
}

 实现效果如下:

缺点:此用法必须要求container,也就是父元素的高度一定,否则就是竖着一排显示

用column属性实现 CSS 瀑布流式布局

.container {
  column-count: auto;
  column-width: 150px;   //单个子元素宽度
}

实现效果如下:

 

 缺点:此用法内容是从上到下展示的

 

 

标签:column,布局,流式,瀑布,内容,排版,order,CSS
From: https://www.cnblogs.com/xiaoxiaomini/p/17240258.html

相关文章

  • CSS02.字体样式
    字体样式1.CSS外观属性1.1color:文本颜色作用:color属性用于定义文本的颜色其取值方式有如下3种:表示属性值预定义的颜色值(预设值:定义好的单词)red、green......
  • CSS 组合选择符
    CSS组合选择符组合选择符说明了两个选择器之间的关系。CSS组合选择符包括各种简单选择符的组合方式。在CSS3中包含了四种组合方式:后代选择器(以空格   ......
  • CSS 高阶小技巧 - 角向渐变的妙用!
    本文将介绍一个角向渐变的一个非常有意思的小技巧!我们尝试使用CSS绘制如下图形:在之前,类似的图案,其实我们有尝试过,在单标签实现复杂的棋盘布局一文中,我们用单标签实......
  • CSS Content 属性的几种妙用和技巧
    Content属性是CSS中一个非常有用的属性,可以用于插入生成内容,如在::before和::after伪元素中添加文本或图标。Content属性的特点:Content属性仅可用于::before......
  • 十五种CSS鼠标样式
    CSS鼠标样式语法如下:任意标签中插入style=”cursor:*”例子:<spanstyle=”cursor:*”>文本或其它页面元素</span><ahref=”#”style=”cursor:*”>文本或其它页面元......
  • 前端三剑客基础入门(html css js)
    首先对他们的在界面中的功用做一个说明HTML来决定界面的结构,CSS保证界面的美化,JS保证界面的效果/动作HTML1.HTML介绍HTML(HyperTextMarkupLanguage):超文本标记语......
  • 记录--两行CSS让页面提升了近7倍渲染性能
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言对于前端人员来讲,最令人头疼的应该就是页面性能了,当用户在访问一个页面时,总是希望它能够快速呈现在......
  • css自定义简约滚动条
    应用场景日常开发中,浏览器默认的滚动条样式通常与我们开发项目风格样式不够统一。我们可以通过自定义滚动条样式实现风格统一。css样式<style>/*滚动条*/......
  • 爬虫:bs4介绍,遍历文档树、bs4搜索文档树、css选择器、selenium基本使用、无界面浏览器
    目录一、bs4介绍,遍历文档树1.1bs4模块介绍1.2bs4的遍历文档树二、bs4搜索文档树1.2find_all(name,attrs,recursive,text,**kwargs)2.2find(name,attrs,r......
  • css实现文本水平&垂直对齐的三种方式
    第一种:使用padding和text-align:center例如:.center{padding:100px0;border:1pxsolidgreen;text-align:center;} 第二种:使用line-heig......