绝对寻址的臭虫(Going Absolutely Buggy)

绝对区块里的绝对区块

Mozilla 1,
IE5/Mac,
Opera 7
IE5.5/Win
IE6/Win
Op6/Win
Op6/mac
Omniweb

跟 Opera 6 有的拼

返回 p.i.e.

范例

这篇是拿绝对寻址(absolute positioning)当题材。div#container(棕色粗框)是用「left」和「top」定位,并有着相等的长宽(80px)。它包含两个绝对区块(黑色和绿色边框)、一个以固定(static) div 表示的内容区域(灰色区块),而且也设定了补白(环绕着灰色区块的淡蓝色部分)。 注意:如果没有修正 div#container 的尺寸,浏览器会表现得很怪异。如果想知道更详细的信息,请参考 绝对寻址的臭虫 II

绿色和黑色边框的区块是分别为 top/left 和 bottom/right 套用「0px」,使它们位于相对的角落。它们也分别包了一个用同样方式定位的小区块。所有的区块都是正方形的,而且都套用了 Tantek 的技巧(针对 IE5.x 区块模块的错误,请参考网页原始档)。

左边是这个范例的屏幕撷取图(screenshot)。

表现

想当然地,这个范例对较早期的浏览器来说很困难。

强大的 Gecko 引擎(Moz, Nav6/7)表现得毫无瑕疵。 IE5/Mac 和 Mozilla 一样有着完美的表现。Opera 7 也能正确显示。

以 IE 的表现来说,IE/Win 算是不错了。但注意到那些被垂直拉长的小区块了吗?这表示 IE 不允许这些绝对区块的「高度(height)」小于「行高(line-height)」。然而这只针对那些大区块或小区块。中等尺寸的区块却很神奇地可以使用「height:0px」。

不过这个臭虫几乎不会影响到页面,而不像 Opera 6 那么严重。

老天!我的背又在痛了!

请注意,在 Opera 6 里黑色和绿色边框区块加总起来所占的尺寸,会正好等于灰色内容区域的大小!看来 Opera 绘制范例的方法是先放置好容器(container),但不设定任何补白或边框,并依此放置被包着的绝对区块。直到最后才把补白跟边框套用在容器区块上,让它们往右下方延伸,却不去动那些被包着的区块。图中的小区块也有一样的状况。

这是个大问题(如果你在乎 Opera 6 的话)。别以为你可以用 div 容器(wrapper)做修正,这个臭虫也会影响 div。

修正

别在这种容器上使用边框或补白。如果你坚持这么做,可以把一个绝对寻址的 div 放在容器的上方或下方,以提供替代的边框或补白。

有个非常令人振奋的消息,Opera 7已经修正了这个问题,并且在绝对寻址上有非常好的表现。请朝着挪威的方向行三鞠躬礼。


原作者:
Big John   联络原作者 ©positioniseverything
最后更新日期: March 2, 2003
Created June 2, 2002

中文翻译:
lincc  
Creative
Commons License