秒懂相对定位与绝对定位,【组合拳relative,absolute】 瞬间清醒有木有?

上文:组合拳

层级关系为:

<div ——————————— position:relative; 不是最近的祖先定位元素,不是参照物

<div—————————-没有设置为定位元素,不是参照物

<div———————- position:relative 参照物

<div box1

<div box2 ——–position:absolute; top:50px; left:120px;

<div box3

效果图:

为改变参照物(橘色框)后的效果

层级关系为:

<div ——————————— position:relative;最近的祖先定位元素,参照物

<div—————————-没有设置为定位元素,不是参照物

<div———————-没有设置为定位元素,不是参照物

<div box1

<div box2 ——–position:absolute; top:50px; left:120px;

<div box3

效果图:

参照物为最顶级的元素情况。

层级关系为:

<div ———————————没有设置为定位元素,不是参照物

<div—————————-没有设置为定位元素,不是参照物

<div———————-没有设置为定位元素,不是参照物

<div box1

<div box2 ——–position:absolute; top:50px; left:120px;

<div box3

效果图:

仅使用margin属性布局绝对定位元素的情况

此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。

图9中,使用margin属性布局相对定位元素。

层级关系为:

<div ——————————— position:relative; 不是参照物

<div—————————-没有设置为定位元素,不是参照物

<div———————-没有设置为定位元素,不是参照物

<div box1

<div box2 ——–position:absolute; margin-top:50px; margin-left:120px;

<div box3

效果图:

IE6的情况下,box2前面没有兄弟节点,则margin-left的值会出现双倍边距,见图10。

层级关系为:

<div ——————————— position:relative; 不是参照物

<div—————————-没有设置为定位元素,不是参照物

<div———————-没有设置为定位元素,不是参照物

<div box1

<div box2 ——–position:absolute; margin-top:50px; margin-left:60px;

<div box3

效果图:

下文:基础理解

CSS的相对定位和绝对定位

通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的,不会生效,比如你设置一个距离左边距偏移100px的声明:left:100px
那么这条声明不会起到任何效果。还有z-index属性在这时也不会生效。

也就是说我们平时如果不给某元素一个position属性的声明,那么它默认的就是我上述的这种情况,不过因为有了浮动,所以通常情况下我们还真不需要给元素设置position属性!

但是某些特殊的情况下,我们不得不用到position属性,那我们今天就讲讲position属性的relative和absolute值

首先说relative ,相对定位。

怎么理解呢?如果说我对某元素设置了相对定位,那么首先这个元素他会跟其它的元素一样,出现在文档流中它该出现的位置,然后,我们可以设置它的水平或垂直偏移量,让这个元素相对于它在文档流中的位置的起始点进行移动。有一点要注意, 在使用相对定位时,就算元素被偏移了,但是他仍然占据着它没偏移前的空间。这里值得注意的一点是:偏移可不是边距,跟边距是不一样的。

我们先看看下图:

上图中有三个浮动的块,第二个块是设置了相对定位position:relative了的,这时大家看到它的位置并没有其它什么不同,跟其它两个块一样都处在正常的文档流中。

接下来我给那个设置了position:relative的块设置一个偏移:left:50px ; top:30px 这时我们再看看效果:

这时我们发现第二个块针对它本身位置的起始点进行了一个偏移,但是它原来所占据的那个位置空间依然还在(虚线框标示的地方),即使我们把偏移量设置得再大一点,使它完全离开原来的位置,它原来位于文档流中的位置仍然会存在,不会被第三个块浮动过来填补掉。

同时,它的偏移也不会把别的块从文档流中原来的位置挤开,如果有重叠的地方它会重叠在其它文档流元素之上,而不是把它们挤开,就像图中那样,它已经覆盖在了第三个块之上。

我们可以设置它的z-index属性来调整它的堆叠顺序。

接下来我们来看看绝对定位:position:absolute

