CSS--position:relative和position:absolute
position:relative相对定位
1. 如何定位?
每个元素在页面的普通流中会“占有”一个位置,这个位置可以理解为默认值,而相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认位置。(在父级节点的content-box区定位,父级节点有文字的话,元素的默认位置则是紧随文字)
2. 不会改变行内元素的display属性。
3. 并没有脱离普通流,只是视觉上发生的偏移。
代码——

<body style='margin:0;padding:0;background:#BDD7EE;color:white;'>
<div class='contain' style='margin:10px;border:10px solid white;width:300px;background:#F8CBAD;padding:10px 0 0 10px;font-size:20px;font-weight:bold;'>
<div class='one' style='width:50px;height:50px;top:-10px;left:0px;'></div>
<div class='two' style='height:50px;color:#fff;'>position:relative定位测试</div>
</div>
</body>

显示——

给子元素one的style加上position:relative;后显示——

给父级元素contain的style加上文字后显示——

将one由div节点改为span节点,并加入文字“你好”之后显示——

<body style='margin:0;padding:0;background:#BDD7EE;color:white;'>
<div class='contain' style='margin:10px;border:10px solid white;width:300px;background:#F8CBAD;padding:10px 0 0 10px;font-size:20px;font-weight:bold;'>如果父级节点有文字的话...
<span class='one' style='width:50px;height:50px;position:relative;top:-10px;left:0px;'>你好</span>
<div class='two' style='height:50px;color:#fff;'>position:relative定位测试</div>
</div>
</body>


position:absolute绝对定位
1. 如何定位浮动?
设置了TRBL
相对最近的设定了position:relative/absolute的父(祖先)节点的padding-box的区进行定位(忽略文字),找不到符合条件的父(祖先)节点,则相对浏览器窗口进行定位。没有设置了TRBL
则默认浮动,默认浮动在父级节点的content-box区。
2. 不管是块级元素还是行内元素,应用了position:absolute之后,display为block:
可以设置width和height
没有设置的话,width默认为auto
3. 脱离文档流,容器(父)元素将得不到脱离普通流的子元素高度
代码——

<body style='margin:10px;width:300px;color:white;'>
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style=''>子元素</div>
</div>
</div>
</body>

显示----

给子元素的style加上position:absolute;top:0px;left:0px;后显示——

给子元素的style加上position:absolute;top:0px;后显示——

注释:应用了position:absolute之后之设置了top,所以子元素的top紧贴浏览器窗口的top(距离为0px),因为没有设置left,所以子元素左边就默认父级元素content-box区的左侧进行定位(没应用position:absolute之前左侧该在哪个位置就在那个位置)
给子元素的style加上position:absolute;后显示——

案例:理解应用了position:absolute的元素没有设置TRBL的话,则默认浮动在父级节点的content-box区
用一句通俗易懂的话来说就是,它该在哪个位置就在哪个位置,只不过不占位而已。
先理解下上面示例代码的显示图,以及给自己元素加上position:absolute后的显示图。

给子元素的样式加上:display:inline;我们看看如果子元素是内联元素的话会如何显示。

假如有两个同级块级元素,看看第一个子元素和第二个子元素分别应用position:absolute后的效果如何。
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style=''>子元素(上)</div>
<div style=''>子元素(下)</div>
</div>
</div>

如果这两个同级块级元素都应用了position:absolute;这两个元素会进行重叠,子元素(下)显示在前面,那是因为默认代码靠后的元素的z-index比较大。

上面的案例中,将第二个子级元素换为内联元素,子元素(下)的起点位置并没有改变。

试试给代码中的第一个元素的style加上display:inline;看看上面的子元素是内联元素的话会如何显示。
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style='display:inline;'>子元素(上)</div>
<div style=''>子元素(下)</div>
</div>
</div>

现在调换下应用position:absolute的位置
代码:
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style=''>子元素(上)</div>
<div style=''>子元素(下)</div>
</div>
</div>

第一个子元素是内联元素的话——
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style='display:inline;'>子元素(上)</div>
<div style=''>子元素(下)</div>
</div>
</div>

综上:不管是块级元素还是内联元素应用position:absolute并且不设置TRBL,它都会默认在父级元素的content-box区浮动。原来的起点位置也是应用绝对定位后的起点位置,只不过如果应用了position:absolute的内联元素左边也有内联元素的话,它的起点位置会变得更靠前,直到紧挨左边内联元素的边界。
综合案例:看看position:relative和position:absolute的综合效果
沿用position:absolute的案例代码——

<body style='margin:10px;width:300px;color:white;'>
<div style='padding-top:10px;'>祖先元素
<div style='border:10px solid white;padding-top:10px;'>父级元素
<div style=''>子元素</div>
</div>
</div>
</body>

在上面代码的基础上分别应用以下的定位后看看效果,并理解。

案例诊断:
给祖先div加上"position:relative;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

给父级div加上"position:relative;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

给祖先和父级div加上"position:relative;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

给祖先div加上"position:absolute;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

给父级div加上"position:absolute;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

给祖先和父级div加上"position:absolute;"以及给子元素加上
"position:absolute;top:0px;left:0px;"

