Absolutely Buggy II - Absolute boxes inside relative boxes

The set-up: 你想在正常流下获得一个静态包含块,在里面放一个绝对定位元素。我们知道这个元素将根据离它最近的已定位祖先来计算它的位置,因此,包含块设置为 "position:relative" 来保证它在流中,就是为绝对定位元素提供一个 positioned holder 。

The demo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css"">
body {
    font-family: verdana,sans-serif;
    font-size: 80%;
}
div#container1 {
	background-color: #FFFF88;
	border: 6px solid #009900;
	margin: 5px 7%;
	position: relative;
}
div.upperleft, div.upperright, div.lowerleft, div.lowerright {
	height: 30px;
    position: absolute;
    width: 30px;
}
div.upperleft {
	border: 6px solid #FF0000;
    left: 0;
    top: 0;
}
div.upperright {
	border: 6px solid #FF0000;
    right: 0;
    top: 0;
}
div.lowerleft {
	border: 6px solid #0000FF;
    bottom: 0;
    left: 0;
}
div.lowerright {
	border: 6px solid #0000FF;
    bottom: 0;
    right: 0;
}
.boxtext {
	font-family: 'times new roman',serif;
    font-size: 1.2em;
    margin: 0;
    padding: 5px 9%;
}
pre {
	color: #880000;
    margin: 1em 0 20px 15%;
}
</style>
</head>

<body>
<div id="container1">
	<div class="upperleft"></div>
	<div class="upperright"></div>
	<div class="lowerleft"></div>
	<div class="lowerright"></div>
	<p class="boxtext">
	This box (".container1", green border) has been given 'position: relative', making it a
	positioned container for the
	absolute boxes. (red and blue borders) It is dimensioned horizontally by margins and
	vertically by content. It does <em>not have</em> 'width' and 'height'.
	The corner boxes are given 'position: absolute',
	and placed in the corners by using the value '0' on 'top', 'bottom', 'left', and 'right', as needed
	for each element. Example:
	</p>
	<pre>div.lowerleft {
	   left: 0;
	   bottom: 0;
	   border: 6px solid #00f;
	}
	</pre>
</div>
</body>
</html>


Fixes:  当给包含容器设置任何宽度或高度就可以消除IE/Win的bug。注意,设置宽度同时可以修复在小盒子跟绿色边框的 right/bottm之间的 1px rounding error gaps (at some screen sizes)  。See a similar  Mozilla bug .

Update July 2, 2008: width/height fix 实际上是给IE中的盒子提供了 "hasLayout" ,但是现在有一个更好的方式来处理它。 better way

IE/Mac bug需要设置一个高度给 relative container ,否则当在它下面摆放其他盒子时,它会认为 container 的高度是 0px 。

你可能注意到在容器的边框和 corner boxes 之间有 1px gaps 。这是  1px Rounding Error ,你会在一些情况下,在任何浏览器中都发现这个问题。


原文地址:

http://www.positioniseverything.net/abs_relbugs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值