来源: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大力力 [033节] 随便看看:PHP程序员学习C++

    php大力力 [033节] 随便看看:PHP程序员学习C++ 2014 兄弟连高洛峰 PHP教程14.1.7 在PHP脚本中操作MySQL数据库4 观看 - 56.com http://www.med ...

  2. Logger日志打印普通方法

    using System; using System.IO; using System.Text; namespace Core { public class LogHelper { private ...

  3. nno_setup制作升级包必须面临的几个问题 2

    这两天的时间一直在制作应用程序的升级包,期间碰到一些问题这里一并记录下来,相信这是制作升级包必须面临和解决的问题: 1. 升级包安装程序如何不再产生新的安装.卸载程序 Inno_setup中AppId ...

  4. Team Foundation API - 编程访问 WorkItem

    Team Foundation Server (TFS)工具的亮点之一是管理日常工作项, 工作项如Bug, Task,Task Case等. 使用TFS API编程访问TFS服务器中的工作项, 步骤如 ...

  5. php求文件的相对路径

    php转义字符的应用,\为转义字符需要转义为\\. <?php //求b相对a的路径 $a="d:\web\file\ab.php"; $b="d:\web\fil ...

  6. Python 如何跳出多重循环

    Python 如何跳出多重循环 抛异常 return

  7. <area> 标签

    定义和用法 <area> 标签定义图像映射中的区域(注:图像映射指得是带有可点击区域的图像). area 元素总是嵌套在 <map> 标签中. 注释:<img> 标 ...

  8. 分布式消息队列kafka系列介绍 — 核心API介绍及实例

    原文地址:http://www.inter12.org/archives/834 一 PRODUCER的API 1.Producer的创建,依赖于ProducerConfig public Produ ...

  9. UVa 10810 - Ultra-QuickSort

    题目大意:给出一个数列,每次交换相邻数字,求排成递增序的最少交换次数. 分析:求逆序数,合并排序 #include<cstdio>#include<cstring>#inclu ...

  10. 第二部分:python 常用操作与函数

    2.1,交换两数据>> a,b = b,a 2.2,去掉list中的重复元素>> list1 = [1,2,3,2,3,2,5,6]>> list1 = list( ...