什么是定位呢?

定位(position),故名思议,就是确定元素在页面中的位置。

CSS的常用定位有两种,一种是相对定位,一种是绝对定位。

下面我们看例子

  1. <html>
  2. <head>
  3. <style>
  4. #div0 {
  5. /* 设置背景色为黄色 */
  6. background-color:yellow;
  7. /* 设置边框为1px的线条 */
  8. border:1px solid;
  9. /* 设置宽度为800px */
  10. width:800px;
  11. }
  12. #div1, #div2 {
  13. /* 设置宽度为300px */
  14. width:300px;
  15. /* 设置高度为300px */
  16. height:300px;
  17. /* 设置边框为1px的线条 */
  18. border:1px solid;
  19. }
  20. #div1 {
  21. /* 设置背景色为灰色 */
  22. background-color:#888;
  23. }
  24. #div2 {
  25. /* 设置背景色为蓝色 */
  26. background-color:#08c;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <div id="div0">
  32. <div id="div1"></div>
  33. <div id="div2"></div>
  34. </div>
  35. </body>
  36. </html>

有三个div,其中一个大的#div0,里面含有两个子div#div1#div2

可以看到,大的黄色#div0,嵌套了一个灰色的#div1和一个蓝色的#div2

由于div块级元素,所以灰色黄色div不会在同一排显示。


测试1,相对定位

这个时候,我们给#div1,设置相对定位

  1. #div1 {
  2. /* 设置背景色为灰色 */
  3. background-color:#888;
  4. /* 设置为相对定位 */
  5. position:relative;
  6. /* 设置相对于自己,上面向下移动20px,左侧向右移动30px */
  7. top:100px;
  8. left:150px;
  9. }

当我们给灰色的#div1做了相对定位之后,#div1相对于自己原来的位置做了移动。

但是其他的元素#div0#div2的位置都没有发生变化,也就是说,给元素做了相对定位之后,其他元素不受影响,还认为该元素,在其原来的位置。


测试2,一个子元素绝对定位,父元素无定位

我们再给#div1改成绝对定位

  1. #div1 {
  2. /* 设置背景色为灰色 */
  3. background-color:#888;
  4. /* 设置为绝对定位 */
  5. position:absolute;
  6. /* 相对于页面html,上面向下移动20px,左侧向右移动30px */
  7. top:100px;
  8. left:150px;
  9. }

这时发现,原来的黄色#div0坍塌了,这是因为,绝对定位,同样会产生类似于float的脱离文档流绝对定位的元素,与其他元素不在同一层面,处于其他元素的上方。

当父元素#div0无定位时候,绝对定位是相对于html文档来做的定位,与其父元素无关。


测试3,一个子元素绝对定位,父元素有定位

当我们给父div设置一个定位后(绝对定位/相对定位都可以),情况又发生了改变

  1. #div0 {
  2. position:relative;
  3. }

从图上可以清楚的看到,#div1的位置,相对于父元素#div0发生了偏移。

也就是说,当父元素有定位,绝对定位是相对于父元素来做的定位。

测试4,两个子元素绝对定位,父元素无定位

现在我们给蓝色的#div2也做一个绝对定位,再来看一下效果。

  1. #div2 {
  2. /* 设置背景色为蓝色 */
  3. background-color:#08c;
  4. /* 设置为绝对定位 */
  5. position:absolute;
  6. /* 相对于页面html,上面向下移动30px,左侧向右移动60px */
  7. top:30px;
  8. left:60px;
  9. }

现在两个子元素都设置了绝对定位,那么他们就都处于其他元素的上方,黄色的父div,就在坍塌的只剩下一条线了。

那么两个子div,重叠在一起,到底怎样控制,谁在谁的上面呢?

可以用z-index属性来控制。

我们给#div1加上z-index属性

  1. #div1 {
  2. /* ... 其他css代码 */
  3. /* 设置层级为1 */
  4. z-index:1;
  5. }

css中,用z-index来设置元素的层级,默认是0,谁的z-index大,谁就在上面

当给#div1设置z-index1后,#div2z-index是默认值0,#div1z-index#div2的大,那么#div1就在#div2的上方了。

同理,当你给一个元素的z-index设置为-1时,那么这个元素就会在文档下面,看不见了。

