通过JavaScript使Div居中并随网页大小改变而改变


Posted in Javascript onJune 24, 2013

在使用Java做后台的时候,都会做到登录的页面,但是自己的页面太难看了,要居中没居中,要颜色没颜色,但是无论是怎么样都得使登录的框居中吧!以前的想法是通过CSS+Div使div居中,但是现在的想法变了,通过JavaScript可以简单的使Div在页面上居中,随着网页大小的改变做出相应的改变。而且只要明白了居中的原理轻而易举的就可以实现了。
先看一下居中的原理吧!
先看一张图。
通过JavaScript使Div居中并随网页大小改变而改变 
从图中看到了什么?可以看到红色的框居中了,为什么会居中呢?通过观察可以发现红框的上下的蓝色的间距线是一样长的,这样可以确保了垂直居中,红框的左右的绿色间距线也是一样长的,这样可以确保了水平居中。
但是怎么使上下的间距相等呢?左右的间距相等呢?
在看一张图:
通过JavaScript使Div居中并随网页大小改变而改变 
假设当前网页的高为350px,宽为400px,而红框的高为150px,宽为200px,我们可以发现网页的高减去红框元素的高得到200px像素,而这200px像素正是上下边距的总和,上下边距各得到了100px,同理,左右也是一样的。
有没有感觉到什么?
如果我们知道了网页元素的高或宽,减去元素的高或宽,然后在除以2,就得到了上下左右边距的距离。我们通常给元素的定位是怎么定的呢?不都是通过top和left的坐标定的吗?那么现在红框的坐标是什么呢?
再看一张图:
通过JavaScript使Div居中并随网页大小改变而改变 
红色框的坐标是蓝色的上线100px,和绿色的左线100px,即left和top的值,这两个值不是算出来的吗?
可以总结一个公式:
居中的元素的top =(网页高 ?元素的高)/ 2;
居中的元素的left= (网页宽 ?元素的宽) /2;
转化为JavaScript的语法为:
top = (document.body.clientHeight - element.offsetHeight)/2;
left = (document.body.clientWidth - element.offsetWidth)/2
获取到top和left的坐标不就居中了。
以下是居中的完整代码:
这里要注意几个问题,要设置元素的position的属性为absolute,即绝对定位,然后添加两个事件onload和onresize,要加上px的字符串,offsetHeight是获取元素自身的高,offsetWidth是获取元素自身的宽,这就是当网页加载时和改变大小时div都会居中。不过这种做法是居中的元素和网页的居中,如果想要一个元素在另一个元素的内部居中的话,原理是一样的。我们只需要将网页的宽和高的代码改为另一个元素的宽和高的代码就行了。另一个元素的宽和高可以通过获取到当前元素的parent元素的高和宽。这样也是可以居中的。如果用jquery这个框架,那么代码就更简单了。
转载请指明出处。

Javascript 相关文章推荐
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
js中escape对应的C#解码函数 UrlDecode
Dec 16 Javascript
关于JavaScript与HTML的交互事件
Apr 12 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
Jun 19 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
基于JavaScript实现简单的轮播图
Mar 03 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 #Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 #Javascript
解析js如何获取当前url中的参数值并复制给input
Jun 23 #Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 #Javascript
JS localStorage实现本地缓存的方法
Jun 22 #Javascript
js获取某月的最后一天日期的简单实例
Jun 22 #Javascript
js遍历、动态的添加数据的小例子
Jun 22 #Javascript
You might like
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
javascript测试题练习代码
2012/10/10 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
Python入门教程之运算符与控制流
2016/08/17 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
使用TensorFlow实现SVM
2018/09/06 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python标准库os库的函数介绍
2020/02/12 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
酒店人事专员岗位职责
2013/12/19 职场文书
大型车展策划方案
2014/02/01 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
社会实践活动报告
2015/02/05 职场文书
应收账款管理制度
2015/08/06 职场文书
《小小的船》教学反思
2016/02/18 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python