zoukankan      html  css  js  c++  java
  • CSS样式—绝对定位(absolute)与相对定位(relative)的区别(图示)

    position有下面属性值:

    1. static: 不使用定位(默认值)
    2. fixed:特殊的绝对定位
    3. absolute: 使用绝对定位
    4. relative: 使用相对定位

    示例图:

    绝对定位:

    绝对定位可以直接定位到所需要的坐标位置,所以在布局的时候会很容易,但是无法处理带有页脚的页面布局,因为我们无法确定中间的中文内容,所以无法精确的将页脚定义到中间正文的下面。绝对定位以浏览器的原始起点为依据,如果浏览器没有设置,则参照父级起点定位。

    当div2的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:

    (1)当div2的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时div2按照这个parent来进行定位。

    注 意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了 margin,border,padding等属性,那么这个定位点将忽略padding,absolute的偏移将会从padding开始的地方(即只从padding的左上 角开始)进行定位,这与我们会想当然的以为会以margin的左上端开始定位的想法是不同的。 接下来的问题是,div2的位置到哪里去了呢?由于当position设置为absolute后,会导致div2溢出正常的文档流,就像它不属于 parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时div3将获得div2的位置,它的文档流不再基于 div2,而是直接从parent开始。

    (2)如果div2不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。


    相对定位:

    相对定位是在原位的基础上进行移动,不管它是否移动都将保留之前的坐标位置,这样不会影响整体的布局效果。相对定位是参照父级起点定位。

    我们可以这样理解,如果不设置relative属性,div2的位置按照正常的文档流,它应该处于某个位置。但当设置div2为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。

    对于此,您只需要记住,div2如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。

    随后的问题是,div3的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为div2增加了position的属性而发生改变。

    如果此时把div3的position也设置为relative,会发生什么现象?此时依然和div2一样,按照它原来应有的位置进行偏移。

    注意relative的偏移是基于对象的margin的左上侧的

    fixed

    fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。

    static

    position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。

    参考文档:

      CSS之Position详解 

  • 相关阅读:
    HTTP 缓存图解
    http协议构成整理
    HTTP2.0
    Event Loop
    斐波那契数列
    归并排序
    快速排序
    史上最全前端资源
    Js 将 Date 转化为指定格式的String
    vue-cli webpack全局引入jquery
  • 原文地址:https://www.cnblogs.com/jsxiangxiang/p/2952499.html
Copyright © 2011-2022 走看看