css position相对定位与绝对定位彻底搞懂
position 属性的值
static---默认值relative---相对定位absolute---绝对定位fixed---固定定位sticky---粘性定位(本文不讲这个)
position:static
- 该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。
- 此时
toprightbottomleft和z-index属性无效。
position:relative
- 该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。
- 注意:元素并未脱离文档流
.box {
width: 100px;
height: 100px;
background: lightgreen;
color: #000;
border: 1px solid #ccc;
}
#two {
position: relative;
top: 20px;
left: 20px;
background: lightcoral;
}
#outer {
margin: 0 auto;
width: 500px;
height: 500px;
border: 1px solid #000;
}
<div id="outer">
<div class="box" id="one">One</div>
<div class="box" id="two">Two</div>
<div class="box" id="three">Three</div>
<div class="box" id="four">Four</div>
</div>

我们在图中可以看到,two元素相对于自身原来的位置进行了调整,但并没有影响到其他元素。
发现一个问题:看下图


一开始的css中我们使用了top:20px和left:20px将two元素进行了调整,通过上图就会发现这两个20px并不属于盒子模型,他只是用定位将two元素进行了位置调整。
接下来我们在其他不改变的情况下将top:20px和left:20px 换为 margin-top: 20px和margin-left: 20px
#two {
position: relative;
/* top: 20px;
left: 20px; */
margin-top: 20px;
margin-left: 20px;
background: lightcoral;
}


与上面的使用top和left时我们发现有两点不同:
margin-top和margin-left的两个20px属于盒模型中的margin- 看蓝色框框标示的地方,
two元素强制将three元素向下撑了
position:absolute
- 绝对定位元素相对于最近的非
static祖先元素定位。当这样的祖先元素不存在时,则相对于 ICB(inital container block, 初始包含块(根元素所在的包含块))。 - 因为默认是
static所以一般我们使用绝对定位时给祖先元素(经常是父级元素)加上position:relative。 - 在布置文档流中其它元素时,绝对定位元素不占据空间。
- 绝对定位的元素则脱离了文档流。
什么是包含块?
- 包含块:包含块简单说就是定位参考框,或者定位坐标参考系,元素一旦定义了定位显示(相对、绝对、固定)都具有包含块性质,它所包含的定位元素都将以该包含块为坐标系进行定位和调整。
- 初始包含块:用户代理选择根元素作为包含块(称之为初始 containing block)。
.box {
background: lightgreen;
width: 100px;
height: 100px;
float: left;
color: white;
border: 1px solid #ccc;
}
#three {
position: absolute;
top: 20px;
left: 20px;
}
#outer {
position: relative;
margin: 0 auto;
width: 500px;
height: 500px;
border: 1px solid #000;
}
<div id="outer">
<div class="box" id="one">One</div>
<div class="box" id="two">Two</div>
<div class="box" id="three">Three</div>
<div class="box" id="four">Four</div>
</div>

我们给outer即one two three four 四个元素的父级元素加上了position:relative给three加了position: absolute并通过top: 20px left: 20px改变了它的位置,由效果图我们可以看到,three元素脱离了文档流(不占空间,不会影响其他元素),并相对于outer元素进行了位置调整。
position:fixed
- 固定定位与绝对定位相似,但元素的包含块为 viewport 视口(包含块由视口建立)。
- 常用于创建在滚动屏幕时仍固定在相同位置的元素。
#outer {
width: 200px;
height: auto;
margin: 0 auto;
}
#fix {
position: fixed;
top: 100px;
right: 0px;
width: 50px;
height: 100px;
background-color: aqua;
}
<div id="outer">
<p>《再别康桥》</p>
<p>作者: 徐志摩</p>
<p>轻轻的我走了, </p>
<p>正如我轻轻的来; </p>
<p>我轻轻的招手, </p>
<p>作别西天的云彩 </p>
<p>---</p>
<p>那河畔的金柳, </p>
<p>是夕阳中的新娘; </p>
<p>波光里的艳影, </p>
<p>在我的心头荡漾 </p>
<p>---</p>
<p>软泥上的青荇, </p>
<p>油油的在水底招摇;</p>
<p>在康河的柔波里, </p>
<p>我甘心做一条水草 </p>
<p>---</p>
<p>那榆荫下的一潭, </p>
<p>不是清泉,是天上虹; </p>
<p>揉碎在浮藻间, </p>
<p>沉淀着彩虹似的梦。 </p>
<p>---</p>
<p>寻梦?撑一支长篙,</p>
<p>向青草更青处漫溯;</p>
<p>满载一船星辉,</p>
<p>在星辉斑斓里放歌。</p>
<p>---</p>
<p>但我不能放歌, </p>
<p>悄悄是别离的笙箫; </p>
<p>夏虫也为我沉默, </p>
<p>沉默是今晚的康桥! </p>
<p>---</p>
<p>悄悄的我走了, </p>
<p>正如我悄悄的来; </p>
<p>我挥一挥衣袖, </p>
<p>不带走一片云彩。 </p>
</div>
<div id="fix"></div>

