佳佳的博客
Menu
首页
css中关于position属性的探究(原创)
Posted by
飞向上帝的板砖
on 2016-02-02
IT
关于 `position` 属性的设置,头脑中一直觉得不是很清楚,所以借助这次机会单独自己测试了一下,记作学习笔记。 首先,css 的 `position` 属性包含下面四种设置情况: 1. `static` :默认属性。指定元素按照常规的文档内容刘(从左到右,从上到下)进行定位。 2. `absolute` :独立定位,它的定位要么是相对于最近的定位祖先元素,要么是相对于文档本身。 3. `fixed` :该值指定元素是相对于浏览器窗口进行定位的。不会随着文档其他部分而滚动。 4. `relative` :元素按照常规文档流进行布局,它的定位相对于文档流中的位置进行调整。上面是定义,下面开始我的测试: 演示代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> *{ margin:0; padding:0; } #father{ width:300px; height:300px; background:black; } #child1{ width:100px; height:100px; background:blue; } #child2{ width:100px; height:100px; background:yellow; } #cousin{ width:100px; height:100px; background:green; } </style> </head> <body> <div id="father"> <div id="child1">child1</div> <div id="child2">child2</div> </div> <div id="cousin">cousin</div> </body> </html> ``` 上述代码在浏览器中展示的样式:  **case1:** 测试最简单的fixed,首先我们把id为father的元素设置为fixed ```css #father{ width:300px; height:300px; background:black; position:fixed; top:100px; left:100px; } ``` 为了展示浏览器滚动情况下,元素位置相对于浏览器窗口不动,将cousin设置为 ```css #cousin{ width:100px; height:2000px; background:green; } ``` 效果:  滚动滚动条,father元素的位置不变 **case2:** 接下来主要区分relative和absolute的情况 删除之前的设定,重新设置child1的元素如下 ```css #child1{ width:100px; height:100px; background:blue; position:relative; top:100px; left:100px; } ``` 预测效果:元素并不脱离文档流,但是偏离原来的位置,因为只设定了这么一个元素的position,因此偏离应该是相对于文档。 效果:(不出所料,只有child1偏离了原来位置,哈哈哈哈)  好,现在在上面的基础上,修改father元素的position,变成relative ```css #father{ width:300px; height:300px; background:black; position:relative; top:100px; left:100px; } ``` 预测效果:整个father元素偏离原来位置,child1和child2元素相对于father的位置不变,cousin的位置同样也不变。 效果:(不出所料,贼哈哈哈哈)  接着,关键的来了,看一下absolute和relative的区别,将上面father元素的position修改为absolute ```css #father{ width:300px; height:300px; background:black; position:absolute; top:100px; left:100px; } ``` 预测效果:absolute因为会使元素脱离原来的位置,所以后面的元素会顶上去,这一点有点像浮动,但是其实我们能控制它的具体位置,所以比浮动更强一点。 效果:(不出所料,呀吼吼吼)  此时,紧接着我们再设置cousin的属性,将他也absolute起来,看它是相对于谁来设定位置 ```css #cousin{ width:100px; height:100px; background:green; position:absolute; top:100px; left:100px; } ``` 预测效果:因为cousin没有父元素,所以它应该是会按照文档来进行绝对定位,和father没关系 效果:(不出所料,我真是佩服自己)  我们再把cousin的position改为relative,此时会怎么样呢 ```css #cousin{ width:100px; height:100px; background:green; position:relative; top:100px; left:100px; } ``` 预测效果:因为father元素已经脱离了原来的文档流,所以cousin元素会顶到最前面,此时的相对定位,就是相对于文档,所以cousin的位置应该不会改变。 效果:(不出所料,我感觉自己快超神了)  再次,我们把father元素的position改回为relative,此时father元素回归文档流,把cousin元素顶回原来的位置,也就是father元素的后面 ```css #father{ width:300px; height:300px; background:black; position:relative; top:100px; left:100px; } ``` 预测效果:因为father回到文档流中了,cousin元素只好屈居father后面,而他本身的绝对定位使得他的top是相对father元素在文档流中的位置来设定的,所以cousin的top应该会在father正下方的位置,注意是文档流中的位置,而非重新定位后的位置 效果:(不出所料,妈妈喊我回家吃饭了)  总结一下: 1. `static` 就是默认设定,此时`top`,`left`,`right`,`bottom`无效,不再阐述 2. `fixed` 就是相对于浏览器窗口来进行定位,就像有些网站上固定在窗口中,挥之不去的小广告,跟着你走 3. `relative` 不会使得元素脱离文档流,元素仍然在原来的位置占有空间,而显示出来是偏离的位置,同时,如果父元素是 `relative` 或者 `absolute` 的话,就相对于父元素进行偏离 4. `absolute` 会使得元素脱离文档流,类似于 `flow` 浮动,同样,如果父元素是 `relative` 或者 `absolute` 的话,就相对于父元素进行偏离 5.注意所有元素的位置定位都是根据在文档流中原来的位置,而非`top`,`left`,`right`,`bottom`等设定后显示出来的位置,切记切记。 原创内容,转载请注明出处~ 吃饭吃饭~
版权声明:原创文章,未经允许不得转载。
https://www.liujiajia.me/2016/2/2/css中关于position属性的探究原创
“Buy me a nongfu spring”
« 【C#】XML的序列化和反序列化
运维角度浅谈 MySQL 数据库优化(转载) »
昵称
*
电子邮箱
*
回复内容
*
(回复审核后才会显示)
提交
目录
AUTHOR
刘佳佳
江苏 - 苏州
软件工程师
梦嘉集团