流式布局-原子风格

一个有趣的流式布局

具体参考poki game的官网设计,看到的第一眼,就感觉到与游戏图标如此般配
并且自适应,于是就仿写吧,看了一下其逻辑,采用grid布局实现,但又估量了一下自己的grid水平,还是老老实实用js吧!
在这里插入图片描述

布局分析

  • 父盒子与子盒子都与原子有一定比例关系,父盒子的宽度由可容纳原子决定
  • grid 布局有填充的效果,但是你需要控制子元素的宽度和高度,面对大量的子元素需要借助js进行逻辑处理,然后向盒子中填充子元素
  • 也可以通过绝对定位实现,控制每一个子元素的宽高以及定位,其排布逻辑实现后也可以借助grid进行布局

JS 实现

效果图在这里插入图片描述

原理

父盒子

将父盒子数组化,其每一块区域都代表着数组中相应的一个值

子盒子
子盒子的合集为目标数组

目标数组在父盒子数组中值的体现 【1,2,3,1】

122333
122333
000333
000000

1代表盒子占据1块区域
2代表盒子占据22 即4块区域
3代表盒子占据3
3即9块区域

2占据4块,故其周围和本身应该存在4个2,3占据9块,同上

如果每行剩余的宽度不能容纳对应的目标值,则遍历后方数组,选出适合值并与之交换
如果没有适合值,那就跳过这一区域
例如【1,3,3】

133300
033300
033300
333000
333000
333000

子盒子的排布顺序:自上而下,自左至右

  • 从每一行遍历,自左至右得出目标区域以及往后的连续区域(最多两个)是否都为空,连续空的数量表示可容纳的最大子盒子
  • 一行遍历完成则进行下一行的遍历,寻找空值,并从目标数组中寻值进行填充,如果没有适合,那就进行下一行的遍历

Dom渲染
从上方逻辑填充的父盒子数组需要改进后才能作为渲染数组

  • 每一块区域仅允许有一个代表值,即占满9块的3号盒子,在数组中的表示应该是一个3和8个0组成,
  • 【1,3,2】的展示
130020
000000
000000
  • 0代表跳过,3代表应该渲染3号盒子,由于是绝对定位,其距离左方距离由其横坐标确定,纵坐标由其纵坐标确定
  • 目标数组中应提供尽量多的1号盒子,以便填充空隙

代码 - git 地址

https://github.com/dong-tifi/fluid-layout

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值