来源:http://www.cnblogs.com/damonlan/archive/2012/04/28/2473525.html

作者:浪迹天涯

很多时候,我们需要在浏览器中让一个div居中进行显示,而不会受到滚动条的影响,那怎么才能得到效果?其实,很简单,你需要理解下面这段就可以了。

最前端开人郁闷的就是浏览器的兼容性问题,所以在下面的代码中通过各浏览器的特有属性,来进行判断浏览器的类型。

比如说,self.pageYOffset 如果它为true的话,那么它说明在IE9中起作用,也说明了这个属性在IE9中是独一无二的。

直接看代码:

<script type='text/javascript'>
function myPopupRelocate() {
var scrolledX, scrolledY;
if (self.pageYOffset) {//IE9 起作用
scrolledX = self.pageXOffset;
scrolledY = self.pageYOffset;
alert("self.pageYOffset");
} else if (document.documentElement && document.documentElement.scrollTop) {// IE 6 ,360浏览器等起作用
scrolledX = document.documentElement.scrollLeft;
scrolledY = document.documentElement.scrollTop;
alert("document.documentElement && document.documentElement.scrollTop");
} else if (document.body) {//Chrome... IE9 Firfox....IE 5.5起作用
scrolledX = document.body.scrollLeft;
scrolledY = document.body.scrollTop;
alert("document.body");
}
//以上是浏览器滚动的距离
// alert("scrolledX:" + scrolledX);
// alert("scrolledY:" + scrolledY); var centerX, centerY;
if (self.innerHeight) {
centerX = self.innerWidth;
centerY = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
centerX = document.documentElement.clientWidth;
centerY = document.documentElement.clientHeight; } else if (document.body) {
centerX = document.body.clientWidth;
centerY = document.body.clientHeight;
} alert("centerX:" + centerX);
alert("centerY:" + centerY); var leftOffset = scrolledX + (centerX - 250) / 2;
var topOffset = scrolledY + (centerY - 200) / 2;
document.getElementById("mypopup").style.top = topOffset + "px";
document.getElementById("mypopup").style.left = leftOffset + "px";
}
function fireMyPopup() {
myPopupRelocate();
document.getElementById("mypopup").style.display = "block";
// document.body.onscroll = myPopupRelocate;
// window.onscroll = myPopupRelocate;
}
</script>

HTML Code:

<div id='mypopup' name='mypopup' style='position: absolute; width: 250px; height: 200px;
display: none; background: #ddd; border: 1px solid #000; z-index: 100'>
<p>
我现在的位置是居中状态<br>
</p>
<input type='submit' value=' 关闭窗口! (2) ' onclick='document.getElementById("mypopup").style.display="none"'>
</div>
<input type='submit' value=' Fire! (2) ' onclick='fireMyPopup()'>

这就能得到在各个浏览器中绝对居中了。当然还有其他的方法,比如说 用css,也OK。

特殊情况:

如果,你不需要居中肿么办呢?很简单啊,你需要改的仅仅是下面这句话:

var leftOffset = scrolledX + (centerX - 250) / 2;
var topOffset = scrolledY + (centerY - 200) / 2;

比如说,你现在把当前的div放到top 100px,left 100px,就需要下面操作:

var leftOffset = scrolledX + 100;
var topOffset = scrolledY + 100;

作者:Lanny☆兰东才
出处:http://www.cnblogs.com/damonlan
Q Q:*********
E_mail:Damon_lan@163.com or Dongcai.lan@hp.com

本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。

DIV的绝对居中的更多相关文章

  1. CSS实现DIV水平自适应居中

    DIV水平自适应居中 <!DOCTYPE html> <html lang="cn"> <head> <meta charset=&quo ...

  2. 如何让div上下左右都居中

    在做登陆页面的话,需要login的div 上下左右都居中. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...

  3. 常用布局,div竖直居中

    常用两列布局,多列布局和div竖直居中 body { margin:; padding:; } .w200 { width: 200px; } .mar-left200 { margin-left: ...

  4. div元素上下左右居中

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. div设置了居中和宽度,但是显示时宽度占100%

    <div id="bigDiv" align="center"> <div id="bottom" style=" ...

  6. 如何让图片在div里左右居中,上下居中

    如何让图片在div里左右居中,上下居中 转载▼   1.要想让图片左右对齐,我们可以在div里写入"style:text-align:center;"代码来实现. 2.要想使图片居 ...

  7. div内容上下居中

    今天无聊闲逛技术群,听一哥们说要在div里面居中span内容. 第一印象:vertical-align: middle; 结果失效.因为他只对属于inline的元素或是inline-block.tab ...

  8. 使用 margin 让div块内容居中

    问:有一个div块,其width为300px,如何设置margin让div块居中显示? 答:margin设置为 margin:0 auto,即div块的上下外边距设置为 0 , 左右外边距设置为 自动 ...

  9. [转]div里table居中的问题 Div与body顶部间隙

    本文转自:http://www.cnblogs.com/jinhui/archive/2008/09/24/1297729.html 将div的text-align设为center,然后将table的 ...

随机推荐

  1. PHP文件系统处理(二)

    1.文件的打开和关闭(读文件中的内容,向文件中写内容)            读取文件中的内容                file_get_contents()     //php5以上 < ...

  2. ERP员工入职登记(五)

    在数据库中添加链接的地址:

  3. 游戏buff设计参见

    其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时候,它就滚一边去了. 废话不多说切入正题: 游戏中的BUFF/DEBUFF我们见过很多, ...

  4. What Controls are new for windows phone 8.1

    http://www.jayway.com/2014/04/08/windows-phone-8-1-for-developerswhat-controls-are-new-2/ What contr ...

  5. LeetCode Sum Root to Leaf Numbers(DFS)

    题意: 给一棵二叉树,每个节点上有一个数字,范围是0-9,将从根到叶子的所有数字作为一个串,求所有串的和. 思路: 普通常规的DFS. /** * Definition for a binary tr ...

  6. day10_面向对象第五天

    1.包(掌握) 1.概念(掌握)       包就是文件夹,用于区分相同的类名 2.声明格式      package 包名1.包名2-.;      package:是个关键字3.带包的类的编译和运 ...

  7. The Hidden Pitfalls of AsyncTask

    http://logc.at/2011/11/08/the-hidden-pitfalls-of-asynctask/

  8. dede取子栏目时重复显示同级栏目的终极解决方法

    使用channelartlist标签时,当栏目没有子栏目是,会出现重复同级栏目的问题,解决方法如下: 先看下面的代码{dede:channelartlist typeid='2'}  {dede:ty ...

  9. Codeforces Round #277 (Div. 2) A B C 水 模拟 贪心

    A. Calculating Function time limit per test 1 second memory limit per test 256 megabytes input stand ...

  10. clipToBounds

    最近在开发H5平台的iOS移动侧,遇到些问题,随手记录下来. 1 UIView的clipToBounds 窗口裁剪,默认是NO,表示如果父窗口的大小已经不足以显示子窗口,也不进行裁剪,而是显示,但这时 ...