总结:

  1. 相对定位,是相对自己原来位置所做的定位,其他页面元素不受影响,还认为该元素,在其定位前的地方。
  2. 如果父元素没有定位,那么绝对定位,是相对于页面html做的定位。
  3. 如果父元素有定位,那么绝对定位,是相对于其父元素所做的定位。
  4. 定位的层级由z-index属性控制,默认是0,谁大谁在上方。

CSS的相对定位和绝对定位(position)的更多相关文章

  1. 详解CSS的相对定位和绝对定位

    CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...

  2. Web—12-详解CSS的相对定位和绝对定位

    CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...

  3. 详解CSS的相对定位和绝对定位(讲得很详细)

    详解CSS的相对定位和绝对定位 CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left ...

  4. css定位:相对定位、绝对定位、固定定位的区别与特性

    css定位:相对定位.绝对定位.固定定位的区别与特性 原文地址:http://www.qingzhouquanzi.com/106.html css定位常用的有以下三种: 使用了定位的共同特性: 这三 ...

  5. CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位

    其实前面的标准流和浮动流都很理解,就是定位不太好理解,特别是相对定位和绝对定位,很多刚开始学的同学不好区分.因此这里,小强老师和大家一起分享CSS定位的学习. 通过我们前面的学习,我们网页布局方法: ...

  6. CSS中相对定位与绝对定位

    看了几个讲解定位的博客,觉得还不错,分享之: 博客一:http://blog.sina.com.cn/s/blog_4bcf4a5e010008o0.html 文章中,主要需要参考的有两点: 1,相对 ...

  7. h5整理--详解css的相对定位和绝对定位

    浏览器默认状态下position的属性默认值是static也就是没有定位,元素出现在正常的文档流中,这个时候给元素设置的left,right.bottom.top这些偏移属性是没有效果的,不会生效: ...

  8. css 中相对定位和绝对定位

    1. css中定位机制有三种: 标准文档流, 浮动, 绝对定位 2. 绝对定位就属于第三种定位, 用到position属性, 下面就是具体设置 相对定位: 相对于自身原有位置(就是普通流的时候)进行偏 ...

  9. css中相对定位和绝对定位

    相对定位: #box_relative { position: relative; left: 30px; top: 20px; } 绝对定位: #box_relative { position: a ...

随机推荐

  1. jzoj4918. 【GDOI2017模拟12.9】最近公共祖先 (树链剖分+线段树)

    题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表 ...

  2. spring 和 mybatis 整合过程 (包含分页)

    1.spring-mybatis.xml  : 配置 SqlSessionFactory 和  MapperScannerConfigurer  <bean id="sqlSessio ...

  3. 本地访问Vmware虚机Web网站

    情况:公司是域环境,Vmware网络设置的是NAT连接模式,里外装的都是Windows,虚机网络IP地址是自动获取的. 查看: 1.虚机Ping本地的IP地址可以Ping通: 2.本地Ping虚机的I ...

  4. CodeForces - 476B -Dreamoon and WiFi(DFS+概率思维)

    Dreamoon is standing at the position 0 on a number line. Drazil is sending a list of commands throug ...

  5. 浅谈关于树形dp求树的直径问题

    在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...

  6. 网络流之最大流与最小费用流入门&&模板

    理解处 刷题处 模板处 最大流模板 处理重边的+(优化) #include<bits/stdc++.h> using namespace std; ; const int INF = 0x ...

  7. lnmp 架构

    Mysql安装 tar zxf mysql-boost-5.7.17.tar.gz yum install -y gcc gcc-c++ yum install cmake-2.8.12.2-4.el ...

  8. eclipse+pydev 安装和配置过程

    安装 PyDev 在安装 PyDev 之前,要保证您已经安装了 Java 1.4 或更高版本.Eclipse 以及 Python.接下来,开始安装 PyDev 插件. 启动 Eclipse,利用 Ec ...

  9. set与map

    set /*set里面没有相同的元素 所以可以用于数组去重*/ //内部去重用的是=== 对象不等 但是 NaN等 //其本身是构造函数 let s=new Set([1,2,{},{},3,4,Na ...

  10. HandlerInterceptor拦截器使用总结

    简介 SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对请求进行拦截和处理. 常见应用场景 1.权限检查:如检测请求是否具有登录权限,如果没有直接返回到登陆页面. ...