- 定位元素处于右上角,当浏览页面底部时,它相对于 viewport 视口仍处于同一位置。
- 我们只需要给要固定的元素加上
position: fixed在通过top或bottom和left或right调整位置就能实现固定元素的效果。
小技巧
- 给元素设置
position:fixed后再设置left:0和right: 0相当于给元素设置了width: 100%. - 有时给元素设置了
position:fixed后无法上下滚动, 同时给元素设置top 0 bottom 0解决.
css position相对定位与绝对定位彻底搞懂的更多相关文章
- 详解CSS的相对定位和绝对定位
CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...
- Web—12-详解CSS的相对定位和绝对定位
CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...
- 详解CSS的相对定位和绝对定位(讲得很详细)
详解CSS的相对定位和绝对定位 CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left ...
- css定位:相对定位、绝对定位、固定定位的区别与特性
css定位:相对定位.绝对定位.固定定位的区别与特性 原文地址:http://www.qingzhouquanzi.com/106.html css定位常用的有以下三种: 使用了定位的共同特性: 这三 ...
- css之position相对定位和绝对定位
一.position的四个值:static.relative.absolute.fixed. 绝对定位:absolute和fixed统称为绝对定位 相对定位:relative 默认值:static 二 ...
- CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位
其实前面的标准流和浮动流都很理解,就是定位不太好理解,特别是相对定位和绝对定位,很多刚开始学的同学不好区分.因此这里,小强老师和大家一起分享CSS定位的学习. 通过我们前面的学习,我们网页布局方法: ...
- CSS中相对定位与绝对定位
看了几个讲解定位的博客,觉得还不错,分享之: 博客一:http://blog.sina.com.cn/s/blog_4bcf4a5e010008o0.html 文章中,主要需要参考的有两点: 1,相对 ...
- CSS的相对定位和绝对定位(position)
什么是定位呢? 定位(position),故名思议,就是确定元素在页面中的位置. CSS的常用定位有两种,一种是相对定位,一种是绝对定位. 下面我们看例子 <html> <head& ...
- h5整理--详解css的相对定位和绝对定位
浏览器默认状态下position的属性默认值是static也就是没有定位,元素出现在正常的文档流中,这个时候给元素设置的left,right.bottom.top这些偏移属性是没有效果的,不会生效: ...
随机推荐
- Confluence 6 配置时间和日期格式
你可以修改你 Confluence 为用户显示的时期和时间格式.设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置 ...
- Confluence 6 订阅所应用的所有小工具
你可以从你的 Jira, Bamboo,FishEye 或 Crucible 站点中订阅所有的小工具到你的 Confluence 小工具目录中.用户可以为他们的页面查找和选择小工具. 希望订阅其他站点 ...
- Confluence 6 CSS 编辑技巧
开始编辑空间样式表 一个空间的样式表是你开始对 CSS 进行自定义编辑的好的开始.在空间样式表中,包含了你所有可以进行修改的元素.当你对空间样式表进行编辑的时候,空间样式表的修改只会对你修改的空间有效 ...
- python用unittest+HTMLTestRunner的框架测试并生成测试报告
直接贴代码: import unittestfrom selenium import webdriverfrom time import sleepimport osimport time # 定义打 ...
- LeetCode(118):杨辉三角
Easy! 题目描述: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1] ...
- LeetCode(93): 复原IP地址
Medium! 题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255. ...
- swoole 使用异步redis的前置条件
redis安装 官网下载redis 下载完成之后解压: 进入redis目录执行make: 进入src目录启动redis 启动成功如下: 启动后连接redis 编译安装hiredis 下载:https: ...
- php回调函数的概念及实例
php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持.这两个函数的区别是call_user_func_array是以数组的形式接收 ...
- laravel 实现一个简单的 RESTful API
创建一个 Article 资源 php artisan make:resource Article 你可以在 app/Http/Resources 目录下看到你刚刚生成的 Article 资源 当然我 ...
- 20165314 2016-2017-2 《Java程序设计》第8周学习总结
20165314 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 java中的线程 线程的常用方法 GUI线程 多线程的概念 代码托管