手记

position: fixed在当前视图基于父元素定位

今天在工作中遇到这样一个需求,需求如下:


  子元素要固定在父元素旁边,当下滑到一定位置的时候,子元素固定在浏览器窗口顶部。
  试了一下,fixed只能基于浏览器窗口定位,并不能基于父元素定位,这样满足不了我的需求。

CSS 有三种基本的定位机制:普通流、浮动和绝对定位。
除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。
块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。
行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。--W3C

首先回顾一下定位:

CSS Positioning(定位)

  • Static 定位
    HTML元素的默认值,即没有定位,元素出现在正常的流中。
    静态定位的元素不会受到top, bottom, left, right影响。
  • Fixed 定位
    元素的位置相对于浏览器窗口是固定位置。
    即使窗口是滚动的它也不会移动
  • Relative 定位
    相对定位元素的定位是相对其正常位置。
    可以移动的相对定位元素的内容和相互重叠的元素,它原本所占的空间不会改变。
  • Absolute 定位
    绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于html。
    Absolutely定位使元素的位置与文档流无关,因此不占据空间。
    Absolutely定位的元素和其他元素重叠。

    重叠的元素

    元素的定位与文档流无关,所以它们可以覆盖页面上的其它元素
    z-index属性指定了一个元素的堆叠顺序(哪个元素应该放在前面,或后面)
    一个元素可以有正数或负数的堆叠顺序。具有更高堆叠顺序的元素总是在较低的堆叠顺序元素的前面。

  看到fixed定位了么?元素的位置相对于浏览器窗口是固定位置。那么现在需要它基于父元素定位怎么办?

  看代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style>
    .father{
        top:100px;
        position: absolute;
        display: block;
        width: 200px;
        height: 200px;
        background: red;
    }
    .sun{
        position: fixed;
        margin-left: 100px;
        display: block;
        width: 100px;
        height: 100px;
        background:blue;
    }
    </style>
</head>
<body>
    <div class="father">
    <div class="sun">
    </div>
    </div>
</body>
</html>

运行后你会发现:

  不设置position: fixed的top值,用magin来控制当前子块的位置,这样就能达到在当前窗口基于父元素定位来实现自己想要的效果了。  

12人推荐
随时随地看视频
慕课网APP

热门评论

手机端的固定定位该怎么设置??

你是说子元素和父元素一起下降吗

查看全部评论