margin-top:50%,子元素为什么不相对父元素下移?

margin-top:50%,子元素为什么不相对父元素下移?

<!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;

   }


   .son{

     width: 100px;

     height: 100px;

     background: blue;

     margin-left:50%;

     margin-top:50%;

     position:relative;

     left:-50px;

     /* top:-50px;  */

   }

  </style>

</head>

<body>

  <div class="per">

    <div class="son"></div>

  </div>

</body>

</html>


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

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

3回答
好帮手慕糖 2018-06-20 18:00:25

你好,margin的值,有以下四种情况,其中百分比时,是参考父级元素的宽度来计算的。

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

祝学习愉快~

提问者 慕无忌3039281 2017-12-14 19:41:16

为什么给子元素设置了margin-left可以生效呢?

  • css hack问题:父元素与子元素之间的margin-top问题,只是针对margin-top,其他没有问题。
    2017-12-14 22:35:09
怎么都被占用了呢 2017-12-14 16:20:30

css中对于盒模型规定了:所有毗邻的两个或更多盒元素的margin将会合并为一个margin共享之。毗邻的定义为:同级或者嵌套的盒元素,并且它们之间没有非空内容、padding或border分隔。

嵌套也属于毗邻,所以子元素的margin是会影响父元素的,但是子元素的margin-top:50%,是相对与父元素的宽度来进行计算的。比父元素自己定义的margin-top值要小,所以子元素和父元素的top值都显示为200px;但其实子元素的top值是150px哦。

如果不想子元素影响父元素,可以给父元素添加一个属性overflow:hidden

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

  • 这个盒子的规定课程里没有啊, 非常感谢你的解释,这个问题困扰了我很久
    2018-06-20 09:40:15
  • 为什么“子元素的margin-top:50%,是相对与父元素的宽度来进行计算的。”而不是相对父元素的高度计算,这也是规定吗?
    2018-06-20 09:43:06
  • 你好,是的哦,margin-top的属性值如果是百分比的话,是相对于父级来计算的,建议:可以动手测试下,看下效果哦。 祝学习愉快~
    2018-06-20 09:57:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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