HTML利用九宫格原理进行网页布局


Posted in HTML / CSS onMarch 13, 2020

前言

说到九宫格是不是想到了九宫格火锅那(O(∩_∩)O哈哈~)。其实九宫格布局在各大网站基本都有应用,当然这里的九宫格是泛指(O(∩_∩)O哈哈)。比如小米商城局部布局如下:

HTML利用九宫格原理进行网页布局
 

不难发现,一些电商平台的布局基本上大同小异,最普遍的还是这种九宫格布局。当然通过CSS也可以对其单独设置定位,但是数据量小还好说,如果数据量多起来,计算麻烦不说,还有可能影响布局。下面我们来说一下九宫格布局的原理。

原理(小白也能看懂)

HTML利用九宫格原理进行网页布局
 

上图是一个九宫格示意图,现在我们把它想象到一个网页中(想象不到就看上图图片~~),在网页中这个布局由最外层绿色的大的div标签包裹,在绿色的div标签中有许多蓝色的小的div标签作为绿色div标签的子级元素组成,这样简单的嵌套就完成了。由于我们的目标元素是蓝色的小div,那么我们无可避免的要对其设置盒子大小,以及外边距等等。但是我们操作的对象就是盒子的大小+外边距(也就是上图中红色框选的区域)。
 

具体流程如下:

我们先获取到蓝盒子以及其周围整体的大小,假设上图红框的大小是200px * 200px

这些盒子就要牵扯到绝对定位和相对定位:绿色的盒子是相对定位,里面的蓝盒子是绝对定位(即子绝父相)如果不明白那么请访问CSS定位子绝父相

我们想象把上面的九宫格放进 [3][3] 的二维数组中。此时第一个方框位于数组的 [0] [0] 位置,他的位置在绿色的div中就是(0×200px,0×200px),即top = 0px,left = 0px;其右面方框在二维数组的位置是 [0][1](0×200px,1×200px)即top = 0px;,left = 200px;其下面方框在二维数组的位置是 [1][0](1×200px,0×200px)即top = 200px,left = 0px。以此类推就可以都得到所有子级元素的位置了。

代码实现

先看效果截图
 

HTML利用九宫格原理进行网页布局
 

在我点击上方按钮时可以实现不同列数的展现。
以下是JS代码

 

window.onload = function () {
//    实现九宫格
    var btns  = $('.btnall button');//获取所有的按钮
    var photos = $('.photoall div.photo');//获取所有的子块
    //实现九宫格具体带参方法,allcols代表想要的列数。
    function Event(allcols){
        //盒子的宽长和外边距
        var w = 250, h = 390, margin = 10;
        for(var i = 0; i < photos.length; i++){
        	//方法的核心
            var row = parseInt(i / allcols);
            var col = parseInt(i % allcols);
            //具体位置的运行
            var top = row * (h + margin) + 'px';
            var left = col * (w + margin) + 'px';
            //设置位置
            photos[i].style.position = 'absolute';
            photos[i].style.left = left;
            photos[i].style.top = top;
        }
    }
    //为各个按钮设置监听事件
    btns[0].onclick = function (){
      	Event(3);
    };
    btns[1].onclick = function (){
        Event(4);
    };
    btns[2].onclick = function (){
        Event(5);
    };
}

到此这篇关于HTML利用九宫格原理进行网页布局的文章就介绍到这了,更多相关HTML九宫格布局内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
一款利用html5和css3实现的3D立方体旋转效果教程
Apr 26 HTML / CSS
纯CSS实现设置半个字符的样式
Jul 03 HTML / CSS
css3中新增的样式使用示例附效果图
Aug 19 HTML / CSS
纯CSS3发光分享按钮的实现教程
Sep 06 HTML / CSS
css3实现的多级渐变下拉菜单导航效果代码
Aug 31 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
Jan 20 HTML / CSS
CSS3制作酷炫的条纹背景
Nov 09 HTML / CSS
如何使用localstorage代替cookie实现跨域共享数据问题
Apr 18 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
Jul 07 HTML / CSS
HTML5 canvas 瀑布流文字效果的示例代码
Jan 31 HTML / CSS
HTML5的postMessage的使用手册
Dec 19 HTML / CSS
web前端之css水平居中代码解析
May 20 HTML / CSS
html5默认气泡修改的代码详解
Mar 13 #HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
Mar 10 #HTML / CSS
HTML5表单验证特性(知识点小结)
Mar 10 #HTML / CSS
html5 datalist 选中option选项后的触发事件
Mar 05 #HTML / CSS
关于解决iframe标签嵌套问题的解决方法
Mar 04 #HTML / CSS
Html5 video标签视频的最佳实践
Feb 26 #HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
Feb 25 #HTML / CSS
You might like
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
python英语单词测试小程序代码实例
2019/09/09 Python
python 读取数据库并绘图的实例
2019/12/03 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
揠苗助长教学反思
2014/02/04 职场文书
趣味比赛活动方案
2014/02/15 职场文书
社区交通安全实施方案
2014/03/22 职场文书
降消项目实施方案
2014/03/30 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android