对position的理解
作者:zccst
先看看手册
值 |
描述 |
absolute |
生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
fixed |
生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
relative |
生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 |
static |
默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
inherit |
规定应该从父元素继承 position 属性的值。 |
1,relative
相对自己以前的位置偏移。
设置了top和left后,元素没有脱离文档流,仍然占用原来的位置。
2,absolute
脱离文档流,不再占用原来的位置。
1.首先不要用层叠这个词,容易把关系搞混
2.absolute是受parentNode的position影响的
parentNode的position不是relative,那absolute的绝对对象是针对body的
parentNode的position 是relative,那absolute的绝对对象是针对parentNode的
也就是说absolute的绝对是有参照Node的
3.对于复杂的position关系,要从parentNode的position的设置逐次的推下来
4.relative的node的尺寸会影响parentNode的尺寸,也就是说relative即定位也占位
absolute的node的尺寸不影响parentNode的尺寸,也就是说absolute只定位不占位
5.z-index只对absolute的node有效
几个更深入的问题:
问:如果即设置了left又设置了right,到底以哪个位置呢?
答:以left位置。同理top和bottom,以bottom为准。
例子:
<style type="text/css"> body { margin:0px; font-size: 9pt; line-height:12pt; margin-top: 150px; margin-left: 150px; } .box1 { background-color: #33CCFF; width: 200px; height: 200px; } .box2 { background-color: #CC99FF; height: 100px; width: 100px; position:relative; right:200px;/*此值总被认为是-left=-10px,所以你怎么改它都不会影响到布局*/ left:10px;/*这里设定了两个定位值,但是它们是矛盾的,所以此时将以左边为准,如果是上下类型错误,则以上边定位数值为准*/ } </style> <script type="text/javascript"> </script> </head> <body> <div class="box1"> <div class="box2"></div> </div>
<style type="text/css"> <!-- *{ margin:0px; padding:0px; } body { margin:10px; font-size: 13px; } a:link { color: #666; text-decoration: none;/*去除链接下划线*/ } a:visited { color: #666; text-decoration: none; } a:hover { color: #F90; } h3 { color: #FFF; background-color: #F90; width: 100px; padding-top:3px; text-align:center; } ul { width: 300px; border-top: 1px solid #F60;/*使其上边有一线条,与标题h3吻合*/ } ul li { padding:5px; border-bottom: 1px solid #CCC; list-style:none;/*去除列表样式,这对于标准浏览很重要*/ } a { position: relative;/*设置其定位方法为相对定位,等一下内部信息面板就可以相对它定位*/ display:block;/*让链接以块状呈现,这样不用点中链接文字就可以响应链接*/ } a div { display: none;/*初始化信息面板不显示*/ } a:hover {background:#fff;}/*IE7以下版本A状态伪类bug*/ a:hover div { position: absolute; padding:5px; display:block; width: 245px;/*只给出宽度,高让它随内容多少自动调整*/ left:150px;/*这是相对父级A的定位*/ top: 20px; border: 1px solid rgb(91,185,233); background-color: rgb(228,246,255); z-index:999;/*把信息面板提到一个较高的位置,使链接文字过长时不会与面板重叠,但这只对FF有效*/ } a img { width:80px; height:80px; border:none;/*去除图片边框,默认情况下,链接内的图片在标准浏览器会出现边框*/ display:block; position: absolute;/*用绝对定位抽离正常文本流,不然在设计的时候考虑到不同浏览器正常显示会更麻烦*/ top:5px;/*这里的5px是与信息面板大盒子的填充一样的*/ left:5px; } dl { width: 160px; float:right; color: #999; line-height:20px; } dl dd span { font-weight: bold; color: #639; } --> </style> </head> <body> <h3>最新单曲</h3> <ul> <li><a href="#">01 爱的文身 黄圣依<div><img src="http://imgcache.qq.com/music/photo/singer/54/singerpic_5554_0.jpg" alt="" /> <dl> <dd><span>歌名:</span>爱的文身</dd> <dd><span>歌手:</span>黄圣依</dd> <dd><span>介绍:</span>黄圣依唱片主打歌的确是她个人的内心写照,《爱的文身》由香港音乐大师金培达作曲,制作人陈少琪亲自填词。</dd> </dl></div></a></li> <li><a href="#">02 累了 阿信<div><img src="http://imgcache.qq.com/music/photo/singer/47/singerpic_6547_0.jpg" alt="" /> <dl> <dd><span>歌名:</span>累了</dd> <dd><span>歌手:</span>阿信</dd> <dd><span>介绍:</span>青春校园偶像剧----【熱情仲夏】片尾曲</dd> </dl></div></a></li> <li><a href="#">03 漫漫 慢慢 阿朵<div><img src="http://imgcache.qq.com/music/photo/singer/61/singerpic_6361_0.jpg" alt="" /> <dl> <dd><span>歌名:</span>漫漫 慢慢</dd> <dd><span>歌手:</span>阿朵</dd> <dd><span>介绍:</span>阿朵抢听版最新单曲《漫漫 慢慢》让你认识阿朵柔情的一面,展现阿朵百变的风格。</dd> </dl></div></a></li> <li><a href="#">04 我怀念的 孙燕姿<div><img src="http://imgcache.qq.com/music/photo/singer/9/singerpic_109_0.jpg" alt="" /> <dl> <dd><span>歌名:</span>我怀念的</dd> <dd><span>歌手:</span>孙燕姿</dd> <dd><span>介绍:</span>令人感同身受的抒情歌,在故事性的架构中,有着平凡但又能扣人心弦的情感,是一首高度共鸣的抒情歌。</dd> </dl></div></a></li> <li><a href="#">05 听,花期越来越近 后弦<div><img src="http://imgcache.qq.com/music/photo/singer/33/singerpic_4733_0.jpg" alt="" /> <dl> <dd><span>歌名:</span>花期越来越近</dd> <dd><span>歌手:</span>后弦</dd> <dd><span>介绍:</span>后弦参与《花开的声音》这个舞台剧里的一部分,邀请了后弦去演唱这首歌,此歌就是为舞台剧《花开的声音》而创作。</dd> </dl></div></a></li> </ul>