将父元素的定位方式从绝对改为相对,红色正方形微调

将父元素的定位方式从绝对改为相对,红色正方形微调

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    /*完善下列代码*/
    .per{
     width: 300px;
     height: 300px;
     background: red;
     margin-left:200px;
     margin-top: 200px;
     position:relative;
   }

   .son{
     width: 100px;
     height: 100px;
     background: blue;
     position:absolute;
     top:100px;
     left:100px;

   }
  </style>
</head>
<body>
  <div class="per">
    <div class="son"></div>
  </div>
</body>
</html>

如上代码,将per的position属性由relative改为absolute后,红色正方形会微微向下移动,请问是什么原因?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿满 2020-09-16 18:49:59

同学你好,将绝对定位和相对定位的效果截图做比较,如:

http://img1.sycdn.imooc.com//climg/5f61eaa409cc0cfc05180425.jpg

http://img1.sycdn.imooc.com//climg/5f61eab609a429c304620400.jpg

可以发现绝对定位时,有8px的margin-top和margin-left。

这是因为绝对定位时,是相对于元素最近的已定位的祖先元素(即是设置了绝对定位或者相对定位的祖先元素)。如果元素没有已定位的祖先元素,那么它的位置则是相对于最初的包含块(body)。

这里红色方框per外没有定位元素,所以per是相对于body进行定位的,而body有默认的8px外边距,造成绝对定位时,有8px的margin-top和margin-left。如果给body设置了margin:0;,则相对定位和绝对定位效果一致。

祝:学习愉快~

  • 这里的实线黑色边框部分不是per吗,怎么是红色边框呢

    http://img1.sycdn.imooc.com//climg/604ed20f098b5b8a05180286.jpg

    2021-03-15 11:18:45
  • 同学你好,不太明白同学的问题。per的背景设置为红色,并且没有设置边框,图中所示的红色框是截图时增加的,提示重点关注区域。

    如果同学有什么问题,可以新开一个问答,详细描述一下。

    祝学习愉快~

    2021-03-15 14:33:51
好帮手慕阿园 2020-09-16 18:37:39

同学你好,因为相对定位会相对于自己以前的位置定位;而绝对定位是相对于其最接近的一个具有定位属性的父级元素进行绝对定位,如果不存在就逐级向上排查,直到相对于body元素,即相对于浏览器窗口

而浏览器自带了8px的边距,所以这里当修改为绝对定位时,红色正方形会向下偏移8px的距离

想要解决这个问题,可以将边距设置为0,如下

http://img1.sycdn.imooc.com//climg/5f61ead509d20a5003990161.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师