overflow:auto;导致子元素定位随着滚动条滚动而向上滚动

当CSS中设置`overflow:auto`时,子元素的相对定位会随滚动条变化。即使子元素定位超出父元素,父元素仍会出现滚动条。滚动时,子元素的位置会根据坐标系的变化而改变,保持相对定位的状态。

<style>
        .box1 {
            width: 100px;
            height: 100px;
            overflow: auto;
            position: relative;
            margin: 100px auto;
            border: solid 1px blue;
        }
        .box4 {
            width: 100%;
            position: absolute;
            bottom: 0px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box2">
            <div class="box3">
                这是一串超出父元素的文本
            </div>
            <div class="box4">
                balabala
            </div>
        </div>
    </div>
</body>

在这里插入图片描述
这是页面初始化效果
在这里插入图片描述
我们给红色div设置的坐标设置:button:0;那么,红色div应该始终在父元素的底部(box2并没有设置position属性;所以是相对于box1来进行定位的);当我们滚动滚动条的时候;红色div也就是设置了相对定位的div会随着父元素的滚动而进行滚动;为什么会这样呢?

    <style>
        .box1 {
            width: 100px;
            height: 100px;
            overflow: auto;
            position: relative;  
            margin: 100px auto;
            border: solid 1px blue;
        }
        .box4 {
            width: 100%;
            position: absolute;
            bottom: -100px;  /*当我们将红色div的buttom属性设置为-100的时候;也就是将红色div在父元素外定位*/
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box2">
            <div class="box3">
                这是一串超出父元素的文本这是一串超出父元素的文本这是一串超出父
                元素的文本这是一串超出父元素的文本这是一串超出父元素的文本这是一串
                超出父元素的文本这是一串超出父元素的文本这是一串超出父元素的文本
            </div>
            <div class="box4">
                balabala
            </div>
        </div>
    </div>
</body>

当我们将红色div的buttom属性设置为-100的时候;也就是将红色div在父元素外定位

在这里插入图片描述

红色div在定位父元素的下面,并且没有在页面上显示,

在这里插入图片描述

当我们滚动滚动条的时候,红色div显示在页面上,并且和刚刚的效果一样,是随着父元素的滚动而滚动的; 那么外层父元素的滚动条和里面的文字信息撑起来的高度有没有关系呢?
    <style>
        .box1 {
            width: 100px;
            height: 100px;
            overflow: auto;
            position: relative;
            margin: 100px auto;
            border: solid 1px blue;
        }
        .box4 {
            width: 100%;
            position: absolute;   
            bottom: -100px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box4">
            balabala
        </div>
    </div>
</body>

我们把多余的div去掉,只保留红色div和定位父元素

在这里插入图片描述

页面上并没有显示红色div,但是父元素依然存在滚动条

在这里插入图片描述

当我们向下滚动滚动条的时候,红色div在定位父元素的最底部,也就是说定位父元素的滚动条是由红色div显示出来了,

我们都知道overflow:auto,属性是设置元素溢出时为元素添加滚动条,当我们为定位父元素设置overflow:auto,的时候,定位子元素的定位即使超出了定位父元素的显示位置,父元素也会为自己添加滚动条,容纳子元素

那么我们可以假象,当父元素设置了overflow:auto,的时候,自己就变成了一个巨大的容器,显示区域依然是我们设置的宽高,对于相对定位的子元素来说,坐标系的0点位置依然是定位父元素的左下角,但是当我们滚动滚动条的时候,坐标系会随着滚动条的滚动而发生改变,所以当我们滚动滚动条的时候,即使子元素设置了相对定位,位置也会依然发生改变

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值