zoukankan      html  css  js  c++  java
  • 三种定位体系简介

    ( box )布局影响因素之一,便是定位体系。定位体系也是其最为重要的影响因素。

    CSS2.1 中,一个框可以根据三种定位体系布局。CSS2.1 中的定位体系帮助作者使他们的文档更容易理解,并不需要使用标记的手段(如,不可见的图片)达到布局的效果。

    常规流( Normal flow )

    常规流,是对 "normal flow" 的直译。

    之称之为常规流,是因为这是相对于后面的浮动和绝对定位的一个概念,浮动和绝对定位元素都脱离了当前的常规流。

    在 CSS2.1中,常规流包括块框( block boxes )的块格式化( block formatting ), 行内框( inline boxes )的行内格式化( inline formatting ),块框或行内框的相对定位,以及插入框的定位。

    浮动( Floats )

    浮动,顾名思义,相对于常规流来讲,它漂浮在常规流的上方。

    在浮动模型中,一个框( box )首先根据常规流布局,再将它从流中取出并尽可能地向左或向右偏移。内容可以沿浮动区的侧面排列。 因为它首先要根据常规布局后才偏移,所以效率较常规流低。

    用 'float' 特性声明浮动,特性值可以是:"none"、"left"、"right"。

    绝对定位( Absolute positioning )

    在绝对定位模型中,一个框整个地从常规流中脱离(它对后续的兄弟元素没有影响),并根据它的包含块来分配其位置。

    static

    该框是一个常规框,布局根据常规流。'left' 、'right'、'bottom' 和 'top' 属性不适用。

    relative

    框的位置根据常规流计算(被称为常规流中的位置)。然后框相对于它的常规位置而偏移。如果框 B 是相对定位的,其后框的定位计算并不考虑 B 的偏移。 table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, 和 table-caption 元素的 'position:relative' 效果没有被定义。

    absolute

    框的位置(可能还有它的尺寸)是由'left','right','top'和'bottom'特性决定。这些特性指定了框相对于它包含块的偏移量。 绝对定位的框从常规流向中脱离。这意味着它们对其后的兄弟元素的定位没有影响。另外,尽管绝对定位框有外边距(margin), 它们不会和其它任何外边距发生折叠(Collapsing margins)。

    fixed

    框位置的计算根据 'absolute' 模型,不过框要额外地根据一些参考而得到固定。跟绝对定位一样,固定定位元素的外边距不会和任何其他外边距发生折叠。 应用于手持终端、投影设备、屏幕、TTY、电视媒体类型时,框相对于可视窗口固定,滚动时不移动。应用于打印媒介类型时,框被渲染于每一页, 并相对于页框固定,就好象是通过可视窗口查看该页一样(例如,打印预览)。对于其他的媒介类型,表现没有被定义。

    总结:

    absolute和fixed优先级最高,有它存在时,浮动起不了作用。

    Display的值是none

             如果display的值是none,那么position和float不起作用,在这种情况下,元素不产生框,因此浮动和定位无效。

    Position的值是absolution或fixed

             如果position的值是absolution或fixed,框就是绝对定位的,float计算后的值应该是none,并且,display会被按照表设置,框的位置将有top、right、bottom和left属性和该框的包含确定。

    'float' 的值不是 "none"

    如果 'float' 的值不是 "none",该框浮动并且 'display' 会被按照转换对应表设置。

    元素是根元素

    如果元素是根元素,'display' 的值按照转换对应表设置。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"> 
    <title>position的理解</title>
    </head>
    <style type="text/css">
    #box,#box1,#box2{width:300px;border:2px solid black;text-align: center;color:#fff;}
    #A,#A1,#A2{background-color:red;height:50px;}
    #B,#B1,#B2{background-color:green;height:50px;}
    #C,#C1,#C2{background-color:blue;height:50px;}
    #box{
    position:relative;
    top:20px;
    left:20px;
    }
        #A{
        }
    
        #B{
        position: absolute;
        top:100px;
        left:100px; 
        }
    
        #C{ 
        }
    
    #box1{
    position:relative;
    margin: auto;
    top:900px;
    }
        #A1{}
        #B1{}
        #C1{}
    
    #box2{
    position:fixed;
    top:50%;
    right: 0;
    }
        #A2{}
        #B2{}
        #C2{}
    
    </style>
    <body style="overflow-y:scroll">
    <div id="box">
        <div id="A" >A</div>
        <div id="B" >B</div>
        <div id="C" >C</div>
    </div>
    
    <div id="box1">
        <div id="A1" >A1</div>
        <div id="B1" >B1</div>
        <div id="C1" >C1</div>
    </div>
    
    <div id="box2">
        <div id="A2" >A2</div>  
        <div id="B2" >B2</div>
        <div id="C2" >C2</div>
    </div>
    </body>
    </html>

    relative和absolute的比较

      relative:相对于原来位置移动,元素设置此属性之后仍然处在文档流中,不影响其他元素的布局

    absolute:元素会脱离文档流,如果设置偏移量,会影响其他元素的位置定位

    什么地方使用position:relative,什么地方使用position:absolute进行定位,同时使用left、right、top、bottom的配合定位具体位置。

    如果父级不使用position:relative而直接使用position:absolute绝对定位,这个时候将会以body标签为父级,使用position:absolute定义对象无论位于DIV多少层结构,都将会被拖出以<body>为父级(参考级)进行绝对定位。绝对定位非常好用,但切记不要滥用,什么地方都用,这样有时会懒得计算距离上、下、左、右间距,同时可能会造成CSS代码臃肿



  • 相关阅读:
    SQL注入攻击
    Collections使用
    jquery实现table按时间排序
    浏览器存储及使用
    android实现屏幕旋转切换fragment
    安卓保存图片到图库demo总结
    android service基础
    正则表达式学习总结
    注解和枚举回顾
    Vue+Element项目日期选择器类型转化的问题
  • 原文地址:https://www.cnblogs.com/minchao/p/6087679.html
Copyright © 2011-2022 走看看