zoukankan      html  css  js  c++  java
  • 7、文档流相关

    一、什么是文档流

    文档流是文档中可显示对象在排列时所占用的位置。换句话讲就是将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流.(自己的理解是从头到尾按照文档的顺序,该在什么位置就在什么位置,也可以按照上面的意思理解,自上而下,自左到右的顺序)

    二、文档流代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style>
                body{
                    margin: 0;
                    padding: 0;
                }
                div{
                    width: 100px;
                    background: pink;
                    height: 100px;
                    border: 1px solid #000000;
                }
            </style>
        </head>
        <body>
            <div>01</div>
            <div>02</div>
            <div>03</div>
        </body>
    </html>

    代码段运行结果

    上图就是标准的文档流,按照顺序自行排列。该在什么位置就在什么位置。

    三、脱离文档流的方法:

    目前脱离文档流有两种方法:1、float;2、定位也就是postion。

    四、float

    float 属性定义元素在哪个方向浮动。以前这个属性总应用于图像,使文本围绕在图像周围,在 CSS 中任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。浮动是脱离文档流的,因为脱离文档流的元素有个标志就是没有实际高度(注意:假如在一行之上只有极少的空间可供元素浮动,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。)。

    特征:

    1、块在一排显示;

    2、内联支持宽高;

    3、默认内容撑开宽度;

    4、脱离文档流;

    5、提升层级半层。

    浮动代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style>
                body{
                    margin: 0;
                    padding: 0;
                }
                #box{
                    width: 300px;
                    background: pink;
                    border: 1px solid #000000;
                }
                #div1{
                      float:left;
                      left: 20px;
                      height: 100px;
                      width: 100px;
                      background: #000;
                      opacity: 0.5;
                      color: #fff;
                }
            </style>
        </head>
        <body>
            <div id="box">
                01
                <div id="div1">02</div>
            </div>
        </body>
    </html>

    展示结果

    对比第一段文档流代码发现,加入浮动之后

    #box的高度为0,但是#div1并没有把父级的高度撑开,原因是它浮动了就不再占空间了。既然没有空间可占,那就等于容器里没有东西,所以不撑开。

    而且给的left:20px也没有生效。所以对于浮动属性来说,位置属性(left/top/right/bottom)是没有用的。也就是说此时的#div1已经脱离了原来的文档流。

    如果在#box中在添加一个div2就可以清楚看出是否已经脱离文档流了。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style>
                body{
                    margin: 0;
                    padding: 0;
                }
                #box{
                    width: 300px;
                    background: pink;
                    border: 1px solid #000000;
                }
                #div1{
                    float:left;
                      left: 20px;
                      height: 100px;
                      width: 100px;
                      background: #000;
                      opacity: 0.5;
                      color: #fff;
                }
                #div2{
                      height: 100px;
                      width: 100px;
                      background: yellow;
                }
            </style>
        </head>
        <body>
            <div id="box">
                01
                <div id="div1">02</div>
                <div id="div2">03</div>
            </div>
        </body>
    </html>

    运行结果如下:

    可以清楚的看到03占据了02的文字,也就表明02其实已经脱离了文档流,同时01的宽度也被02给撑开了。而且02的层级是高于03的。

    五、定位

    一、概念(来自百度与http://www.cnblogs.com/chuaWeb/p/html_css_position_float.html)

    在CSS中关于定位的内容是:position:relative | absolute | static | fixed

       ● static 没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级。

       ● relative 不脱离文档流,参考自身静态位置通过 top,bottom,left,right 定位,并且可以通过z-index进行层次分级。

       ● absolute 脱离文档流,通过 top,bottom,left,right 定位。选取其最近的父级定位元素,当父级 position 为 static 时,absolute元素将以body坐标原点进行定位,可以通过z-index进行层次分级。

       ● fixed 固定定位,这里他所固定的对像是可视窗口而并非是body或是父级元素。可通过z-index进行层次分级。

      CSS中定位的层叠分级:z-index: auto | namber;

       ● auto 遵从其父对象的定位

       ● namber 无单位的整数值。可为负数

    二、表格说明:

    描述
    absolute

    生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

    元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

    fixed

    生成绝对定位的元素,相对于浏览器窗口进行定位。

    元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

    relative

    生成相对定位的元素,相对于其正常位置进行定位。

    因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

    static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
    inherit 规定应该从父元素继承 position 属性的值。

    简单的说就是position的值为absolute、fixed的元素脱离文档流,static、relative没有脱离文档流。

    代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style>
                *{
                    margin: 0;
                    padding: 0;
                    text-align: right;
                      color: #FFF;
                }
                #box{
                    position: absolute;
                      left: 20px;
                      margin-top: 10px;
                      width: 600px;
                      height: 600px;
                      background-color: green;
                }
                #div1{
                    position: static
                    left: 20px;
                      margin-top: 10px;
                      width: 500px;
                      height: 500px;
                      background-color: #000000;
                }
                #div2{
                    position: static
                    left: 20px;
                      margin-top: 10px;
                      width: 400px;
                      height: 400px;
                      background-color: yellow;
                }
                #div3{
                    position: relative;
                      left: 20px;
                      margin-top: 40px;
                      width: 300px;
                      height: 300px;
                      background-color: pink;
                }
                #div4{
                    position: static;
                      margin-left: 20px;
                      margin-top: 50px;
                      width: 200px;
                      height: 200px;
                      background-color: #red;
                }
                #div5{
                    position: absolute;
                      left: 20px;
                      margin-top: 60px;
                      width: 100px;
                      height: 100px;
                      background-color: #aaa;
                }
                #div6{
                    position: fixed;
                      left: 20px;
                      margin-top: 70px;
                      height: 50px;
                      width: 50px;
                      background-color: #f00;
                }
            </style>
        </head>
        <body>
            <div id="box">
                <div id="div1">
                    <div id="div2">
                        <div id="div3">
                            <div id="div4>
                                <div id="div5">
                                    <div id="div6">
                                        div6
                                    </div>div5
                                </div>div4
                            </div>div3
                        </div>div2
                    </div>div1
                </div>box
            </div>
        </body>
    </html>

    效果如下

    结论:

      1.static定位不脱离文档流,设置left/top/right/bottom没有作用,对margin/padding敏感。

      【证据:#div1定位left没有其作用】

      2.父子节点都是没有脱离文档的两种定位(static、relative)的外边距(margin)会合并,显示效果以最大的那个外边距为准。

      【证据:#div1,#div2,#div3,#div4都是非脱离文档的元素且是父子节点关系,他们的marginTop值分别为20px/30px/40px/50px。#div1和#div2的外边距合并,合并后的top外边距为30px;然后#div2拿先前合并后的结果和#div1外边距合并,合并后top的外边距为40px;最后#div3拿先前合并的结果和#div4的外边距合并,合并结果为50px。所以最终合并的外边距为50px。

      absolute:绝对定位。将对象从文档流中拖出,使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义
    。当对象定位在浏览器窗口以外,浏览器因此显示滚动条。

      fixed:固定定位。对象定位遵从绝对(absolute)方式。但是要遵守一些规范。当对象定位在浏览器窗口以外,浏览器不会因此显示滚动条,而当滚动条滚动时,对象始终固定在原来位置。
      relative:相对定位。对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置。当对象定位在浏览器窗口以外,浏览器因此显示滚动条。 

      static:元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。

      inherit:继承值,对象将继承其父对象相应的值。

  • 相关阅读:
    常用资料管理
    IIC学习笔记
    博客的开始
    试用Markdown编辑器
    裁剪方法--layer.makesToBounds 和 clipsToBounds区别和联系
    block循环引用问题--内存泄露
    UITextFiled/UITextView---占位文字的设置
    使用KVC取得私有成员变量时报连线错误
    Xcode开发--运行时runtime
    Xcode开发--屏蔽警告
  • 原文地址:https://www.cnblogs.com/-hongchen/p/6646651.html
Copyright © 2011-2022 走看看