CSS中同时使用left、right产生的效果问题?

在一段样式代码中同时使用了left、right、top、bottom,但产生的效果比较费解,这是代码:

<!DOCTYPE html>
<html>
<head>
  <title>document</title>
  <style>
      .container{
          width:100px;
          height:100px;
          position:relative;
      }
      .inner-box{
          background:#000;
          left:0;
          top:0;
          bottom:0;
          right:50%;
          position:absolute;
      }
  </style>
</head>
<body>
    <div class="container">
        <div class="inner-box"></div>
    </div>
</body>
</html>

inner-box并没有定义宽度,但运行结果却产生了宽度(黑色部分):
图片描述

我发现这是由于代码中同时用了left、right、top、bottom造成的,请问为什么会这样呢?怎么正确理解它?

阅读 8.7k
3 个回答

绝对定位的元素有这么一个计算公式。
以水平方向为例子。

left+margin+border+padding+width+right = 包含块的width(border-box的话是content-width)

left是0,margin默认是0,padding默认是0,right是50%,width默认是auto,所以最后算出来width是50%
可用来做垂直水平居中。

position:absolute;
left:0;
top:0;
bottom:0;
right:0;
width:200px;
height:200px;
margin:auto;

根据上面的公式,margin自动计算,所以margin-top=margin-bottom均分剩余空间,就会居中。

标准在这

你的inner-box是一个绝对定位元素,top等值分别指div各边到父元素(已定位)的各边的定位值

例如说当只有top:0; bottom:0;时

inner-box虽然没有宽高,但为了满足贴着上面,也要贴着下面,就不得不拉伸,相当于设置了一个height:100%

那么如果又来个left:0;right:0;呢 同上,也会拉伸,相当于设置了一个width:100%;

ok,那么回到源代码,此时left:0;right:50%;这样的话 相当于设置了width:50%;
问题,也就迎刃而解咯~

因为你的letf设置为0 ,而right设置为50% 绝对定位自动拉升了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题