css关于定位那些事情

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同样脱离了文档流文章转自:http://www.cnblogs.com/tim-li/archive/2012/07/09/2582618.html
时间: 2024-08-27 00:22:07

css关于定位那些事情的相关文章

CSS中定位机制的想法

对于一个刚刚接触css的新手而言,CSS的定位机制可能是最让人头疼的一件事情了, 接下来我们了解一下CSS的定位机制. position:static | relative | absolute | fixed 适用于:除 <' display '> 属性定义为「table-column-group | table-column」之外的所有元素. 继承性:无. 归类总结一下定位的四种属性特点: 绝对定位: 1:单独标签设置定位的时候,以浏览器左上角为基准设置定位的. 2:盒子嵌套的时候,如果父

CSS:CSS Positioning(定位)

ylbtech-CSS:CSS Positioning(定位) 1.返回顶部 1. CSS Positioning(定位) position 属性指定了元素的定位类型. position 属性的四个值: static relative fixed absolute 元素可以使用的顶部,底部,左侧和右侧属性定位.然而,这些属性无法工作,除非是先设定position属性.他们也有不同的工作方式,这取决于定位方法. static 定位 HTML元素的默认值,即没有定位,元素出现在正常的流中. 静态定位

css position定位

CSS Position(定位) position 属性指定了元素的定位类型.直线模组价格 position 属性的五个值: static relative fixed absolute sticky 元素可以使用的顶部,底部,左侧和右侧属性定位.然而,这些属性无法工作,除非是先设定position属性.他们也有不同的工作方式,这取决于定位方法. static 定位 HTML 元素的默认值,即没有定位,遵循正常的文档流对象. 静态定位的元素不会受到 top, bottom, left, righ

CSS Positioning(定位)

CSS Positioning(定位) position 属性指定了元素的定位类型. position 属性的四个值: static relative fixed absolute 元素可以使用的顶部,底部,左侧和右侧属性定位.然而,这些属性无法工作,除非是先设定position属性.他们也有不同的工作方式,这取决于定位方法. static 定位 HTML元素的默认值,即没有定位,元素出现在正常的流中. 静态定位的元素不会受到 top, bottom, left, right影响. fixed

css元素定位样式

曾经写网页,学css整体上不难,但就是元素定位,始终一知半解,直到今天,本着实践出真知的理念,经过认真测试,总结出了如下结论. css 定位: positionstatic : 默认静止定位,元素在正常的文档流中无法移动定位.absolute :独立元素,元素从文档流中脱离,会相对于父层(static定位的父层除外)移动定位.relative : 相对定位,相对本身的位置移动定位,效果等同于相对于父层移动定位.fixed: 固定定位,相对于窗口移动定位.注:1.移动定位是指通过 top,bott

《精通CSS》定位

定位部分包含了两个模型:视觉格式化模型和定位模型.理解这两个模型的细微差异是非常重要的,因为它们一起控制着如何在页面上布置每个元素. /**********视觉格式化模型***************/ p.h1.div等元素常常被称为块级元素,与此相反,strong和span等元素称为行内元素.块级元素显示为一块内容,即"块框",它们显示为一块内容.行内元素显示在一行上. display属性可以改变元素的显示类型,通过将display设置为block,可以让行内元素表现的像块级元素一

css的定位

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"

CSS Positioning(定位)与Float(浮动)

一.CSS Positioning(定位) 1.Positioning(定位) CSS定位属性允许你为一个元素定位.它也可以将一个元素放在另一个元素后面,并指定一个元素的内容太大时,应该发生什么.元素可以使用的顶部,底部,左侧和右侧属性定位.然而,这些属性无法工作,除非是先设定position属性.他们也有不同的工作方式,这取决于定位方法.有四种不同的定位方法. 2.Static 定位 HTML元素的默认值,即没有定位,元素出现在正常的流中.静态定位的元素不会受到top, bottom, lef

CSS Sprite定位实现

何为CSS Sprite 通常我们把它叫做CSS图像拼合技术,当然还有人把CSS Sprites叫做"CSS贴图定位". 原理 CSS Sprites 原理:其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的"background-image","background- repeat","background-position"的组合进行背景定位,background-position可以用数字精确的定位出背景图