您现在的位置是:网站首页 > 心得笔记
css中positoin讲解
html中常用的布局方式:
1、标准流(也就是网页中默认的布局方式 即顺序布局 )
html两大元素:
块级元素:div h1-h6 有序无序列表(ul ol li) table表格 p段落....
内联元素:a超链接 span文字 img图片 input控件......
两者区别:
区别: 块元素总是独占一行
内联元素是和相邻的内联元素在同一行 如果一行宽度不够时,才会挤到另一行
代码实例显示:
<html> <head> <meta charset="UTF-8" /> <title>标准流</title> <style> .test{ width:100px; height:100px; background:red; border:1px solid #FFF; } </style> </head> <body> <div class="test"></div> <div class="test"></div> <div class="test"></div> <span>文字文字1</span> <span>文字文字2</span> <span>文字文字3</span> </body> </html>
运行效果:
2、定位 position
position属性的意义:
position属性决定了元素将如何定位 并且可以通过改变 top bottom left right等属性实现位置的改变
position中的可选参数:
static
static:position属性的默认值 元素按照标准流的方式正常排列
relative
relative:相对定位 使用后仍然处于正常的文档流中 但是可以通过top bottom left right来改变元素的位置
示例:
<html> <head> <meta charset="UTF-8" /> <title>标准流</title> <style> .div1{ width:100px; height:100px; background:red; position:relative; left:0; top:0; } .div2{ width:100px; height:100px; background:blue; position:relative; left:0; top:-50px; } </style> <body> <div class="div1"></div> <div class="div2"></div> </body> </html>
absolute
absolute:绝对定位 配合top bottom left right等位置属性 元素将会脱离正常的文档流 在整个网页中都是可以移动定位的 并拥有了层级的概念 后写的元素将覆盖先写的元素
示例:
<html> <head> <meta charset="UTF-8" /> <title>标准流</title> <style> *{ padding:0; margin:0; } .test{ width:100px; height:100px; background:red; } </style> <body> <div class="test"></div> </body> </html>
运行效果如下:
可发现,此时的网页高度就是块级的高度100px !!!
修改上面代码:
<style> *{ margin:0; padding:0; } .test{ width:100px; height:100px; background:red; position:absolute; } </style> <div class="test"></div>
运行效果:
可发现,此刻网页高度是0 因为给div设置了定位属性 导致div已经脱离正常的文档流 以至于html中已经不存在这个div 从而导致html没有高度!!!
给test div添加一个兄弟div
<style> *{ margin:0; padding:0; } .bro{ width:100px; height:100px; background:blue; } .test{ width:100px; height:100px; background:red; position:absolute; } </style> <div class="bro"></div> <div class="test"></div>
运行效果:
可发现,此刻虽然设置了定位属性 但是并没有定位特性呢?因为此刻没有设置top bottom left right定位元素!!!
设置定位元素,查看具体变化
<style> *{ margin:0; padding:0; } .bro{ width:100px; height:100px; background:blue; } .test{ width:100px; height:100px; background:red; position:absolute; left:50px; top:50px; } </style> <div class="bro"></div> <div class="test"></div>
运行效果:
此刻,test div就相对于网页左上角进行了定位 并且此刻红色区块浮动到了蓝色区块上面,这就再次证实了层级的概念,后面元素层级大于前面元素层级!!!
给test div添加一个父级div
<style> *{ margin:0; padding:0; } .per{ width:300px; height:300px; background:blue; margin-top:200px; margin-left:200px; } .test{ width:100px; height:100px; background:red; position:absolute; left:50px; top:50px; } </style> <div class="per"> <div class="test"></div> </div>
运行效果:
可见,由于父级元素中没有设置定位属性 所以子元素将会以窗口的四个角来定位!!!
总结:
position:absolute;left:100px;top:100px; ---- 相对于网页左上角定位(以网页左上角为原点)
position:absolute;right:100px;top:100px; ---- 相对于网页右上角定位(以网页右上角为原点)
position:absolute;left:100px;bottom:100px; ---- 相对于网页左下角定位(以网页左下角为原点)
position:absolute;right:100px;bottom:100px; ---- 相对于网页右下角定位(以网页右下角为原点)
注意:这里相对于可视窗口定位的fixed
fixed:固定定位 配合top bottom left right的元素属性 元素会脱离正常文档流进行移动定位 并拥有层级的概念
代码示例:
<style> body{ height:3000px; } .test{ width:100px; height:100px; background:red; position:fixed; top:0; left:0; } </style> <div class="test"></div>
运行效果:
滚动网页,test div仍然固定在网页左上角!!!注意:fixed的定位跟absolute绝对定位一样的定位规则!!!
注意:任何固定元素不受限于父元素 即使父元素带有了定位的属性!!!
代码示例:
.per{ height:300px; width:300px; background:blue; position:absolute; top:300px; left:300px; } .test{ width:100px; height:100px; background:red; position:fixed; top:100px; left:100px; } </style> <div class="per"> <div class="test"></div> </div>
运行效果:
inherit
inherit:是继承的意思
代码实例:
<style> *{ margin:0; padding:0; } .per{ width:300px; height:300px; background:red; } .son{ width:100px; height:100px; background:blue; position:inherit; left:100px; top:100px; } </style> <div class="per"> <div class="son"></div> </div>
运行效果:
可见,虽然给子元素设置了position:inherit 但由于父元素中并没有设置任何的定位 所以 子元素继承不了父元素的定位方式!!!
如果我此时给父元素设置position:relative,那么效果展示如下,子元素就有了定位:
但是如果设置父元素:position:fixed;left:200px;top:200px;那么展示效果就如下:
运行效果如下:
可发现,后写的带有定位属性的元素层级会覆盖先写的元素!!!
总结:
relative通过top bottom left right控制元素的移动,这些元素是如何控制的呢?
top:50px/-50px -------向下移动50px/向上移动50px
bottom:50px/-50px ----向上移动50px/向下移动50px
left:50px/-50px ------向右移动50px/向左移动50px
right:50px/-50px -----向左移动50px/向右移动50px
分析知道,子元素继承父元素的position:fixed;fixed不受制于父元素!!!