脱离标准文档流(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失效也包括了):加载时,如果溢出隐藏,强制检索,看盒子中是否有浮动元素,有的话,会被整体管理起来,在自身的高度内,不会影响其他非浮动元素。

猜你喜欢

转载自www.cnblogs.com/roseneverdie/p/10765254.html