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 相关文章推荐
详解CSS3 用border写 空心三角箭头 (两种写法)
Sep 29 HTML / CSS
css3之UI元素状态伪类选择器实例演示
Aug 11 HTML / CSS
IE下实现类似CSS3 text-shadow文字阴影的几种方法
May 11 HTML / CSS
纯CSS3实现鼠标悬停提示气泡效果
Feb 28 HTML / CSS
会走动的图形html5时钟示例
Apr 27 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
Jan 09 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
Feb 25 HTML / CSS
使用Html5 Stream开发实时监控系统
Jun 02 HTML / CSS
Html5饼图绘制实现统计图的方法
Aug 05 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
Aug 10 HTML / CSS
如何在CSS中绘制曲线图形及展示动画
May 24 HTML / CSS
如何利用 CSS Overview 面板重构优化你的网站
Oct 24 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP仿盗链代码
2012/06/03 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
Python的另外几种语言实现
2015/01/29 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
python实现多线程端口扫描
2019/08/31 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
浅析Python __name__ 是什么
2020/07/07 Python
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
初中学生期末评语
2014/04/24 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
先进员工事迹材料
2014/12/20 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
七年级作文之秋游
2019/10/21 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
vue中data里面的数据相互使用方式
2022/06/05 Vue.js
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技