position定位的基准问题

一 咱们先来看下W3C上的定义:

1 position 属性把元素放置到一个静态的、相对的、绝对的、或固定的位置中。注意:static和relative仍然占据标准流的位置。
static 默认。位置设置为 static 的元素,它始终会处于页面流给予的位置(static 元素会忽略任何 top、bottom、left 或 right 声明)。
relative 位置被设置为 relative 的元素,可将其移至相对于其正常位置的地方,因此 “left:20” 会将元素移至元素正常位置左边 20 个像素的位置。
absolute 位置设置为 absolute 的元素,可定位于相对于包含它的元素的指定坐标。此元素的位置可通过 “left”、”top”、”right” 以及 “bottom” 属性来规定。
fixed 位置被设置为 fixed 的元素,可定位于相对于浏览器窗口的指定坐标。此元素的位置可通过 “left”、”top”、”right” 以及”bottom” 属性来规定。不论窗口滚动与否,元素都会留在那个位置。工作于 IE7(strict 模式)。

二 重点来看absolute :

1 当父元素设置了除static定位之外的定位的时候,(也就是说父元素可以是absolute relative ),子元素相对于父元素定位,可是相对于父元素哪里定位呢?这个时候,基准是父元素的内容区(也即是content(width+height)+padding区域,不包括border和margin。
2 当父元素没有设置定位的时候,子元素相对于body进行定位。
3 子元素定位的边界是包括子元素的 整体 = margin + border + padding + content ;的margin外边界为基准进行定位。

三 代码解析:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>position</title>
    <style type="text/css">
    .one{
        width: 980px;
        height: 300px;
        margin: 0 auto;
        background-color: pink;
    }
    .two {
        height: 200px;
        width: 400px;
        float: left;
        background-color: blue;
        /*padding-left: 100px;*/
        margin-left: 100px;
        position: relative;
        border: 30px solid green;

    }
    .three{
        position: absolute;
        width: 15px;
        height: 15px;background-color: red;
        /*left: 0;
        left: 20px;
        left: -20px;
        bottom: 10px;*/
    }
    </style>
    </head>
    <body>
        <div class="one">
            <div class="two">
                <div class="three">  </div>
            </div>
        </div>
    </body>
    </html>

该案例重点理解子元素定位的基准,当父元素设置了除static定位之外的定位的时候,子元素相对于父元素定位,可是相对于父元素哪里定位呢?这个时候,基准是父元素的内容区(width+height)+padding,不包括border和margin

四 浏览器窗口显示

坐标以content+padding左上角伟基准

红色的盒子 three 是absolute定位,其基准是蓝色的盒子 two 的content和padding区 ,并不包括 border(绿色部分)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值