zoukankan      html  css  js  c++  java
  • position详解

    导读:

    position的定位类型有:static(默认值)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)、sticky(粘性定位)。其中最常用的就是relative和absolute了。我们先来区别一下相对定位和绝对定位,最后再详细讲解其它取值分别是什么意思。


    相对定位和绝对定位

    先看看MDN上是怎么解释它们的:

    相对定位:相对定位的元素是在文档中的正常位置偏移给定的值,但是不影响其他元素的偏移。

    绝对定位:相对定位的元素并未脱离文档流,而绝对定位的元素则脱离了文档流。在布置文档流中其它元素时,绝对定位元素不占据空间。绝对定位元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时,则相对于ICB(inital container block, 初始包含块)。

    看到这里是不是一脸懵逼呢?大家可以尽量去感悟理解一下,如果实在理解不了也没事,为了更形象地理解relative(相对定位)和absolute(绝对定位),我们先来看一段代码:

    HTML:

    <div class="box" id="one">One</div>
    <div class="box" id="two">Two</div>
    <div class="box" id="three">Three</div>
    

    CSS:

    .box {
      display: inline-block;
       100px;
      height: 100px;
      background: red;
      color: white;
    }
    
    #two {
      position: relative;//相对定位
      top: 20px;
      left: 20px;
      background: blue;
    }
    

    可以通过Codepen打开尝试:https://codepen.io/sd237720488/pen/oJogNO

    相对定位 relative

    #two {
      position: relative;//相对定位
      top: 20px;
      left: 20px;
      background: blue;
     }
    

    上面代码用的是相对定位,运行结果如下:

    我们可以发现,在相对定位relative的情况下:

    如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。——W3school

    Two模块:以原本正常位置为参照,向下、向右偏移了20px。
    其它元素(One/Three):均以Two模块正常位置的情况下布局,Two并没有影响其它元素偏移。

    绝对定位 absolute

    当我们把代码中的position:relative替换成position:absolute,会发生什么呢?

    #two {
      position: absolute;//相对定位
      top: 20px;
      left: 20px;
      background: blue;
    }
    


    我们可以发现,在绝对定位absolute的情况下:

    绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块。——W3school

    Two模块:因为没有已定位的祖先元素,所以它的位置相对于最初的包含块,向下、向右偏移了20px。
    其它元素(One/Three):就像Two不存在一样布局。


    固定定位 fixed

    #one {
      position: fixed;
      top: 80px;
      left: 10px;
    }
    

    "One" 元素固定定位在离页面顶部 80px,离页面左侧 20px 的位置。


    粘性定位 sticky

    #one {
    position: -webkit-sticky;
    position: sticky; 
    top: 10px; 
    }
    

    以top:10px为临界点,在视图滚动到元素top距离小于10px时,"one"元素为相对定位,超过10px则为固定定位。

    sticky为CSS3新增属性。值得注意的是,这个属性的兼容性还不是很好,目前仍是一个试验性的属性,并不是W3C推荐的标准。

  • 相关阅读:
    YYControls
    JMS基础教程
    .NET牛人应该知道些什么?
    我(zhangxz)的博客园
    Java多线程 sycronize - wait -notify - notifyall
    .NET牛人应该知道些什么_答案(本答复不是标准答案,敬请兄弟们补充更正)
    HDU OJ 动态规划46题解析
    HDU OJ分类
    JS生成二维码
    C# 往Datatable中添加新行的步骤
  • 原文地址:https://www.cnblogs.com/shendan/p/position.html
Copyright © 2011-2022 走看看