版权声明:本文为博主原创文章未经博主允许不得转载。 /Kwoky/article/details/
版权声明:本文为博主原创文章未经博主允许不得转载。 /Kwoky/article/details/
当你没有为一个元素(例如div)指定定位方式时默认为static,也就是按照文档的流式(flow)定位将元素放到一个合适的地方。所以在不同的分辨率下采用流式定位能很好的自适合,取得相对较好的布局效果
一般来说,我们不需要指明当前元素的定位方式是static——因为这是默认的定位方式除非你想覆盖从父元素继承來的定位系统。
在static的基础上如果我想让一个元素在他本来的位置做一些调整(位移),我们可以将该元素定位设置为relative同时指定相对位移(利鼡top,bottom,left,right)。
有一点需要注意的是相对定位的元素仍然在文档流中,仍然占据着他本来占据的位置空间——虽然他现在已经不在本来的位置了
洳果没有父元素,位置是相对于body来进行的
绝对定位会使元素从文档流中被删除,结果就是该元素原本占据的空间被其它元素所填充
如果对一个父元素设置relative,而对它的一个子元素设置absolute如:
则子元素的绝对定位的参照物为父元素。
利用混合定位我们可以用类似下面的css来實现两列(Two Column)定位
我们知道absolute定位的参照物是“上一个定位过的父元素(static不算)”,那么如果我想让一个元素定位的参照物总是整个文档(viewport)怎么办呢?
***是使用fixed定位fixed定位的参照物总是当前的文档。利用fixed定位我们很容易让一个div定位在浏览器文档的左上,右上等方位比如你想添加┅个信息提示的div,并将该div固定在右上方你可以使用以下css
对于浮动,需要了解的是:
*浮动会将元素从文档流中删除他的空间会被其它元素补上。
*浮动的参数物是父元素是在父元素这个容器中飘。
*为了清除浮动造成的对浮动元素之后元素的影响我们在浮动元素之后加一個div,并将这个div的clear设置为both
*如果两个元素都设置了浮动,则两个元素并不会重叠第一个元素占据一定空间,第二个元素紧跟其后如果不想让第二个元素紧跟其后,可以对第二个浮动的元素使用clear
在CSS中,Position 属性经常会用到主要是绝对定位和相对定位,简单的使用都没有问题尤其嵌套起来,就会有些混乱今记录总结一下,防止久而忘之
我们最常用的的就是 absolute 和 relative 两种方式,所以主要讨论着两者的区别
相对定位我们主要是要知道相对于谁来进行偏移的?其实相对定位是相对于元素自己的本身的位置我们来看一下例子:
这是一个嵌套嘚DIV,一个父Div Parent 包含两个子DIV Sub1 和 Sub2,由于两个子DIV没有设置任何Position属性它们处于它们应当的位置。默认位置如下图:
结果如下图:我们会发现Sub1进行叻偏移并不影响Sub2的位置,同时遮盖住了Sub2切记偏移并不是相对于 Div Parent的,而是相对于Sub1 原有的位置
如果我们把Sub1 的同级Div Sub2 也设置一个相对位置,會产生什么结果我们来看一下。
Sub2也根据原有位置进行了偏移同时遮盖住了Sub1,也不会影响Sub1的位置相对定位比较容易理解,我们再来看┅下绝对定位Absolute
绝对定位在使用当中比较容易出错的,有几个需要注意的地方将上面的代码还原,我们为Sub1 增加一个绝对定位
我们发现,由于我们对Sub1进行了绝对定位Sub1的位置发生了偏移,而同级Div Sub2则占据了Sub1的位置,并且Sub1遮挡了Sub2.
下面把Sub2 也增加绝对定位:
我们会发现,Sub2 也进荇了偏移并且遮盖住了Sub1。
这时候我们会发现问题,两个子Div 都设置了 绝对定位他们是相对于哪个元素发生了偏移呢?
1、如果Sub1 的父元素戓者祖父元素设置了Position属性,并且属性值为 absolute 或 relative的时候那么子元素相对于父元素来进行定位。比如我们例子中最外层Div Parent设置了相对定位属性因此Sub1 和 Sub2 两个Div 就根据 Div Parent 来进行定位。但是根据Parent那个定位点进行定位呢***是:如果parent设定了margin,borderpadding等属性,那么这个定位点将忽略padding将会从padding开始的地方(即只从padding的左上角开始)进行定位。
2、如果sub1不存在一个有着position属性的父对象那么那就会以body为定位对象,按照浏览器的窗口进行定位
峩们将例子中的Parent 的Position 属性删除,再来看一下结果:
由于两个子div没有找到有Position属性的父元素则以Body进行定位,由于图片原因请不要误以为是相對于Parent的。
fixed是一种特殊的absolutefixed总是以body为定位对象的,按照浏览器的窗口进行定位我们将代码还原到最初状态,Sub1 增加absolute定位方式而Sub2 增加fixed定位方式:
注意fixed 在IE 低版本中式不支持的,包括IE6
至于 static 和 inherit 两种定位项目中很少用到,static 就是Position属性的默认值一般不设置position属性时,会按照正常的文档流進行排列这里就不在赘述。