`
zha_zi
  • 浏览: 585396 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

绝对定位,相对定位和文档流的关系

 
阅读更多

css绝对定位、相对定位和文档流的那些事

前言

    接触html、和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料的问题,虽然花费一定时间能够解决,但总不是个事,所以今天特地探索了下css+div的绝对定位和相对定位和文档流的关系。

 

文档流的概念

    确切的说应该是文档文档流模型的机制,html的布局机制就是用文档流模型的,即块元素(block)独占一行,内联元素(inline)。不独占一行

 

如块级元素(block)

<div>div1</div>
<div>div2</div>

效果如下

 

ok,那么怎么知道这不是因为没有设置高和宽的样式而出现的情况呢,我们听邓爷爷的话,实践是检验真理的唯一标准

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px;">div2</div>

效果如下:额,没坑你吧...

 

又如内联元素(inline)

<img src="Image/close.gif" alt="图片" style=" height:100px; width:100px;"/>
<a href="http:">超链接1</a>
<a href="http:">超链接2</a>

效果如下:可以看到内联元素后跟内联元素不会另起一行

 

我们再试下inline 后加 block

<img src="Image/close.gif" alt="图片" style=" height:100px; width:100px;"/>
<a href="http:">超链接1</a>
<a href="http:">超链接2</a>
<div style=" width:100px; height:100px;">div1</div>

效果如下:可以看到div1(block)是另起一行独占的

 

相对定位 position:relative

    故名思意,相对定位就应该是相对于一个东西来定位,而这个东西是什么呢?其实这个东西不是什么,就是元素自己本身,用left right top b0ttom进行定位后,元素会根据原来的位置进行移动,但由于position:relative这个属性并没有脱离文档流的,所以元素本身所占的位置会保留。

下面来做个实验,一看你就懂了- -

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px;">div2</div>
<div style=" width:100px; height:100px;">div3</div>

效果如下:这是没有加入position:relative文档流的默认排法

 

我们给div2加position:relative 并用top:-20px;left:50px进行相对移动

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px; position:relative; top:-20px; left:50px;">div2</div>
<div style=" width:100px; height:100px;">div3</div>

效果如下:额,为了给大家看到效果还有省了ps的劲直接截了ide的图...但我保证在浏览器里他也是这么排的。我们可以看到蓝色边框就是div2原来的位置,黑色边框就是通过position:relative相对于原来的位置左移50px; 上移20px得到的,而且我们看以看到,div3并没有因为div2的上移而上移了,原因就是position:relative这个属性是没有脱离文档流的,所以元素本身所占的位置会保留。

绝对定位 position:absolute

    好吧终于有点戏肉了,文档流那复杂的玩意我们先不理,所谓绝对定位,其实也要找个东西来相对来绝对的,而这个东西就是元素的第一个有position,且positon不能为static的祖先元素,是不是有点拗口,换个说法吧,就是这个小鬼(element)的定位可以是他的老爸,他的爷爷,他的太公....(祖先要素)中而且第一个是是有钱的(position:absolute)或者是当官的(position:relative),就是不能是个程序猿(position:static 或者没有设position)的。而且值得注意的是position:absolute这个属性是脱离文档流的,所以重新定位后元素是不会占着原来的位置的

还是跟着程序来吧- -

复制代码
  <div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px"">
    红色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px"">
        绿色:爷爷
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; ">
            黄色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>
复制代码

效果如下:首先给div1 div2 div3三个祖先div 黄色的老爸, 绿色的爷爷, 红色的太公,暂时对他们都不设position属性

 

好吧,现在给老爸div设position:relative(哟!当官的)给div2设position:absolute;left:120px; top:100px;

复制代码
    <div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px"">
    红色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px"">
        绿色:爷爷
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; position:relative;">
            黄色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>
复制代码

效果如下:可以从蓝色线看出,div2以黄色(ide的蓝线和黄色混在一起变色了)div为参照距离老爸左边120px 上边100px而且有于position:absolute是脱离文档流的所以div2原来的位置不能保留div3向上填充

 

 我们再用他爷爷来试试

复制代码
<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px">
    红色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px; position:relative;">
        绿色:爷爷
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; ">
            黄色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>
复制代码

效果如下:还是div2还是 position:absolute;left:120px;top:100px,可以冲蓝色线看出这次是以绿色爷爷为参照物做绝对定位的,而且div2同样脱离了文档流

至于他太公,一把年纪了,我们就放过他吧- -

分享到:
评论

相关推荐

    HTML5&CSS3网页制作:相对定位.pptx

    相对定位 相对定位 01 元素的定位 定位 属性 相对 定位 绝对 定位 固定 定位 静态 定位 描述 在CSS中,通过定位属性可以实现网页中元素的精确定位,元素的定位属性主要包括定位模式和边偏移两部分。 相对定位 描述 ...

    css教程之绝对定位使用详解

    如果说相对定位没有脱离文档流,相对于对象本身进行偏移有点拖泥带水的话,那么绝对定位绝对是快刀斩乱麻,因为绝对定位可以使一个对象脱离正常的文档流,好像是漂浮在正常文档流的上空,并相对于包含此对象的元素...

    css 中的定位详解

    相对定位可以相对于元素在文档流中的静态位置,给元素指定一个位置。如果将一个元素设置为相对定位,但是没有为 top、right、bottom、left 等属性设置值,那么元素将保持在文档流中的相同位置,就像使用的是静态定位...

    css 相对定位 绝对定位 浮动 分析

    CSS 相对定位 相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。 如果将 top 设置为 20px,...

    css定位学习小结.md

    属性:position 作用:检索或者设置元素的定位方式(改变元素位置的属性) *定位分为静态定位,绝对定位,相对定位,固定定位,粘性定位* (1)static 静态定位: ... c : 绝对定位,脱离文档流、不占据空间

    相对、绝对和固定定位的比较

    一、相对定位(relative) 首先,说一个文档流的概念,有时候也叫做文本流。“流”表示连续不断的意思,比如“流媒体”,这里的文档(文本)流指的是源程序里面的代码,也就是html里面 的标签。 测试代码: 复制...

    HTML5&CSS3网页制作:固定定位.pptx

    在文档流中的位置没被保存 /*设置绝对定位*/ position: fixed; right: 0px; bottom: 0px; 总结 02 熟知元素的固定定位以浏览器窗口作为参照物来定义网页元素。 熟知掌握固定定位的语法格式能熟练运用 总结 THANKS

    前端面试题.md

    ##绝对定位和相对定位 ###绝对定位(absolute) 如果想为元素设置层模型中的绝对定位,需要设置position:absolute;,这条语句的作用将元素从文档流中拖出来,将不占用原来元素的空间,然后使用left、right、top、...

    Web前端基础day04.zip

    1. 静态定位(文档流定位):是元素的默认定位方式 2. 相对定位 3. 绝对定位 4. 固定定位 5. 浮动定位

    CSS中position定位的个熟悉示例介绍

    position属性有4个值: ...fixed未支持。对象定位遵从绝对(absolute)方式。但是要遵守一些规范 absolute绝对定位(相对于最近的父元素,假如父元素都是默认的static,...relative不脱离文档流,而absolute脱离文档流。

    Web前端开发基础:CSS网站布局 .ppt

    --*-- 1 单元目标 2 教学内容 3 动手实践 4 ... 因为绝对定位的框与文档流无关,所以它们可以覆盖页面上的其他元素并可以通过z-index来控制它层级次序。z-index的值越高,它显示的越在上层。 教学内容 z-index : numbe

    css中的三种基本定位机制

    3.绝对定位相对于已定位的最近的祖先元素,绝对定位脱离普通流 4.固定定位是相对于浏览器窗口的定位 5.浮动的元素可以左右移动,直到他的外边框边缘碰到包含自己的框或者另一个浮动框的边缘 6.浮动的元素脱离普通...

    有关绝对定位的全面理解

    &lt;!...&lt;head&gt;&lt;meta charset=UTF-8&gt;&lt;title&gt;有关绝对定位的理解&lt;.../* 1.未被设置定位之前是大盒子包裹... 绝对定位使元素的位置与文档流无关,因此不占据空间。 这一点与相对定位不同,相对定位实际上

    CSS中Position四个属性的使用介绍

    relative:相对定位,对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。 absolute:绝对定位,对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠...

    css关于position属性的用法详解(绝对定位和相对定位的混淆)

    挺久没用,有点忘了关于position这个属性的用法,导致在练手的时候...元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好

    css中定位中的absolute和relative是什么意思

    absolute是指绝对定位,即将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位,而其层叠通过z-index属性定义。此时对象不具有边距,但仍有补白和边框。 ralative是指相对定位,就是依据left,...

    css定位position引发的层级关系问题详解

    absolue:绝对定位,用top,bottom,left和right根据有定位的父级元素进行定位,如果无则相对body元素即整个页面文档进行定位。 relative:相对定位,相对自己原来的位置进行定位 fixed:绝对定位,相对浏览器窗口...

    css position定位属性_动力节点Java学院整理

    ①absolute :绝对定位;脱离文档流的布局,遗留下来的空间由后面的元素填充。定位的起始位置为最近的父元素(postion不为static),否则为Body文档本身。 ②relative :相对定位;不脱离文档流的布局,只改变自身的...

    css解决浮动导致父元素高度坍塌的几种方法

    相对定位 绝对定位 ①普通流定位 又称为默认文档流定位 1.每个元素在页面上都有自己的空间 2.每个元素都是从父元素的左上角开始渲染(显示) 3.块级元素按照从上到下逐个排列,每个元素单独成行 4.行内元素是多个...

    css的三种定位方式使用探讨

    css 3种类型定位方式,进行控制页面布局:普通定位,浮动定位,绝对定位。 默认使用普通流技术再页面中布局元素,希望表现与普通流不同,... 相对定位是“相对于”元素在文档中的初始位置 */ position: relative; top:

Global site tag (gtag.js) - Google Analytics