什么是position,根据css 2.1中的描述,position和float的值决定了浏览器要采用那种定位算法来计算元素盒子的具体位置。先避开float不谈,本文主要介绍position属性的不同取值并对相对定位(relative)和绝对定位(absolute)进行一个简单的比较。

5种不同的取值

  • inherit 顾名思义,元素的position属性值从该元素的父元素继承而来,即与父元素相同。
  • static position属性的默认值。 被应用了position:static的元素,会根据文档流中的位置来显示,即原始的html文档结构是什么样子,元素就会显示在什么位置。left、right、top、bottom属性设置的值将不起作用。
  • fixed 固定定位,即一旦指定了元素的显示位置,该元素就会一直显示在屏幕上的那个位置,即使滚动屏幕,元素在屏幕中的位置依然不变。
  • relative 相对定位,下文详述。
  • absolute 绝对定位,下文详述。

相对定位

相对定位根据文档流中元素的初始位置加上指定的偏移量(offset)来计算元素的最终显示位置。采用相对定位的元素不影响其他相邻盒子的显示效果,即如果元素B采用了相对定位,文档流中元素B后面的元素依然根据元素B的初始位置来计算最终的显示位置,就好像元素B依然占据原来的位置并没有偏移一样。如下图,在给第二列第三行的元素应用了相对定位后,第二列第四行的元素并没有向下移动。

绝对定位

采用绝对定位的元素,其位置由left、right、top、bottom指定的偏移量和元素的包含块(containing block)来确定。什么是包含块,在绝对定位的语境下,采用绝对定位的元素,它的包含块由离他最近的使用绝对/相对/固定定位的父元素确定,具体规则参考CSS规范。采用绝对定位的元素将脱离文档流。如下图,第三行元素应用了绝对定位,脱离的文档流,第四行元素上移占据了第三行元素原来的位置。第三行元素则显示在了左上角位置。

相对定位 VS 绝对定位

从上面的分析可以看出,不管是相对定位还是绝对定位,都是根据left、right、top、bottom这四个属性设置的偏移量来定位元素的,不同的地方在于计算的参考起点不同。相对定位根据元素在文档流中的原始位置来计算最终的显示位置,绝对定位根据元素的包含块的位置来计算最终的显示位置。

浅谈css中的position的更多相关文章

  1. 浅谈css中的position属性

    我觉得吧,css如果不考虑浏览器的兼容问题的话,最让人头疼的应该就是position了,反正我是这么觉得的,为了能基本上搞清楚position的几种情况,我找了一些资料,做了一个小实验,下面是实验的过 ...

  2. 浅谈css中的盒模型(框模型)

    css中的盒模型是css的基础,盒模型的理解可以帮助我们进行对样式进行修改.废话不多说,进入正题: 在w3c中,CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边框.边框 和 外边 ...

  3. 浅谈CSS中的定位知识

    1,静态定位(static) 表示按照正常定位方案,元素盒按照在文档流中出现的顺序依次格式化: 2,相对定位(relative) 将移动元素盒,但是它在文档流中的原始空间会保留下来: 相对定位元素有如 ...

  4. 浅谈css中浮动和清除浮动带来的影响

    有很多时候,我们都会用到浮动,而我们有时候对浮动只是一知半解,却不是太清楚它到底是怎么回事,不知道各位有没有和我一样的感觉,只知道用它,却不知道它到底是怎么回事,所以,在学习的过程中,就要把一个概念不 ...

  5. 浅谈css中一个元素如何在其父元素居中显示

    css如何垂直居中一个元素的问题已经是一个老生常谈的问题了.不管对于一个新手或者老手,在面试过程中是经常被问到的.前两天在看一个flex的视频教程,当中提到了有关元素的居中问题,所以今天小编就来扒一扒 ...

  6. 浅谈CSS中的百分比

    结论: 标准流中的元素,看其属性有没有继承性.对于width和margin-left,它是可以继承的,它会参照父元素或者祖先元素(其实是包含块):对于height,它没有继承性,父元素或者祖先元素会自 ...

  7. 浅谈css中单位px和em,rem的区别-转载

    px是你屏幕设备物理上能显示出的最小的一个点,这个点不是固定宽度的,不同设备上点的长宽.比例有可能会不同.假设:你现在用的显示器上1px宽=1毫米,但我用的显示器1px宽=两毫米,那么你定义一个div ...

  8. 浅谈css中渐变衔接

    无论transition还是keyframes,如何让变化更自然,这是前端应该考虑的问题. 这里,我简单总结下自己的方法. 以实践为例子. 1.图像渐变 @keyframes looppic{ fro ...

  9. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

随机推荐

  1. scala实现Netty通信

    在学习spark源码的时候看到spark在1.6之后底层的通信框架变成了akka和netty两种方式,默认的是用netty根据源码的思路用scala写了一个Demo级别的netty通信 package ...

  2. adb 修改system文件

    1. $ adb push SecureSetting.apk /sdcard/  // 上传要安装的文件,为安装做准备.     2. $ adb shell     3. $ su // 切换到  ...

  3. PHP+MYSQL会员系统的开发实例教程

    本文通过一个简单的实例完成了完整的PHP+MySQL会员系统功能.是非常实用的一个应用.具体实现步骤如下: 一.会员系统的原理: 登陆-->判断-->保持状态(Cookie或Session ...

  4. 访问svc 文件,编译器错误消息: CS0016,未能写入输出文件

    编译错误              说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码.             编译器错误消息: CS0016: 未 ...

  5. ios 工程图片清理shell

    #!/bin/shecho "随意删除@2x图片可能会引起错误 因为ios工程会更加前缀和分辨率自己找到@2x的图片 所以删除@2x图片时要慎重"read -n1 -p  &quo ...

  6. 2.html5的基本格式

    分享完html语言的核心之后,是时候开始写了.理论上,只要符合格式要求,就算是用记事本也可以写.但是,这种蛋疼且生产力低下的行为还是少做的好,选一个适合自己的IDE才是上上之选,至于哪个合适自己,那就 ...

  7. rails中ActionController::InvalidAuthenticityToken解决办法

    Ror代码 class FooController < ApplicationController protect_from_forgery :except => :index # you ...

  8. [转]linux时间同步

    转自:http://www.jotop.com/2012/vpsinfo_0525/439.html 美国的vps大多都是国外的时间,让我们的程序总是不适应.那么如何调整linux的时间为北京时间?修 ...

  9. iOS学习之Object-C语言继承和初始化方法

    一.继承 1.面向对象的三大特性:封装,继承,多态.      面向对象提供了继承特性.把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可.继承既能保证类的完整,又能简化代码. ...

  10. 单行bash、shell、perl命令

    主题:单行经典bash.shell.perl命令 作者:luomg 摘要: 会陆陆续的写自己工作中的常用有意思的命令,争取你能看完后就能搞定常见操作, 且尽量自少提供基本shell.perl的实现方式 ...