CSS中的绝对定位(absolute)误区

这几天在慕课上看视频学习,偶然听到几个老师都说:CSS绝对定位在没有其他有除static定位的包含块的情况下是以body进行定位,如果要想相对当前元素的父元素来定位,父元素一定要设置position:relative。注意,前面一句是没有问题的,在没有父元素设置定位的话,默认就是以body来定位的,但是后面一句,要想相对父元素定位,父元素必须设置相对定位(relative),根据我的开发经验和查阅相关资料确认后发现,这是不对的。

正确的理解姿势是:

相对定位:相对于块级元素(或行内块)自身位置进行定位;

绝对定位:绝对定位的盒子是相对于离它最近的一个已定位的盒子进行定位的(默认是body);

注意css描述的绝对定位概念,没有说明是离他最近的一个已相对定位的盒子进行定位的,所以离他最近的盒子的定位可以是相对定位(relative)和绝对定位(absolute)的,但是在开发中,一般是父盒子设置相对定位的,但是不代表只能是相对定位,举个栗子:

HTML:

1 <div class="father">
2   <div class="son"></div>
3 </div>

 

CSS:

 1 .father{
 2       width: 300px;
 3       height: 300px;
 4       background-color: orange;
 5       position: absolute;
 6       top:50%;
 7       left:50%;
 8       margin-top: -150px;
 9       margin-left: -150px;
10     }
11     .son{
12       width: 100px;
13       height: 100px;
14       background-color: pink;
15       position: absolute;
16       left:0;
17       top:0;
18     }

.father元素绝对定位是相对body的,这个没问题,主要看.son元素,他自身设置绝对定位,父元素.father也有绝对定位,你觉得这个子元素会相对body定位还是父元素来定位呢?

结果为:子元素是相对于有绝对定位的父元素来定位的,而不是body;

posted @ 2017-08-10 15:40  全堆栈溢出攻城狮  阅读(14310)  评论(2编辑  收藏  举报