从零开始前端学习[19]:前端中重要的属性,定位position属性
2017-09-23 14:53
591 查看
前端中重要的属性,定位position属性
关于定位固定定位fixed
相对定位relative
绝对定位absolute
层级关系z-index
使用定位来完成居中效果
提示:
博主:章飞_906285288
博客地址:http://blog.csdn.net/qq_29924041
关于定位fixed
定位也就是元素相对于其正常出现的位置,或者是相对于父级应该出现的位置,甚至相对于浏览器窗口本身出现的内容;无论是块级元素还是行级元素,或是什么类型的标签,只要定位以后(relative除外),都可以支持宽高
定位的相关属性:
属性 | 属性值 |
---|---|
position | fixed/relative/absolute |
left | px / % |
right | px / % |
top | px / % |
bottom | px / % |
固定定位position:fixed
固定定位fixed:相对于我们的可视化区域,即浏览器的窗口,注意的是,它并不是body,而是能见得到的可视化区域<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8--> <meta name="Generator" content="EditPlus®"> <!--编辑器的名称--> <meta name="Author" content="作者是谁"> <meta name="Keywords" content="关键词"> <meta name="Description" content="描述和简介"> <style type="text/css"> body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;} ul,ol{margin: 0; list-style: none; padding: 0;} a{ text-decoration: none; } *{ margin: 0; padding: 0; } div{ width: 200px; height: 200px; background: deepskyblue; line-height: 200px; text-align: center; } </style> </head> <body> <div>box</div> 没有比脚更长的路,没有比人更高的山first<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br> </body> </html>
上述的代码是没有添加定位属性的,可以看到box是占据文档流的,而文字是在盒子的下方进行显示出来的。
给div的盒子添加属性
div{ width: 200px; height: 200px; background: deepskyblue; position: fixed; top: 200px; left: 200px; line-height: 200px; text-align: center; }
显示如下:
可以看到上图中,box盒子的定位是固定的,在可视化区域中滚动条滚动的时候,但是并不会影响到盒子的位置,盒子也不会因其滚动而改变位置,并且盒子原来的位置其实已经不去占有了,即脱离了文档流了,固定定位 fixed (通常用于固定的导航栏,或者侧边栏广告)
相对定位relative
相对定位,相对总是要有一个参考点的,那么相对定位的参考点是什么??相对定位主要是相对于其正常出现的位置(原来的位置),并且不会去脱离文档流,所以原来的位置依然保留下来,现在的位置是脱离了文档流,漂浮起来,所以一般情况下,我们并不去使用相对定位,而只是把它用来当做父级的定位元素使用:
position:relative;
div{ width: 200px; height: 200px; background: deepskyblue; position: relative; top: 300px; left: 150px; line-height: 200px; text-align: center; }
将上面的源代码修改成relative形式
可以看到相对定位之后,原来的位置依然存在,而新的位置是相对于原来位置来说的,原来的位置依旧保留下来,并且没有脱离文档流,所以一般情况下面,我们都很少去使用这种定位关系。而只是用来做为绝对定位的父级元素的定位
绝对定位absolute
绝对定位,既然是定位,肯定要有一个参考点,固定定位相对的是可视化窗口,相对定位是相对于原来出现的位置,那么绝对定位呢?绝对定位是相对于最近的父级定位元素(包括我们的三种定位fixed,relative,absolute)定位,只是用relative去做为父级定位元素,不会去影响父级元素的特性,注意:如果一直到body都没有找到定位元素,那么这个时候就相对于我们的body定位使用:
position:absolute; 注意:父级元素同样是需要定位的,如果没有定位的话,会一直往上找
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8--> <meta name="Generator" content="EditPlus®"> <!--编辑器的名称--> <meta name="Author" content="作者是谁"> <meta name="Keywords" content="关键词"> <meta name="Description" content="描述和简介"> <style type="text/css"> body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;} ul,ol{margin: 0; list-style: none; padding: 0;} a{ text-decoration: none; } *{ margin: 0; padding: 0; } .box1{width: 400px;height: 400px;border: 1px solid red;position: relative;top: 50px} .box2{width: 300px;height: 300px;border: 1px solid green; position: absolute; left: 50px; top: 50px;} .box3{width: 200px;height: 200px;border: 1px solid blue;position: absolute;left: 50px;top: 50px} </style> </head> <body> <div class="box1"> box1 <div class="box2"> box2 <div class="box3"> box3 </div> </div> </div> 没有比脚更长的路,没有比人更高的山first<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br> 没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br>没有比脚更长的路,没有比人更高的山<br> </body> </html>
显示效果如下所示:
如上所示:
box1采用的是relative定位形式,box2是相对于box1来进行居中的,所以它会去寻找父级box1的定位形式,box3是相对于box2进行居中的,所以它会去寻找box2的定位形式,所以如果需要相对某个元素进行定位的话,这个时候需要在自己添加绝对定位,并且给父级元素也要有一个定位,无论是fixed,还是relative,或者是absolute也可以
注意:使用absolute之后,margin:auto失效了
注意定位的一些问题:
没有定位的情况下,快级元素如果不给宽度,是默认父级元素的100%,但是定位以后,不再默认宽度100%,是内容撑开宽度
无论是什么标签,只要定位以后都是可以支持宽高的,除了relative,也就是如果脱离了文档流后,都是可以支持宽高的
脱离文档流用了absolute之后,这个时候使用margin:auto失效,但是也可以利用其实现居中效果
层级关系z-index
什么是层级关系??之前在写float相关的时候,说浮动的时候会提升半个层级,那么什么是层级?因为浮动和定位(relative除外),会脱离文档流,这样的一种脱离过程就会导致原来的位置被其他元素填充,而自己浮在其内容之上,造成一种叠加的效果,那么这样一层一层的形式,就叫做层级关系。所以层级的关系是在针对脱离文档流的基础之上的,如果没有脱离文档流,每个元素都自己占有一块位置,也就不会形成层级的关系。
层级属性z-index:999;
注意:值没有单位,值越大,层级越高,就会越在上面,并且值没有上限,也没有下限,只比较值得大小
使用定位来完成居中效果
使用cacl计算值来进行居中操作:
计算公式如下:left:calc(50% - 100); //50%是父级元素的宽度的一半,100是子级元素的一半,水平居中 top:cacl(50% - 100);//50%是父级元素高度的一半,100是子元素的一半,垂直居中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta charset="UTF-8"><!--申明当前网页的编码集UTF-8--> <meta name="Generator" content="EditPlus®"> <!--编辑器的名称--> <meta name="Author" content="作者是谁"> <meta name="Keywords" content="关键词"> <meta name="Description" content="描述和简介"> <style type="text/css"> body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: 0;} ul,ol{margin: 0; list-style: none; padding: 0;} a{ text-decoration: none; } *{ margin: 0; padding: 0; } .box1{width: 300px;height: 300px;box-shadow: 0 0 10px 0 deeppink;position: relative;margin:20px} .box2{width: 200px;height: 200px;box-shadow: 0 0 5px 0 blue;position: absolute;left: calc(50% - 100px); top:calc(50% - 100px);} </style> </head> <body> <div class="box1"> <div class="box2"></div> </div> </body> </html>
显示如下:
一种奇葩的方法:
水平居中:position:absolute; margin:auto; left:0; right:0;
上下居中:
position:absolute; margin:auto; left:0; right:0;
如果是上下左右居中的话:
position:absulote; top:0; bottom:0; left:0; right:0;
所以对上面的案例进行修改后,依旧是可以实现居中效果的:
对部分style进行修改:
.box1{width: 300px;height: 300px;box-shadow: 0 0 10px 0 deeppink;position: relative;margin:20px} .box2{width: 200px;height: 200px;box-shadow: 0 0 5px 0 blue;position: absolute;left: 0;); top:0;right: 0;bottom: 0;margin: auto}
同样是可以实现居中显示的:
欢迎持续访问博客,谢谢
相关文章推荐
- 从零开始前端学习[18]:前端中重要的属性,浮动float属性
- 从零开始前端学习[32]:css3中新增加的一些文本属性
- 从零开始前端学习[39]:html5中的弹性布局二(移动端响应式实现各种布局,极其重要)
- 从零开始前端学习[47]:如何使用javascript来操作行内样式或者属性浅析
- 从零开始前端学习[11]:控制文本显示的样式属性
- 从零开始前端学习[23]:img标签的属性和水平对齐的属性vertical-align
- 从零开始前端学习[40]:css3中的resize,user-select属性,多列布局特性,怪异盒子模型,倒影
- 从零开始学习前端开发 — 10、HTML5新标签及表单控件属性和属性值
- 从零开始前端学习[16]:box-shadow阴影属性的使用
- 从零开始前端学习[24]:css的高级属性(继承,重用,组件化的开发过程)
- 从零开始前端学习[54]:js中自定义标签属性和自定义属性
- 从零开始前端学习[31]:css3中新增加的一些背景属性
- 从零开始前端学习[38]:html5中的弹性布局一(移动端响应式实现各种布局,极其重要)
- 从零开始前端学习[51]:js中去操作css样式以及css属性的替代方法
- CSS学习笔记——定位position属性的学习
- CSS学习笔记——定位position属性的学习
- css position 属性 定位学习
- 从零开始前端学习[50]:js操作标签属性,读写属性标签
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
- 前端样式新属性学习系列(一)