被设置了绝对定位的元素,在文档流中是不占据空间的,如果某元素设置了绝对定位,那么它在文档流中的位置会被删除,那这个元素到哪去了呢?它浮了起来,其实设置了相对定位relative时也会让该 元素浮起来,但它们的不同点在于,相对对定位不会删除它本身在文档流中占据的那块空间,而绝对定位则会删除掉该元素在文档流中的位置,完全从文档流中抽了出来,我们可以通过z-index来设置它们的堆叠顺序

那么绝对定位是如何定位的呢?首先,如果它的父元素设置了除static之外的定位,比如position:relative,或者position:absolute以及position:fixed,那么它就会相对于它的父元素来定位,位置通过left , top ,right ,bottom属性来规定,如果它的父元素没有设置定位,那么就得看它父元素的父元素是否有设置定位
,如果还是没有就继续向更高层的祖先元素类推,总之它的定位就是相对于设置了除static定位之外的定位(比如position:relative)的第一个祖先元素,如果所有的祖先元素都没有以上三种定位中的其中一种定位,那么它就会相对于文档body来定位(并非窗口,相对于窗口定位的是fixed)

绝对定位的元素相对于谁来定位,我们就把这个"谁"叫着参照物,我们结合上面的讲解来看看下图就明白了 :

我们看一下在浏览器里的效果,我们先看看没有使用绝对定位时的样子:

然后我们给第二个块设置绝对定位:position:absolute 然后再设置一个偏移:left:150px;top:40px; 这时就变成了下图所示:

好了,既然理解了相对定位和绝对定位,那我们应该怎么把它们运用到实际案例中呢?

首先我们来看看下图:

在上图中的去购物车结算按钮左上方有一个红色的小块,用来显示购物车中有几件商品,大家在没学会绝对定位之前可能不知道这个红色的小块要怎么实现,但是现在刚刚学了绝对定位,这个问题就不再是问题了。

我还是亲自来做一下吧,我们先把这个背景图片弄出来:

然后我们写HTML:

<div class="cart_btn">

<span><i>155</i></span>

<a href="dd.html" target="_blank">去购物车结算</a>

<b></b>

</div>

上面HTML代码中的 span元素就是那个用来显示购物车中商品数量的小红块,a元素中是文字描述,b元素是最右边的小三角。

我们来看一下CSS代码:

