我受不了了!给新手们发个实在的关于相对定位跟绝对定位的问题!
时间:2009-10-23
来源:互联网
默认定位方式
元素默认的定位方式是static 。
绝对定位与相对定位的原理
绝对定位与相对定位的原理基本相似。元素参照某一容器,根据其top、left等相对于参照容器定位,再根据margin值收缩容器。
绝对定位
如果不给绝对定位元素的父容器设置绝对或相对定位,绝对定位的元素对窗口边缘产生一个间距,其值等于其top、right、bottom、left值。Left:10px可以理解成距离父容器左边框10px,bottom:10px可以理解成距离父容器底边10px。之后根据绝对定位元素的margin值对其进行扩充或收缩。Margin-left:-10px会使其左边向外扩充10px,Margin-left:10px则会使其左边向内收缩10px,其他的类似。 但是,给绝对定位元素的父容器设置绝对或相对定位后,绝对定位的元素的参照点会发生变化,变成父容器。
如果不设置绝对定位元素的宽度或高度,为绝对定位元素设置的left、right或top、bottom都有效,一旦设置了宽度或高度,则只有left或top有效。
具体如下:
1、不给父容器设置相对/绝对定位属性:
提示:您可以先修改部分代码再运行
提示:您可以先修改部分代码再运行
提示:您可以先修改部分代码再运行
相对定位可以这么理解,虚拟出一个div(其大小由相对定位的元素决定),然后将相对元素悬浮在虚拟的div上并根据top、left、right、bottom相对于虚拟出的div偏移,之后根据margin值对虚拟出来的div进行扩充或者收缩并根据扩充、收缩值调整相对定位的元素。
相对定位不能象绝对定位那样不设置高、宽而根据top、right、bottom、left来控制其相对父层容器来设置其大小。给相对定位的元素同时设置了left、right或top、bottom时,只有left或top生效。比如:
提示:您可以先修改部分代码再运行
如果给1加margin,比如:margin-top:20px,则会将虚拟出来的div顶部扩充20px的效果。
提示:您可以先修改部分代码再运行
1、绝对定位跟相对定位最大的区别是相对定位会在父层容器中产生一个虚拟的div占位区。
2、可以通过设置父容器的定位属性来改变绝对定位元素的参照容器,但是不可通过该方法改变相对元素的参照容器。
3、可以不设置绝对定位元素的高、宽仅依照top等属性控制绝对定位元素的大小,但是该方法对相对定位无效。相对定位的元素,高度、宽度都是固定的,不可修改。
4、绝对定位元素会按margin值来扩充或收缩自身,而相对定位收缩的是虚拟出的div占位区。
刚刚看了以为仁兄说:不能用定位来解决布局问题,不知道大家看了上面那些后,有什么想法?
[ 本帖最后由 stubend 于 2009-10-23 20:00 编辑 ]
作者: stubend 发布时间: 2009-10-23
哈哈。。
作者: stubend 发布时间: 2009-10-23
作者: 泥巴巴 发布时间: 2009-10-23
作者: zhitaige 发布时间: 2009-10-24
对于这一句,在下觉得描述过少,容易导致误解,或是本身要表达的意思就是会导致误解,在不设置元素的宽度和高度时,设置绝对定位元素的left,right,top,bottom属性时会将元素的上下左右都延展至指定位置,而设置了宽度和高度以后,left和right属性可以理解为有冲突,而top和bottom属性也是,这时就是相应冲突的属性谁的解析优先级高,就择取谁设置的值(文档解析式从上到下,从左到右的,这意味着有冲突的属性,在后边的优先级更高一些)。
而关于不能用定位来解决布局问题,我想意思应该是不要依赖使用定位来解决布局问题,虽然是很方便,可以快速的解决某些紧急情况,但保持良好的文档结构习惯才是重要的
凡事都没有绝对,不然就太没意思了,你喜欢用手机发短信的方式和朋友聊天,他喜欢用打电话的方式聊天,都是和朋友聊天,而且短信和通话都是手机的功能,爱怎么用都是自己的事,自己觉得合理就行
作者: hebin0432 发布时间: 2010-06-30
作者: HiShop6001 发布时间: 2010-06-30
这话说的我很震惊啊,你是新手还是经验主义者?

作者: xmlovedoudou 发布时间: 2010-06-30
下面是以前所回的一个帖子:
position:absolute;是绝对定位的意思(我说废话了),既然是定位,那么肯定需要一个参考点。
absolute默认会以离它最近的祖父级元素且已定义了 position:realtive|absolute|fixed;的元素来作为参考点,它会一直往上找,如果都没有,就会以浏览器工作区域左上角为参考点(注意不是body,也不是html)。
运行下面的代码,尝试给html或者body设置position:relative;,或许就明白了。
提示:您可以先修改部分代码再运行
作者: yoom 发布时间: 2010-06-30
作者: j7761038 发布时间: 2010-09-17

这让我想起了 文档流 浮动流。
作者: benxiongya 发布时间: 2010-09-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28