两层容器的position 之间的关系

在HTML的CSS种,容器如DIV有三种position属性:static, relative,absolute。其中static为默认属性,relative意为相对父容器定位,absolute意为相对可定位的上层容器进行定位,这个上层容器不一定是父容器,若找不到可定位的上层容器,则会以document.body进行定位。

若容器套容器,它们之间如何相互作用?见下面的实验。

1、两级DIV定位实验

<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>position test[relative + absolute模式]</title>
<style>
.div2 {
	position:absolute;right:50%;top:0%;
	border:solid 1px #0000ff;
 }
 
.div4 {
	position:relative;right:50%;top:0%;
	border:solid 1px #0000ff;
 } 
 
.div6 {
	position:relative;right:50%;top:0%;
	border:solid 1px #0000ff;
 }  
 
.div8 {
	position:absolute;right:50%;top:0%;
	border:solid 1px #0000ff;
 }  
 
.div10 {
	position:absolute;right:50%;top:0%;
	border:solid 1px #0000ff;
 }  
 
.div12 {
	position:relative;right:60;top:0%;
	border:solid 1px #0000ff;
 }    
</style>
</head>

<body>
<p>
	<h1>position test</h1>
</p>
<div id="div" style="width:400;height:300;border:1px solid #ff0000;position:relative;">
1、外:relative,内:absolute,内DIV宽度等于文字宽度<br>
外:relative,内:absolute<br>
外:relative,内:absolute<br>
外:relative,内:absolute<br>
	<div class="div2" id="div2"> TEST IS OK!</div>
</div>

<div id="div3" style="width:400;height:300;border:1px solid #ff0000;position:relative;">
2、外:relative,内:relative,<br>
内DIV宽度等于父容器宽度<br>
	<div class="div4" id="div4"> TEST IS OK!</div>
</div>

<div id="div5" style="width:400;height:300;border:1px solid #ff0000;">
3、外:static,内:relative,<br>
内DIV宽度等于父容器宽度<br>
内DIV宽度等于父容器宽度<br>
	<div class="div6" id="div6"> TEST IS OK!</div>
</div>


<div id="div7" style="width:400;height:300;border:1px solid #ff0000;">
4、外:static,内:absolute,<br>
内DIV宽度等于文字宽度<br>
百分比以窗口大小为坐标<br>
	<div class="div8" id="div8"> TEST IS OK!</div>
</div>

<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555
<br>555555555555555555555555555555555555555555555555555555

<div id="div9" style="width:400;height:300;border:1px solid #ff0000;position:absolute;">
5、外:abslolute,内:absolute,<br>
内DIV宽度等于文字宽度<br>
百分比以父容器大小为坐标<br>
外DIV浮动<br>
	<div class="div10" id="div10"> TEST IS OK!</div>
</div>
<br>
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666
<br>6666666666666666666666666666666666666666666666666666666

<div id="div11" style="width:400;height:300;border:1px solid #ff0000;position:absolute;">
6、外:absolute,内:relative,<br>
内DIV宽度等于父容器宽度<br>
百分比以窗口大小为坐标<br>
外DIV浮动<br>
	<div class="div12" id="div12"> TEST IS OK!</div>
</div>



<p>关系表</p>

<p><font face="宋体">↑</font></p>
<script lang="javascript">
	//var x =(document.body.offsetWidth - document.getElementById('div2').offsetWidth)/2;
	//document.getElementById('div2').style.left = x;
