zoukankan      html  css  js  c++  java
  • 脱离标准文档流(1)---浮动

                                                                     浮动

    标准文档流

    标准文档流分为三种:块级元素,行内元素。

    标准文档流无法做到使两个盒子并排放在一起。

    我们可以通过使块状元素或者行内元素转化为行内块元素,来做到将两个和盒子放到一排。

    小偏方

    运用display来进行转换并不是一种大流的转换方法,重点当然是浮动等啦。

          

    当然我们也从中可以得出行内元素与块状元素是可以互相转换的。

    主流---浮动

    float-------left(right)

    浮动的性质

    1.浮动的元素脱离标准流

    解释:这不就是我们使用浮动的根本目的吗。。。

    2.浮动的元素依次贴边(根据书写顺序贴边,若父盒子装不下了,会换行贴上另一个的边)

    代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>浮动贴边</title>
            <style type="text/css">
                div{
                    background: deepskyblue;
                    margin: 0 auto;
                    margin-top:70px ;
                    width: 300px;
                    height: 300px;
                    border: yellow solid  1px;
                }
                p{
                    background: #E8E8E8;
                    width: 100px;
                    height: 120px;
                    border: black solid  1px;
                    float: left;
                }
            </style>
        </head>
        <body>
            <div >
                  <p>111</p>
                  <p>222</p>
                  <p>333</p>
            </div>
        </body>
    </html>
    View Code

    图示:

    3.浮动没有magrin塌陷现象,会直接叠加外边距

    代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>margin失效</title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                div{
                    margin: 0 auto;
                    margin-top: 30px;
                    width: 300px;
                    height: 300px;
                    background: deepskyblue;
                    border: solid 1px darkgoldenrod;
                }
                p{
                    float: left;
                    width: 200px;
                    /*我故意把宽度设置的无法贴边放置,这样可以更直观的看出margin塌陷失效现象*/
                    height: 30px;
                    margin:40px;
                    background: black;
                }
            </style>
        </head>
        <body>
            <div>
                <p></p>
                <p></p>
            </div>
        </body>
    </html>
    View Code

    4.元素浮动之后位置会让给标准文档流

     

    代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>浮动让位现象</title>
            <style type="text/css">
                     div{
             background: red;
             width: 100px;
             height: 100px;
             float: left;
             border: 1px yellow solid;
                     }
                     p{
                         background:black;
                         width: 300px;
                         height: 300px;
                         border: 1px pink solid;
                     }
            </style>
        </head>
        <body>
            <div></div>
            <p></p>
        </body>
    </html>
    View Code

    个人理解

    我的理解就是不把浮动元素当人看,就是浮动元素虽然占了位置,但是遇到标准流还是得让出位置,乖乖的被覆盖。

    如果正式点说的话,我倒觉得可能还是浮动元素影响了后面的元素,导致了标准流没有换行,只要清除一下浮动就不会出现这样的现象了。

    5.浮动有字围现象

    注意:蓝色盒子一定要是浮动的奥。

    6.浮动元素不能撑开父级。

     

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>浮动无法自适应高度</title>
            <style type="text/css">
        div{
            width: 300px;
            margin: 0 auto;
            margin-top:30px ;
            border: 3px  red  solid;
        }
        p{
            float: left;
            width: 300px;
            height: 300px;
            border: 1px black solid;
            font-size: 30px;
        }
            </style>
        </head>
        <body>
            <div>
                <p>i&nbsp;&nbsp;&nbsp;am&nbsp;&nbsp;&nbsp;子盒子</p>
            </div>
        </body>
    </html>
    View Code

    上面的红色条条就是父盒子,子盒子元素设置为浮动类型的,所以父盒子并没有被撑开,并且这个红条条是完全由边框构成的,也就是说现在父盒子的高度是0px。

    7.浮动元素会影响后面的元素

    上面的现象可以说与这一点是脱不了干系的,也就是说上面的一些性质也可以说是这一点的多种体现。

    清除浮动

    为什么要清除浮动?

    浮动的可以将标准流转成非标准流是我们使用它的原因,但是它同时也拥有着一些缺点。

    1.无法使父盒子自适应高度(是子盒子无法撑开父盒子高度的意思)

    2. magrin塌陷失效

    如何清除浮动

    1.规定父盒子的长度,将盒子分开

    我的理解:首先是规定父盒子的长度,其实这种方式看似父盒子拥有了长度,但是倒不如说我们主动放弃了盒子的自适应高度,这一优点(所以不可取)

    再来说一下将盒子分开。也就是说把盒子更加细分化,我们知道浮动元素会影响后面的元素,但是这种影响也就是停留在下一个元素上了,也就是说只要我们将这种影响留在一个非浮动的父盒子里面,这样虽然他受到影响了,但是这样并不会影响下一个父盒子的使用。

    2.使用css的clear属性

    属性值:left,right,both(分别是清除左,右,左和右浮动)

    作用:清除自身元素收到其他元素浮动影响。

    我的理解:在我们认为那些会受到浮动元素影响的元素css代码中添加clear属性(前提是你认为你并不需要这种影响)。

    缺点:还是无法达到高度自适应的效果。

    3.隔墙法

    由于外墙法和内墙法相似度很大,并且内墙法更优于外墙法,所以这里我仅介绍外墙法。

    将清除浮动的墙放在右浮动元素的父盒子内部(准确是放在两个可能会因为浮动而造成影响的元素之间)。

    何谓清除浮动的墙?

    也就是说我们用一个空白的盒子来接受浮动的影响,并且清除这个影响。

    优点:解决了高度无法自适应的问题,也解决了margin失效的问题。

    缺点;当我们制作一个大型网页时,浮动元素会非常多,这个时候我们用这种方法的话,就相当于我们制造出了很多的空盒子,这样使得网加载速度缓慢。

    但是我们在做大结构时可以用墙来隔开,这样我们不用设置外边距,这样也使得结构更为清晰。

    4.溢出隐藏清除浮动

    我们上篇已经略微提到过了溢出隐藏了,这里我们详细的说一下。

    属性:overflow

    属性值:hidden(隐藏),auto(滚动)----------这里我们往常在浏览网页时见过了很多了。

    用于清除浮动

    其实相当于一个偏方,但是实用度却很广泛,我偶尔看别人网页时发现用这个的挺多的。

    做法:给父盒子添加一个overflow:hidden。

    优点:解决了上面的所有缺点(确实是这样的)

    原理:1.高度自适应:如果元素右overflow属性,网页加载时,会强制的去元素的内部搜索,识别所有元素的高度,会用最高的元素高度作为我们的父盒子的高度。

            2.浮动的影响(margin失效也包括了):加载时,如果溢出隐藏,强制检索,看盒子中是否有浮动元素,有的话,会被整体管理起来,在自身的高度内,不会影响其他非浮动元素。

  • 相关阅读:
    chart控件多个ChartArea
    winform chart画折线,波形图,多条数据
    C# Chart 折线图 多条数据展示
    task一个任务结束后执行另一个操作
    C#多线程同步 读写锁ReaderWriterLock的用法
    C# 多线程文件读写整理总结
    vue解决跨域问题
    接前端页面
    使用vue+zrender绘制体温单 三测单(2)
    使用vue+zrender绘制体温单 三测单(1)
  • 原文地址:https://www.cnblogs.com/roseneverdie/p/10765254.html
Copyright © 2011-2022 走看看