关于绝对居中问题

问题

 什么叫绝对居中?就是说容器到屏幕左右上下四个方向都有间距,并且随屏幕大小缩放相对不变或者等比例调整,始终居屏幕中间。 绝对居中也有两种情况,容器的绝对大小和相对大小。 同时有很多方法可以实现,总结起来大致如下:

  1.利用table特性,在width and height all set 100%的时候,可以把容器嵌套在td内形成绝对居中,此时的被嵌套容器可为绝对或者相对大小。(非标准)注意不能加声明!

 HTML代码<table width="100%" height="100%" border="0"align="center" cellpadding="0" cellspacing="0"><tr><td style="text-align:center;"><table width="200" height="50" border="0" cellpadding="0" cellspacing="0" bgcolor="#ef1122"><tr><td></td></tr></table></td></tr></table>
   2.利用负边距方法,绝对定位使容器相对屏幕绝对居中,此时的被嵌套容器只能为绝对大小。(标准)根据margin负值和top left的比例控制,实现随屏幕绝对居中,容器大小改变需要重新调整margin top left的参数:

 HTML代码<div style="background:#f00; width:740px; height:340px; left:50%; margin:-170px 0 0 -370px; position:absolute; top:50%;"></div>

  3.老外给出的另类方法,巧妙利用display:inline-block;,IE6.0测试通过。(标准)
  注意1.height:100%是关键:2.edge与container没有嵌套关系:
  这应该算是IE的一个bug,个人对display:inline-block理解有限。edge可以看作一个填充,container现在是一个上下居中的对象,加了背景色能看的更清楚,当然你也可以在container内添加任何绝对或者相对大小容器。但问题在于span只是一个内联元素,在内部添加块级元素是不标准的逻辑。

 HTML代码<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<ahref="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"><html xmlns="<a href="http://www.w3.org/1999/xhtml"target="_blank">http://www.w3.org/1999/xhtml</a>"><head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312" /><BR><title>无标题文档</title><style type="text/css"><!--body { margin:0; height:100%;}#edge { width:0; height:100%; display:inline-block;vertical-align:middle;}#container { text-align:center; width:100%;display:inline-block; vertical-align:middle;}--></style></head><body><!-- required for xhtml1.1 validation only --><span id="edge"></span><span id="container"><div style="width:200px; height:50px; background:#f00;line-height:50px;">仅IE6.0环境下实现</div></span></body></html>

  4.CSS行为expression控制实现,不过expression为IE独有,并且耗资源严重,尤其在大量使用的时候。(标准)
注意关键定义,不要以为height:100%在IE内是没用的:
实时获取屏幕高宽值,分别减去容器高宽值再除以2,得到准确坐标绝对定位:

 HTML代码<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<ahref="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"><html xmlns="<a href="http://www.w3.org/1999/xhtml"target="_blank">http://www.w3.org/1999/xhtml</a>"><head><metahttp-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><style type="text/css"><!--html,body { height:100%;}--></style></head><body><div style="background:#f00; position:absolute;left:expression((body.clientWidth-50)/2);top:expression((body.clientHeight-50)/2);width:50px;;height:50px;"></div></body></html>

  5.FF1.5测试通过,绝对定位,边距为比例,此时容器高宽始终为viewport的50%相对大小(标准):
 HTML代码<divstyle="position:absolute; top:0; right:0; bottom:0; left:0; width:50%;height:50%; margin:auto; background:#f00; color:white;line-height:20px; text-align:center;">FF1.5测试通过</div>

  6.FF1.5测试通过,绝对定位,直接定位上下左右,强制边局实现容器相对大小(标准):

  7.ff1.5 IE5 IE6通过测试

 HTML代码<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="//www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>Vertical centering in valid CSS</title><style type="text/css">body {padding: 0; margin: 0; font-size: 75%; line-height: 140%;font-family:Arial, Helvetica, sans-serif;}body,html{height: 100%; }a{color: #333;}a:hover{color: green;}#outer {height: 100%; overflow: hidden; position: relative;width: 100%;background:ivory; }#outer[id] {display: table; position: static;}#middle {position: absolute; top: 50%;text-align:center;} /* forexplorer only*/#middle[id] {display: table-cell; vertical-align: middle; position:static;}#inner {position: relative; top: -50%;width: 600px;margin: 0auto;text-align:left;}/*for explorer only */div.greenBorder {border: 1px solid green; background-color: #FFF;}p{margin: 1em;} </style><script type="text/javascript">// <![CDATA[function toggleContent(name,n) { var i,t='',el =document.getElementById(name); if (!el.origCont) el.origCont =el.innerHTML; for (i=0;i<n;i++) t += el.origCont; el.innerHTML = t;}// ]]></script></head><body><div id="outer"> <div id="middle"> <div id="inner"class="greenBorder"> <p><ahref="javascript:toggleContent('inner',1)">默认长度</a>  <ahref="javascript:toggleContent('inner',2)">加长页面</a></p><p> 1.打开illustrator,新建一个文件,画个矩形,比你要导入的图片大一些,白色填充。 <br />2.选中矩形,菜单:Effect > Distort & Transform > Zig Zag,设置如下图。<br /> 3.菜单:Effect > Stylize > Drop Shadow,设置如下图。 <br/> 1.打开illustrator,新建一个文件,画个矩形,比你要导入的图片大一些,白色填充。 <br />2.选中矩形,菜单:Effect > Distort & Transform > Zig Zag,设置如下图。<br /> 3.菜单:Effect > Stylize > Drop Shadow,设置如下图。</p><address style="text-align:center; padding: .5em; clear: left;">Design by <a href="//www.forest53.com">Forestgan</a>本演示采用<ahref="//www.creativecommons.cn/">创作共用授权</a>--署名和非商业用途。</address> </div> </div></div><script src="//www.google-analytics.com/urchin.js"type="text/javascript"></script><script type="text/javascript">_uacct = "UA-152060-1";urchinTracker();</script><noscript><p>google-analytics</p></noscript><script src="//www.forest53.com/stat/mystat.asp?siteid=1"type="text/javascript"></script><noscript><p>stat.</p></noscript></body></html>

