盒子模型右外边距margin-right

本文揭示了前端开发中关于子元素margin-right不起作用的现象,通过实例解析了元素位置由7个属性决定的原理,以及'过度约束'的概念,演示了宽度为auto时布局的变化。

在学习前端的过程中发现了一个问题:

在一个父容器中放入一个子容器,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .outer{
            width: 800px;
            height: 200px;
            border: 10px solid red;
        }
        .inner{
            width: 200px;
            height: 200px;
            background-color: aqua;
        }
            
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner">

        </div>
    </div>
</body>
</html>

显示效果是这样的。

在我给这个子容器inner添加margin-right的时候,发现这个属性无论设置多大都不管用。

这时候如果在html中写一点内容

会发现aaa的位置 并不会在inner的右边,而是在下面。

一阵学习了之后才发现,元素在其父容器中水平方向的位置 是由7个元素决定的,分别是:margin-left,border-left,padding-left,width,padding-right,border-right,margin-right。

元素在其父元素中,水平布局必须要满足以下的等式:
margin-left + border-left + padding-left + width + padding-right + border-right + margin-right == 其父元素内容区的宽度。这个等式在浏览器中是必须满足的,如果相加的结果不满足等式,浏览器会自动调整。

在这个例子中,等式为:0+0+0+200+0+0+0 == 800 ,不满足等式,所以浏览器将inner的margin-right设置为了600px,使其满足等式。导致内容aaa的位置在父容器下方。这种现象叫做“过度约束”。

上述现象只在其7个值都不存在auto的情况下,浏览器会自动调整margin-right,如果当有值为auto时,浏览器会自动调整auto的值,使其满足等式,如,将inner的宽度调整为auto:

 

 则其在浏览器中显示情况为:

 在inner中加入margin-right为200px:

显示效果为:

 ok,印证了过度约束的结论。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值