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

yizhihongxing

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

传统多列浮动方式

在 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日

相关文章

  • 深入探索VueJS Scoped CSS 实现原理

    下面是深入探索VueJS Scoped CSS实现原理的攻略: 前言 在Vue.js中,我们通过<style>标签来声明组件的样式,但是为了避免样式的污染(即样式影响到了其他组件),Vue.js提供了Scoped CSS(作用域CSS)的支持。 Scoped CSS是指将组件的样式限制在组件内部,不影响其他组件的样式,并且保证组件内部的样式可以覆…

    css 2023年6月9日
    00
  • 纯CSS如何禁止用户复制网页的内容

    下面是详细讲解纯CSS如何禁止用户复制网页内容的攻略: 1. 使用::-moz-selection和::selection属性 可以使用CSS的伪元素::-moz-selection和::selection设置用户选中文本后的颜色等属性,同时把文本的可见性设置为透明。这样可以阻止用户通过鼠标或键盘等方式选择和复制文本。 /* 禁止用户选择和复制网页文本 */…

    css 2023年6月10日
    00
  • UL里的LI元素左浮动层一行显示时使其居中的方法

    首先,需要注意到UL元素是有默认的内边距(padding)和外边距(margin)的,因此需要先将它们设置为0,以便更好地控制LI元素的位置和样式。 然后,我们可以使用CSS的flexbox布局来实现居中。具体操作步骤如下: 给UL元素设置display:flex属性,将其转化为flex容器。 设置justify-content属性为center,将其中的元…

    css 2023年6月10日
    00
  • BootStrap入门教程(三)之响应式原理

    下面我会详细讲解“BootStrap入门教程(三)之响应式原理”的完整攻略。 1. 引言 在现代 web 开发中,响应式布局已经成为必备技能。因此,学习 Bootstrap 框架的响应式原理,对我们深入了解前端开发是很有帮助的。 2. Bootstrap 响应式原理 Bootstrap 的响应式原理是基于 CSS 媒体查询的。它通过为不同的屏幕宽度设置不同的…

    css 2023年6月10日
    00
  • Vuejs第七篇之Vuejs过渡动画案例全面解析

    下面将会详细讲解“Vuejs第七篇之Vuejs过渡动画案例全面解析”的完整攻略。 1. 概述 本篇文章主要介绍Vuejs中过渡动画的实现方法,涵盖了transition、transition-group、自定义过滤器等实现过渡动画的方式,并通过两个案例分别介绍了使用transition和transition-group实现动画的具体实例。 2. 实现过渡动画…

    css 2023年6月11日
    00
  • CSS样式不起作用(史上最全解决方法汇总)

    CSS样式不起作用(史上最全解决方法汇总) 一、 检查代码书写规范 CSS代码书写规范非常重要,如果书写格式有误就会导致样式不起作用。在书写CSS代码时,需要注意以下几点: CSS样式名称与属性之间需要加上冒号(:)。 CSS属性名称和属性值之间需要加上分号(;)。 CSS属性值中的颜色值需要加上’#’或者’rgb’等颜色标识符。 示例: /* 错误的代码书…

    css 2023年6月9日
    00
  • Vue-cli@3.0 插件系统简析

    Vue-cli@3.0 插件系统简析 在Vue-cli@3.0之后,Vue-cli的插件系统得到了很大的改进。通过Vue-cli的插件系统,我们可以扩展Vue-cli的能力,定制自己的项目需求。 插件注册 要注册一个Vue-cli的插件,我们需要做以下几个步骤: 创建一个npm包,其中必须包含一个名为generator的文件夹。该文件夹中,必须有一个gene…

    css 2023年6月9日
    00
  • SEO HTML 标签权重列表小结

    让我来为您详细讲解“SEO HTML 标签权重列表小结”的完整攻略。 SEO HTML标签权重列表小结 什么是HTML标签权重? HTML标签权重是指在网站页面中,不同HTML标签对搜索引擎优化(SEO)的影响力大小,权重可以从1-10不等,数字越大影响越大。 HTML标签权重列表 下面是一张HTML标签权重的列表,用来帮助开发者更好的了解HTML标签的优化…

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