时间: 2024-11-08 19:02:08

关于绝对居中问题的相关文章

div布局-请问怎么让div中的div在垂直方向上居中呢?

问题描述 请问怎么让div中的div在垂直方向上居中呢? 比如:下面这段代码,如何让里面的div在垂直方向上面居中呢(不好意思,实在是没有悬赏币了) .out{ width:500px; height:500px; background:blue;}.inn{ width:200px; height:200px; background:red;} 解决方案 你的inn怎么比out还大..搞反了吧..通过margin来定位.absolute定位最好,不需要考虑父容器,只需要依据自身的宽和高度来调整

js中window.showModalDialog各浏览器居中和传参实例兼以及一些兼容性问题

  浏览器居中以及传参实例 window.showModelDialog可设置center参数为yes,保证其在子窗口在父窗口居中. 但是该参数只对IE浏览器有效,对火狐无效,只有通过计算模态窗口的居中位置.   解决办法 function openShowModalDialog(url,param,whparam,e){    // 传递至子窗口的参数  var paramObj = param || { };    // 模态窗口高度和宽度  var whparamObj = whparam

如何让浮动的子DIV在父DIV上居中(水平方向和垂直方向)

问题描述 如何让浮动的子DIV在父DIV上居中(水平方向和垂直方向) 如题:如何让浮动的子DIV在父DIV上居中(水平方向和垂直方向) 解决方案 父容器relative定位,浮动div absolute定位,left和width 50%,定高和定宽,通过margin-left和margin-top为你的-宽度和-高度的一半来实现水平和垂直进行居中 解决方案二: http://blog.163.com/www.wxs_123/blog/static/82784664201321831746921/

Dreamweaver MX 2004高级技巧(8)制作居中的网页

dreamweaver|高级|技巧|网页 本文介绍两种居中的网页,一种是页面居中,一种是页面上下左右居中. 页面居中的网页 实现方法:设置body标签居中. 1.打开一个网页或新建一个网页,在文档左下角的"标签选择器"上选择"body"标签. 2.在"属性面板"上点击"居中对齐".现在居中的页面就做好了,往里面填充内容就可以了. 转换到代码视图,看看生成的代码,原来生成的是"<div align="c

MathType公式编号怎么居中

  1.选中公式编号,在Word工具栏中选择"格式"--"字体"--"字符间距",将"位置"设置为"标准". 选中编号后将字体中的字符间距设置为标准 2.选择"格式"--"段落"--"中文版式",将"文本对齐方式"设置为居中.这样公式编号就会与公式居中了. 在段落中的中文版式中将文本对齐方式设置为居中 以上内容向大家介绍了设置M

android-Android:把 image 居中的问题

问题描述 Android:把 image 居中的问题 程序中有一个 linear layout 和一个 image: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andr

MathType括号内容怎么居中

  MathType括号内容怎么居中           括号内容不居中示例: 一般来说,如果不对MathType进行任何操作的话,输入完成后MathType会默认居中,但也有可能在未知的某个时候碰到哪个键而导致括号内容不居中了,具体解决方法如下: 1.双击已经编辑好的公式,进入到MathType公式编辑界面. 双击公式进入到MathType编辑窗口 2.双击括号中没有居中的公式就可以选中此部分,鼠标点击MathType菜单中的"格式"--"分隔符对齐". Math

asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看

问题描述 asp.net中td中的两个控件左右并排好了,但是如何上下居中,怎么弄都不得,大神帮看看 /asp:TextBox 如何让这个TextBox控件和ImageButton控件都是并排的上下居中吖,我用了valign="middle" 还是不得,各位大神,帮帮我吧,我弄了一个早上了,明天要交作业了 解决方案 td不够宽导致另外控件换行了吧,td宽度设置大一点能容下2个按钮 解决方案二: 长度是足够长的,会不会是我的TextBox小了?因为我的图片比那个TextBox大,可以再帮我

Js控制弹窗实现在任意分辨率下居中显示

弹窗居中比较烦人的是怎么才能在任意分辨率下实现居中显示,为了解决此问题,本文测试了一下案例在此与大家分享,有类似需求的朋友可以学习下   贴代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="ht

CSS布局奇淫技巧之--各种居中

居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明外,都是兼容IE6+.谷歌.火狐等主流浏览器的. 先来说几种简单的.人畜无害的居中方法 1. 把margin设为auto 具体来说就是把要居中的元素的margin-left和margin-right都设为auto,此方法只能进行水平的居中,且对浮动元素或绝对定位元素无效. 2.使用 text-ali