深入理解CSS定位中的偏移

CSS中有三种基本形式的布局机制:普通流、浮动和绝对定位。利用定位可以准确定义元素的位置,或者是元素相对于其父元素、另一个元素、浏览器窗口的位置。

一、Position定位:
五个值:
  • static
  • relative
  • fixed
  • absolute
  • sticky

1.static:

HTML元素的默认值,即没有定位,遵循正常的文档流对象。静态定位的元素不会受到投top、bottom、left、right的影响。

HTML代码:

<div class="box1">

</div>

CSS代码,添加left和top前:

.box1{
     width: 300px;
     height: 50px;
     position:static;
     background-color: paleturquoise;
     margin:20px auto;
 }

在这里插入图片描述
添加后:

.box1{
     width: 300px;
     height: 50px;
     position:static;
     background-color: paleturquoise;
     margin:20px auto;
     top:200px;
     left:200px;
 }

在这里插入图片描述
注:位置没有发生改变

2.relative :

相对定位,是相对于其原本的位置来定位的,它原本所占的空间仍保留。
<div class="box1">

</div>

没添加top和left之前:

.box1{
     width: 300px;
     height: 50px;
     position:relative;
     background-color: paleturquoise;
     margin:20px auto;
 }

在这里插入图片描述
添加之后:
在这里插入图片描述

3.absolute :

绝对定位的元素的位置相对于最近的已定位父元素,如果元素 没有已定位的父元素,那么 它的位置相对于html标签absolute 定位使元素的位置与文档流无关,因此不占据空间,absolute 定位的元素和其他元素重叠。 HTML:
<div class="box1">

</div>
<div class="box2">

</div>

CSS:

        .box1{
            width: 300px;
            height: 50px;
            background-color: paleturquoise;
            margin:20px;
            position: absolute;
        }
        .box2{
            width: 300px;
            height: 50px;
            background-color: #437aee;
        }

在这里插入图片描述

4.fixed

元素的位置 相对于浏览器窗口是固定位置 , 即使窗口是滚动的它也不会移动。

5. sticky

基于用户的滚动位置来定位。

  • 粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。

  • 它的行为就像 position:relative;
    而当页面滚动超出目标区域时,它的表现就像position:fixed;,它会固定在目标位置。

    HTML:

<div class="sticky">我是粘性定位!</div>

<div style="padding-bottom:2000px;background-color: #b9d1ee">
    <p>滚动我</p>
    <p>来回滚动我</p>
    <p>滚动我</p>
    <p>来回滚动我</p>
    <p>滚动我</p>
    <p>来回滚动我</p>
</div>

css:

		.sticky {
            position: -webkit-sticky;
            position: sticky;
            top: 0;
            padding: 5px;
            background-color: #83dde8;
            border: 2px solid #3da0af;
        }

在这里插入图片描述
在这里插入图片描述

二、包含块:

包含块:是视觉格式化模型的一个重要概念,与盒模型类似,也可以理解为一个矩形。作用是为它里面包含的元素提供一个参考,元素的尺寸和位置的计算往往是由该元素所在的包含块决定的。

1、根元素:

根元素的包含块是一个视窗大小的矩形,即HTML的父级document。

2、非根元素:

如果position是relative或者static,包含块由最近的元素的内容边界构成。

HTML:

<div class="box1">
    <div class="box2">
        box2
    </div>
</div>

CSS:

        .box1{
            background-color: paleturquoise;
            margin:20px;
            padding:20px;
            height: 200px;
        }
        .box2{
            width: 300px;
            position: relative;
            background-color: #b9d1ee;
            padding:20px;
        }

在这里插入图片描述

如果是position值是absolute,包含块设置为最近的的position的值不是static的祖先元素。

  • 如果这个祖先是块级元素,包含块则设置为该元素的内容边界。

HTML:

<div class="box1">
    <div class="box2">
        box2
    </div>
</div>

css:

        .box1{
            background-color: paleturquoise;
            margin:20px;
            padding:20px;
            height: 200px;
        }
        .box2{
            width: 300px;
            position: absolute;
            background-color: #b9d1ee;
            padding:20px;
        }

在这里插入图片描述

  • 如果没有祖先,元素的包含块定义为初始包含块,即document
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值