我们看到,确实是消除了环绕浮动元素环绕的影响,position:absolute的优先级高,所以float元素被遮住了,并不是消失了。另外看到contain元素的高度不受子元素的影响了,因为它们都脱离文档流了。
参考颜色

应用:消除环绕浮动元素的影响
父级,position:relative(不设TRBL)
子级,第一个div的float:left;第二个div的position:absolute(不设TRBL)
因为第二个子级div元素默认会在父级元素的content-box区浮动,它可以消除上一个同级子级div元素的环绕浮动影响。
案例代码——
<div class='contain' style='margin:10px;width:300px;background:#F8CBAD;padding:10px 0 10px;color:white;'>
<div class='one' style='width:30px;height:30px;float:left;'></div>
<div class='two' style='color:#fff;'>position:absolute消除浮动环绕的影响测试</div>
</div>
显示--

给父级元素加上position:relative,给第二个子级元素加上position:absolute后,显示——

转自:https://segmentfault.com/a/1190000006924181
CSS--position:relative和position:absolute的更多相关文章
- 通过案例理解position:relative和position:absolute
w3school过了HTML的知识之后,觉得要自己单纯地去啃知识点有点枯燥,然后自己也很容易忘记,所以便找具体的网站练手便补上不懂的知识点.position:relative和postion:abso ...
- position:relative/static/fixed/absolute定位的区别以及使用场景
absolute是相对于自己最近的父元素来定位的,relative是相对于自己来定位的 relative 不脱离文档流,absolute 脱离文档流.也就是说:relative 的元素尽管表面上看到它 ...
- css的relative和position探究
在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...
- position:relative和position:absolute的差别及使用方法
这几天在做项目时遇到做选项卡的功能时,标题和内容区域的背景颜色不同.且须要选到当前标题时,此标题以下会出现下边框及小三角边框,这样就会超出标题背景颜色需覆盖以下内容区域.这时就须要用到potition ...
- css里面position:relative与position:absolute的区别
position:absolute这个是绝对定位:是相对于浏览器的定位.比如:position:absolute:left:20px;top:80px; 这个容器始终位于距离浏览器左20px,距离浏览 ...
- position: relative 和 position: absoution 的详解
position属性指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型 relative:生成相对定位的元素,相对于其正常位置进行定位. 对应下图的偏移 absolute: 生成绝对定位的元素 ...
- css中position:relative的真正理解
其实话说一直以来也没真正去理解好position:relative的用法的真实意义. 我想很多人实实在在用的多都是position:relative和position:absolute结合起来一起用的 ...
- 【CSS】position relative 用法
Relative是position的一个属性,是相对定位. position的默认值是static,(也就是说对于任意一个元素,如果没有定义它的position属性,那么它的position:stat ...
- 浅析CSS——元素重叠及position定位的z-index顺序
多次在项目中遇到html页面元素的非期待重叠错误,多数还是position定位情况下z-index的问题.其实每次解决类似问题思路大致都是一样的,说到底还是对z-index的理解比较模糊,可以解决问题 ...
随机推荐
- 月薪15k的测试员需要学习什么技术?
想了很久,决定还是要写一篇这样的文章出来,月薪15k的测试员需要学习什么技术?我觉得测试想要月薪15k并不难,只要做到我说的这几点肯定是可以的! 克服懒惰 我觉得,越是聪明的人越是觉得自己“懒惰”.大 ...
- Java学习笔记之——多态、抽象
1. 多态 多态:同一种事物调用同一个方法有不同的表现行为.(同一类型操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果) 应用场景;当你定义一个功能性的方法可以使用多态的概念 前提:子类继 ...
- Mac下写博客工具MarsEdit相关资料
参考资料: https://www.maoshu.cc/967.html 下载地址: https://www.red-sweater.com/marsedit/ 博客园的配置: http://www. ...
- WORLD 快速线
1,3个“-” 一条直线 2,3个“=” 一条双直线 3,3个“*” 一条虚线 4,3个“~” 一条波浪线 5, 3个“#” 一条隔行线
- JS对全角与半角的验证,相互转化以及介绍
1.什么是全角和半角? 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都 ...
- Salesforce 自定义标签在代码中的应用
自定义标签简介 Salesforce 中自定义标签(Custom Label)的作用是存储一般性的文本,可以用于 Apex.Visualforce 页面.Lightning 组件等地方,用于显示提示信 ...
- GIS开发之数据查询
在GIS开发之我们经常会用到属性查询和空间查询,特别是在数据量比较大的时候,如何提高查询效率成为一个问题 1.属性查询 对于属性查询,除了必要的建索引之外,我们还应该考虑使用字段缓存:减少查询字段,减 ...
- vertical-align属性探究
在前端开发中我们经常需要将元素垂直居中对齐,我们很自然的想到使用vertical-align属性,但是使用后却发现有时候能起作用,有时候却又不起作用.究其原因还是因为我们没有将vertical-ali ...
- Django 系统日志logging
Django使用Python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍Django中的日志系统. 日志配置包括四个部分 ...
- 日志记录模块logging
在python中,日志记录显示有两种方式,一种是保存在文件和打印屏幕上,一种保存在文件中. 第一种,直接保存在文件中. import logging #日志模块,方便记录日志 # 下面是配置日志记录格 ...