</script>
<table border="1" width="57%" style="border-collapse: collapse">
	<tr>
		<td width="4%"> </td>
		<td width="12%" align="center"><font size="2">外</font></td>
		<td width="15%" align="center"><font size="2">内</font></td>
		<td width="16%" align="center"><span lang="zh-cn"><font size="2">内DIV宽度</font></span></td>
		<td width="145" align="center"><font size="2">百分比坐标</font></td>
	</tr>
	<tr>
		<td width="4%" align="center">1</td>
		<td width="12%"><font size="2">relative</font></td>
		<td width="15%"><font size="2">absolute</font></td>
		<td width="16%"><font size="2">文字宽度</font></td>
		<td width="145"><font size="2">父容器</font></td>
	</tr>
	<tr>
		<td width="4%" height="22" align="center">2</td>
		<td width="12%" height="22"><font size="2">relative</font></td>
		<td width="15%" height="22"><font size="2">relative</font></td>
		<td height="22" width="16%"><font size="2">父容器宽度</font></td>
		<td height="22" width="145"><font size="2">父容器</font></td>
	</tr>
	<tr>
		<td width="4%" align="center">3</td>
		<td width="12%"><font size="2">static</font></td>
		<td width="15%"><font size="2">relative</font></td>
		<td width="16%"><font size="2">父容器宽度</font></td>
		<td width="145"><font size="2">父容器</font></td>
	</tr>
	<tr>
		<td width="4%" align="center">4</td>
		<td width="12%"><font size="2">static</font></td>
		<td width="15%"><font size="2">absolute</font></td>
		<td width="16%"><font size="2">文字宽度</font></td>
		<td width="145"><font size="2">浏览器窗口</font></td>
	</tr>
	<tr>
		<td width="4%" align="center">5</td>
		<td width="12%"><font size="2">absolute</font></td>
		<td width="15%"><font size="2">absolute</font></td>
		<td width="16%"><font size="2">文字宽度</font></td>
		<td width="145"><font size="2">父容器</font></td>
	</tr>
	<tr>
		<td width="4%" align="center">6</td>
		<td width="12%"><font size="2">absolute</font></td>
		<td width="15%"><font size="2">relative</font></td>
		<td width="16%"><font size="2">父容器宽度</font></td>
		<td width="145"><font size="2">父容器</font></td>
	</tr>
	<tr>
		<td width="4%"> </td>
		<td width="12%"> </td>
		<td width="15%"> </td>
		<td width="16%"> </td>
		<td width="145"> </td>
	</tr>
	<tr>
		<td width="4%"> </td>
		<td colspan="4"><font size="2">结论:1、容器内子组件的宽度和定位属性在relative</font><span lang="zh-cn"><font size="2">下与父容器无关;</font></span><p>
		<font size="2">子组件position为absolute<span lang="zh-cn">时定位在父容器的</span>absolute<span lang="zh-cn">和</span>relative<span lang="zh-cn">下表现相同</span>,</font></p>
		<p><span lang="zh-cn"><font size="2">文字宽度属性与父容器无关。</font></span></p>
		<p><span lang="zh-cn"><font size="2">2、子组件为</font></span><font size="2">absolute</font><span lang="zh-cn"><font size="2">时,默认宽度均为文字宽度;子组件为relative时,默认宽度均为父容器宽度</font></span></td>
	</tr>
</table>
</body>

</html>


注:运行效果因网站代码的加工处理,不能直接在此完整体现,请将代码拷贝至浏览器中运行。

2、关系表

 内DIV宽度百分比坐标
1relativeabsolute文字宽度父容器
2relativerelative父容器宽度父容器
3staticrelative父容器宽度父容器
4staticabsolute文字宽度浏览器窗口
5absoluteabsolute文字宽度父容器
6absoluterelative父容器宽度父容器
     
 结论:1、容器内子组件的宽度和定位属性在relative下与父容器无关;

子组件position为absolute时定位在父容器的absoluterelative下表现相同,

文字宽度属性与父容器无关。

2、子组件为absolute时,默认宽度均为文字宽度;子组件为relative时,默认宽度均为父容器宽度


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
divposition属性详细讲解 1.流动模型 (块元素,内联元素) 2.浮动模型 (float:) 块状元素这么霸道都是独占一行,如果现在我们想让两个块状元素并排显示,怎么办呢?不要着急,设置元素浮动就可以实现这一愿望。 3.层模型--绝对定位 如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。 如下面代码可以实现div元素相对于浏览器窗口向右移动100px,向下移动50px。 div{ width:200px; height:200px; border:2px red solid; position:absolute; left:100px; top:50px; } 效果如下: 层模型--相对定位 如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位),它通过left、right、top、bottom属性确定元素在正常文档流中的偏移位置。相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。 如下代码实现相对于以前位置向下移动50px,向右移动100px; #div1{ width:200px; height:200px; border:2px red solid; position:relative; left:100px; top:50px; } 效果图: 层模型--固定定位 fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化,除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,这与background-attachment:fixed;属性功能相同。以下代码可以实现相对于浏览器视图向右移动100px,向下移动50px。并且拖动滚动条时位置固定不变。 效果见代码::: relative样式 #div1{ width:300px; height:200px; border:2px red italic; position:fixed; bottom:0; right:0; 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。 Relative与Absolute组合使用 小伙伴们学习了12-6小节的绝对定位的方法:使用position:absolute可以实现被设置元素相对于浏览器(body)设置定位以后,大家有没有想过可不可以相对于其它元素进行定位呢?答案是肯定的,当然可以。使用position:relative来帮忙,但是必须遵守下面规范: 1、参照定位的元素必须是相对定位元素的前辈元素: 相对参照元素进行定位 从上面代码可以看出box1是box2的父元素(父元素当然也是前辈元素了)。 2、参照定位的元素必须加入position:relative; #box1{ width:200px; height:200px; position:relative; } 3、定位元素加入position:absolute,便可以使用top、bottom、left、right来进行偏移定位了。 #box2{ position:absolute; top:20px; left:30px; } 这样box2就可以相对于父元素box1定位了(这里注意参照物就可以不是浏览器了,而可以自由设置了)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值