瀑布流布局的两种实现方式:传统多列浮动和绝对定位布局

瀑布流布局常用于图片展示等卡片式布局,实现方式主要有两种:传统多列浮动和绝对定位布局。

传统多列浮动方式

在 HTML 结构中创建多个元素,并为每个元素设置相同的 class,然后使用 CSS 样式进行布局。

HTML 结构示例:

<div class="waterfall">
  <div class="column">
    <img src="image1.jpg">
  </div>
  <div class="column">
    <img src="image2.jpg">
  </div>
  <div class="column">
    <img src="image3.jpg">
  </div>
  <div class="column">
    <img src="image4.jpg">
  </div>
</div>

CSS 样式示例:

.waterfall {
  column-count: 4; // 列数
  column-gap: 10px; // 列间距
}

.column {
  display: inline-block;
  width: 100%; // 或者使用宽度百分比
  margin-bottom: 10px; // 元素间距
}

在上面的示例中,我们使用 column-count 属性指定了列数,使用 column-gap 属性指定了列间距。同时,给每个元素设置了 display: inline-block 属性,让其在一行内显示。

绝对定位布局方式

另一种实现方式是使用绝对定位布局,该方式将所有元素定位在相同的容器内。为了实现瀑布流式布局,我们需要计算每一列的高度,然后将下一个要添加的元素添加到高度最小的一列中。

HTML 结构示例:

<div class="waterfall">
  <div class="card" style="height: 200px;">
    <img src="image1.jpg">
  </div>
  <div class="card" style="height: 280px;">
    <img src="image2.jpg">
  </div>
  <div class="card" style="height: 150px;">
    <img src="image3.jpg">
  </div>
  <div class="card" style="height: 220px;">
    <img src="image4.jpg">
  </div>
</div>

CSS 样式示例:

.waterfall {
  position: relative;
  width: 100%;
}

.card {
  position: absolute;
  width: 25%; // 列宽度
  top: 0;
  left: 0;
  margin: 10px; // 元素间距
  box-sizing: border-box;
}

.card img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

在上面的示例中,我们将容器 .waterfall 设置为相对定位,每个元素 .card 设置为绝对定位,调整其位置和大小,同时给每个元素的图片设置了 object-fit: cover 属性,让图片能够填充容器。

最后,我们需要使用 JS 脚本计算每一列的高度,然后将下一个要添加的元素添加到高度最小的一列中。

示例:

const cards = document.querySelectorAll('.card');
const columns = 4; // 列数
const margin = 10; // 元素间距
const heights = new Array(columns).fill(0);

cards.forEach(card => {
  const minIndex = heights.indexOf(Math.min(...heights)); // 找到高度最小的列
  const top = heights[minIndex];
  const left = (card.offsetWidth + margin) * minIndex;

  card.style.top = `${top}px`;
  card.style.left = `${left}px`;
  heights[minIndex] += card.offsetHeight + margin;
});

上面的 JS 示例中,我们定义了 columnsmargin 变量,分别表示列数和元素间距。然后,我们定义了一个高度数组 heights,初始化为 0。遍历每个元素,找到高度最小的一列,计算元素的上边距和左边距,并设置到元素上。最后,将高度累加到高度数组 heights 中。

通过上述两种方式的介绍,我们可以实现一个瀑布流式的图片墙等卡片式布局,呈现不同的美丽和舒适的交互体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:瀑布流布局的两种实现方式:传统多列浮动和绝对定位布局 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 纯CSS实现可折叠树状菜单

    实现一个可折叠的树状菜单,通常可以用JavaScript来进行实现。但是,我们也可以使用纯CSS来实现一个可折叠的树状菜单。 实现思路 我们可以利用HTML中的checkbox和label标签的关联联动效果,以及CSS中的选择器和属性来实现可折叠的树状菜单。具体步骤如下: 利用HTML的各种标签来构建树状结构,比如使用ul和li标签,其中ul标签表示整个菜单…

    css 2023年6月9日
    00
  • js知识点总结之getComputedStyle的用法

    JS知识点总结之getComputedStyle的用法 介绍 getComputedStyle() 是一个用于获取元素所有计算样式的函数。它的参数是要获取样式信息的元素,返回一个 CSSStyleDeclaration 对象,包含计算出的样式属性的键值对。 语法 getComputedStyle(element, [pseudoElement]) eleme…

    css 2023年6月10日
    00
  • JavaScript实现表格表单的随机选择和简单的随机点名

    接下来我将为大家详细讲解“JavaScript实现表格表单的随机选择和简单的随机点名”的攻略。 一、JavaScript实现表格表单的随机选择 首先,在HTML文件中创建表格及表格中的选项,并为选项设置相同的class。 “`html 选项一 选项二 选项三 选项四 “` 在JavaScript中获取所有选项并存储。 javascript let opt…

    css 2023年6月10日
    00
  • css实现半透明效果基本原理

    首先,CSS的透明度是由CSS3引入的属性,名为opacity。这个属性的取值范围是0~1,其中0表示完全透明,1表示完全不透明。接下来我将为您介绍具体实现步骤。 基本原理 实现半透明效果的基本原理很简单,就是通过设置CSS属性opacity来控制元素的透明度。通常情况下,我们可以通过以下两种方式来实现这个效果: 1. 使用opacity属性 首先,在CSS…

    css 2023年6月11日
    00
  • SPAN和DIV,Class与ID的区别汇总

    让我来给你详细讲解一下 “SPAN和DIV,Class与ID的区别汇总” 的内容。 一、SPAN和DIV的区别 1.1 SPAN标签 <span> 标签是用来对文档中的行内元素进行包装和设置样式的标签。它本身不具有任何意义,但它可以帮助在文档中标识出一些较小的文本片段,比如文本中的某些字符或单词。 下面是一个使用 <span> 标签设…

    css 2023年6月10日
    00
  • XHTML 2.0新功能抢先预览

    XHTML 2.0是一种为Web开发而设计的标记语言,它在原有XHTML 1.0的基础上进行了改进和完善。本篇攻略将为大家介绍XHTML 2.0的新功能以及如何使用这些新功能来制作更加高效的网站。 1. 概述 XHTML 2.0相比之前的版本在许多方面都进行了改进,在结构、标记语义、表单控件和模块化等方面都有所升级。下面将详细介绍XHTML 2.0的各项新功…

    css 2023年6月9日
    00
  • JS 控制CSS样式表

    JS 控制 CSS 样式表的方式主要有两种:通过修改样式属性来修改元素样式,以及通过切换 CSS 类名来切换元素样式。下面分别给出具体的步骤和示例说明。 通过修改样式属性修改元素样式 获取需要修改样式的元素 可以通过 document.getElementById 、 document.getElementsByClassName 、 document.ge…

    css 2023年6月9日
    00
  • 掌握AJAX第4/7页

    要掌握AJAX第4/7页,需要掌握以下几点: 1.掌握HTTP请求和响应的工作原理 了解HTTP协议的请求和响应的基本结构,包含请求方法、请求头部、请求体、响应头部和响应体等组成。可以使用Chrome浏览器的开发者工具网络选项卡对HTTP请求和响应进行实时监控。 2.使用XMLHttpRequest对象发送HTTP请求 XMLHttpRequest对象是AJ…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部