DIV的绝对居中
来源: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
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App