zoukankan      html  css  js  c++  java
  • Unit 6.标准文档流,浮动,清除浮动以及margin塌陷问题

    一. 什么是标准文档流

      文本流其实就是文档的读取和输出顺序,也就是我们通常看到的由左到右、由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个属性可以将元素从文本流脱离出来显示。

      标准文档流的围观现象有3种:  

      1.空白折叠现象:多个空格或者换行会被折叠成一个.
      2.高矮不齐,底边对齐.
      3.自动换行,一行写不完,自动换行.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>标准文档流</title>
        <style type="text/css">
            span{
                font-size: 50px;
            }
        </style>
    
    </head>
    <body>
        <!-- 文档流指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列。并最终窗体自上而下分成一行行,并在每行中从左至右的顺序排放元素。 -->
        <!-- 标准文档流的微观现象?
            1.空白折叠现象:多个空格或者换行会被折叠成一个.
            2.高矮不齐,底边对齐.
            3.自动换行,一行写不完,自动换行.
    
    
        -->
        <div>
            你好               你好
    
    
    
    
            你好
        </div>
        <div>
            你好好你好好你好好<span>姚明</span>好你好好你好好你好好你好好
        </div>
    </body>
    </html>
    3种微观现象

    二. 元素间转换

    使用display:block,inline,inline-block

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>块级元素和行内元素转换</title>
        <style type="text/css">
            /*块状元素转换成行内元素*/
            .box1{
                display: inline;
                width: 200px;
                height: 30px;
                border: 3px solid red;
            }
            .box2{
                width: 200px;
                height: 30px;
                font-size: 30px;
                border: 3px solid green;
                margin-top: 10px;
            }
            /*行内元素转换成块级元素*/
            span{
                background-color: green;
                width:50px;
                margin-top:10px;
                display: block;
                /*隐藏标签,彻底的隐藏标签,原来标签的位置会被后面的内容覆盖掉,不占用原来的位置*/
                /*display: none;*/
                /*只隐藏标签内容,保留标签的区域大小,占用原来的位置.*/
                visibility: hidden;
            }
            /*块状元素转换成行内块元素*/
            /*.box3{
                display: inline-block;
                margin-top: 10px;
                 200px;
                height: 30px;
                border: 3px solid red;
            }*/
        </style>
    </head>
    <body>
        <div class="box1">内容1</div>
        <div class="box1">内容1</div>
        <div class="box2">内容2</div>
        <div class="box3">内容3</div>
        <div class="box3">内容3</div>
        <div class="box3">内容3</div>
        <span>中国</span>
        <span>中国</span>
        <img src="./1.png" alt="">
        <img src="./1.png" alt="">
    </body>
    </html>
    块级元素和行内元素转换

    三. 浮动(float)

       浮动是css布局中使用最多的属性! 

      定义:使元素脱离文档流,按照指定方向发生移动,遇到父级边界或者相邻的浮动元素停了下来。

      浮动的实际用途,可设置文字环绕或使元素宽度由内容填充(类似Inline-block)。使用浮动需要注意的是如果浮动的元素高度比父级容器还高,那么需要设置父级容器的overflow属性为auto,使其自动撑满。

      浮动的4个特点:    

        1.浮动元素的脱标
        2.浮动元素的互相贴靠
        3.浮动元素的"字围"效果
        4.紧凑效果  

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>浮动介绍</title>
        <style type="text/css">
            *{
                border: 0;
                margin: 0;
            }
            .box1{
                width: 200px;
                height: 200px;
                background-color: red;
                float: left;
                margin-left: 100px;
            }
            .box2{
                width: 200px;
                height: 200px;
                background-color: green;
                float: right;
                margin-right: 100px;
            }
        </style>
    </head>
    <body>
        <!--浮动是布局中用的最多的一个属性. 
            浮动效果:两个元素并排了,且可以设置宽高.
            浮动的三个特点:
                        1.浮动元素的脱标
                        2.浮动元素的互相贴靠
                        3.浮动元素的"字围"效果
                        4.紧凑效果
             -->
        <div class="box1"></div>
        <div class="box2"></div>
    </body>
    </html>
    浮动 小例子

      

    • 浮动布局:

      • float:left/right;
      • 特点:
        • 元素浮动之后不占据原来的位置(脱标);
        • 浮动的盒子在一行上显示;
        • 行内元素浮动之后转换为行内块元素(不推荐使用,转行内块元素最好使用display:inline-block);
      • 浮动的作用:
        • 文本绕图(文字环绕图片):文字和浮动元素没有层叠关系,文字不参与浮动;
        • 制作导航;
        • 网页布局;

      清除浮动

    • 清除浮动不是不使用浮动,而是清除浮动所产生的不良影响(当父盒子没有定义高度,嵌套的盒子浮动之后,下边的元素发生位置错误),清除浮动使用关键字clear:left/right/both;,工作中使用的最多的是clear:both;
    • 清除浮动方法:
      1. 额外标签法(内墙法):在最后一个浮动元素后添加标签:<div style="clear:both"></div>,但是工作中一般不使用这样的方法;
      2. 给父级元素使用overflow:hidden(bfc),有弊端:当内容出了盒子,就会被裁剪掉;详细介绍:W3C之overflow
      3. 伪元素清除浮动,使用最多,最完美:
      4. 给父元素设置高度(一般不使用)
     

     清除浮动例子:其中overflow和after经常用.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>内墙法</title>
        <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style: none;
        }
        /*父盒子不设置高度.和父盒子统计的盒子会顶边显示.*/
        div{
            width: 400px;
            /*给父盒子设置高度,即可解决一些浮动带来的问题.*/
            /*height: 40px;*/
        }
        div ul li{
            float: left;
            height: 40px;
            width: 100px;
            background-color: green;
        }
        .box{
            width: 500px;
            height: 100px;
            background-color: pink;
        }
        .clear{
            clear: both;
        }
        </style>
    </head>
    <body>
        <div>
            <ul>
                <li>python</li>
                <li>web</li>
                <li>linux</li>
                <!-- 给浮动元素最后面添加一个空的div并且该div不浮动.然后设置css属性clear:both,就可以清除别的标签对本身的浮动影响.此方法又名 内墙法.
                缺点:每个清除浮动的标签都要添加一个空的div,代码太冗余了. -->
                <div class="clear"></div>
            </ul>
    
        </div>
        
         <div class="box">
                
        </div>
    </body>
    </html>
    内墙法
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>overflow方法</title>
        <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style: none;
        }
        /*父盒子不设置高度.和父盒子统计的盒子会顶边显示.*/
        .box{
            width: 400px;
            /*overflow:hidden方法*/
            overflow: hidden;
            /*给父盒子设置高度,即可解决一些浮动带来的问题.*/
            /*height: 40px;*/
        }
        .box ul li{
            float: left;
            height: 40px;
            width: 100px;
            background-color: green;
        }
        .box2{
            width: 500px;
            height: 100px;
            background-color: pink;
        }
    
        </style>
    </head>
    <body>
        <div class="box">
            <ul>
                <li>python</li>
                <li>web</li>
                <li>linux</li>
                
            </ul>
    
        </div>
        
         <div class="box2">
                
        </div>
    </body>
    </html>
    overflow方法
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>伪元素法</title>
        <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style: none;
        }
        /*父盒子不设置高度.和父盒子统计的盒子会顶边显示.*/
        div{
            width: 400px;
        }
        div ul li{
            float: left;
            height: 40px;
            width: 100px;
            background-color: green;
        }
        .box{
            width: 500px;
            height: 100px;
            background-color: pink;
        }
        .clearfix:after{
            /*下面3句是after方法清除浮动必须写的*/
            content: ".";
            clear: both;
            display: block;
            /*content有内容"."时,也可以写成5句*/
            height: 0;
            visibility: hidden;
        }
    
        </style>
    </head>
    <body>
        <div class="clearfix">
            <ul>
                <li>python</li>
                <li>web</li>
                <li>linux</li>
            
            </ul>
    
        </div>
        
         <div class="box">
                
        </div>
    </body>
    </html>
    伪元素after清除法

    四. margin塌陷

      什么是margin塌陷?

      当2个同级盒子,设置垂直方向上的margin,以较大的那个为准.这就称为塌陷.
      注意:浮动的同级盒子不塌陷.
      注意:同级盒子,左右不塌陷.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>margin的塌陷</title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            .box1{
                width: 300px;
                height: 200px;
                margin-bottom: 20px;            
                background-color: red;
            }
            /* box1和box2形成了塌陷,此时他俩的上下间距是50px */
            .box2{
                width: 400px;
                height: 200px;
                margin-top: 50px;
                background-color: green;
            }
            span{
                background-color: greenyellow;
            }
            span.a{
                margin-right: 20px;
            }
            span.b{
                margin-left: 20px;
            }
        </style>
    </head>
    <body>
        <div class="father">
                <!-- 当2个同级盒子,设置垂直方向上的margin,以较大的那个为准.这就称为塌陷.
                    注意:浮动的同级盒子不塌陷.
                    注意:同级盒子,左右不塌陷.
             -->
            <div class="box1"></div>
            <div class="box2"></div>
    
            <span class="a">内容</span>
            <span class="b">内容</span>
        </div>
    </body>
    </html>
    margin塌陷例子



      

  • 相关阅读:
    Codeforces Round #409(Div.2)
    Require.js
    Javascript闭包
    修改GeoJson的网址
    获取服务器时间js代码
    JS中的call()和apply()方法
    什么是Javascript Hoisting?
    谁说 JavaScript 简单的?
    前端定时执行一个方法
    Jquery精妙的自定义事件
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9467186.html
Copyright © 2011-2022 走看看