.cart_btn{width:120px;height:30px;background:url(../images/picA.png) no-repeat -17px 7px#f7f7f7;border:1px solid #eee;padding-left:30px;position:relative;_padding-top:5px;_height:25px;}

.cart_btn span{background:url(../images/picA.png) no-repeat -36px -54px;padding-left:7px;position:absolute; top:-12px;left:20px;}

.cart_btn span i{float:left;height:20px;background:url(../images/picA.png) no-repeat right-25px;padding-right:5px;font-style:normal;color:#fff;font-size:14px;}

.cart_btn a{color:#aaa;text-decoration:none;font-size:14px;padding-left:15px;line-height:30px;}

.cart_btn b{display:inline-block;border-color:transparent transparent transparent #CCCCCC;border-style:dashed dashed dashed solid;border-width:5px;height: 0;overflow: hidden;width: 0;}

上面CSS代码中我们把购物车图标作为.cart_btn的背景,这里我们发现一个问题,就是那一张图片上有三个图标,大家也发现了,我三个用到图标的元素都是用这一张图片做背景,但是显示的却不一样,这里就用到了我们前面讲过的背景定位问题,不会的朋友可认去看看前面的第十一讲:css背景属性background详细讲解-使用背景图片

CSS中的内容是什么意思这里就不讲了,要讲的话就跑题了,这些都是基本的东西,除了那个CSS三角形之外,其它的如果都还不会,那你肯定没有好好看前面的文章。再说你实在不懂的话也可以去查一查参考手册

最后我们来看看浏览器里的效果:

时间: 2024-10-11 16:17:10

秒懂相对定位与绝对定位,【组合拳relative,absolute】 瞬间清醒有木有?的相关文章

CSS定位:相对定位、绝对定位和固定定位(relative absolute fixed)

相对定位:position:relative; 不脱离文档流,参考自身静态位置通过top,bottom,left,right定位,并且可通过z-index进行层次分级. 绝对定位:position:absolute; 脱离文档流,通过top,bottom,left,right定位,选取其最近的父级元素进行定位,当父级元素position为static时,absolute元素将以body坐标原点进行定位,可通过x-index层次分级. 固定定位:position:fixed; 这里他所固定的对象是

【CSS3】---position之absolute绝对定位和relative相对定位

”最近被absolute和relative弄的不知所措,不知道怎么用了,网上查找文章总结总结,对与错欢迎指正, 也欢迎您加入IT交流群:123493055大家一起交流>>>>>“ Absolute,CSS中的写法是:position:absolute; 他的意思是绝对定位,他是参照浏览器的左上角,配合TOP.RIGHT.BOTTOM.LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始点为原始点.如果设定TRBL并且父级没有设定position属性

div+css相对定位和绝对定位

今天突然发现自己在布局的时候思路很乱,于是毅然决然的想要重新的理一下自己的布局思路,今天就先从定位开始吧~ 绝对定位(absolute):将被赋予此定位方法的对象从文档流中拖出,如果对象的父级没有设置定位属性,则依据body对象左上角作为参考进行定位.绝对定位对象可层叠,层叠顺序可通过z-index属性控制,z-index值为无单位的整数,大的在最上面,可以有负值(目前负值FF不支持). 同时z-index仅能在定位元素上奏效!!! 相对定位(relative):对象不可层叠,依据left,ri

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

其实前面的标准流和浮动流都很理解,就是定位不太好理解,特别是相对定位和绝对定位,很多刚开始学的同学不好区分.因此这里,小强老师和大家一起分享CSS定位的学习. 通过我们前面的学习,我们网页布局方法: 1. 标准流   (最稳定) 2. 浮动流   (float 其次) 3. 定位流    ( 稳定性最后) 定位是完全脱离标准流的一种布局方式. 其实前面的标准流和浮动流都很理解,就是定位不太好理解,特别是相对定位和绝对定位,很多刚开始学的同学不好区分.因此这里,小强老师和大家一起分享CSS定位的学

CSS定位(CSS定位概述、相对定位、绝对定位、浮动)

CSS 定位属性 CSS 定位属性允许你对元素进行定位. 属性 描述 position 把元素放置到一个静态的.相对的.绝对的.或固定的位置中. top 定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移. right 定义了定位元素右外边距边界与其包含块右边界之间的偏移. bottom 定义了定位元素下外边距边界与其包含块下边界之间的偏移. left 定义了定位元素左外边距边界与其包含块左边界之间的偏移. overflow 设置当元素的内容溢出其区域时发生的事情. clip 设置元素的

webbasic之相对定位、绝对定位、固定定位

1.相对定位 -以自己为目标 -较小的偏移 -不脱离队伍(流)//位置不会释放   position:relative   left:值   right:值 <!doctype html> <html>   <head>      <meta charset="utf-8"/>      <title>照片墙</title>      <style>         /*先刷墙*/         bo

CSS position relative absolute fixed

position属性absolute与relative 详解 最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记. 一.解读absolute与relative 很多朋友问过我absolute与relative怎么区分,怎么用?我们都知道absolute是绝对定位,relative是相对定位,但是这个绝对与相对是什么意思呢?绝对是什么地方的绝对,相对又是相对于什么地方而言的呢?那他们又有什么样的

相对定位 and 绝对定位 and 固定定位

CSS盒子定位有三种 相对定位 position: relative;   绝对定位 position: absolute;   固定定位 position: fixed; 相对定位 position: relative;

相对定位和绝对定位 left和margin-left

1.直接在css中设置left生效的前提是必须设置父容器position:absolute或relative,如果不设置则会显示为最近一个定位的父对象左边相关的位置, margin-left则只会出现在父对象的左边的相对位置,不考虑是否设置了position . 2,通常情况下,我们元素的position属性的值默认为static 就是没有定位,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的,z-index属性这时也不会有效. 3,对某元素设置了相