浮动布局

   在学习浮动布局和定位布局之前,先对“正常文档流”和“脱离文档流”就行了解,这两个概念,是深入学习浮动布局和定位布局的理论前提。

   1:正常文档流

         文档流:指元素在页面中出现的先后顺序。

         正常文档流(普通流):将一个页面从上到下分为一行一行,其中块元素独占一行,相邻行内元素在每一行中按照从左到右排列直到该行排满。

                                                 也就是说,正常文档流就是默认情况下页面元素的布局情况。

   2:脱离文档流

        脱离文档流:指的是脱离正常文档流。正常文档流就是我们没有使用浮动或者定位去改变默认情况下的HTML文档结构。若改变正常文档流,有两种方法:浮动和定位。

   3:浮动

        浮动,可以使得元素移到左边或者右边,并且允许后面的文字或元素环绕着它。浮动,最常用于实现水平方向上的并排布局,例如两列布局、多列布局。

        float属性只有三个取值:left,right和none。

        浮动特点:

                (1)当一个元素定义了“float:left”或“float:right”时,不管这个元素之前是inline,inline-block或者其他类型,都会变成block类型。关于inline,inline-block和block的学习总结,在前面博客里有总结,可以查阅学习。浮动元素表现为块元素效果,可以定义width,height,padding和margin。可以使用margin-left或margin-right来定义浮动元素与其他元素之间的距离。

                (2)当一个元素定义了“float-left”或"float-right"时,这个元素会脱离文档流,后面的元素会紧跟着填上空缺的位置。

    4:浮动的影响

         (1)对自身的影响

                  如果一个元素设置了浮动,则不管这个元素是什么类型,都会转化为块元素,也就是说display属性值为block。(关于display属性的学习总结在前面博客也总结十分详细,有需要查阅学习的可以阅读)

         (2)对父元素影响

                  如果一个元素设置了浮动,它会脱离正常文档流。如果浮动元素的高度height大于父元素的高度height,或者父元素没有定义高度height,此时浮动元素会脱离父元素。也就是所谓的“父元素高度塌陷”。造成父元素高度塌陷的原因在于,父元素的高度小于子元素的高度,或者父元素没有定义高度,父元素不能把子元素包裹起来。

         (3)对兄弟元素的影响

                  ①兄弟元素是浮动元素

                       当一个浮动元素,它的兄弟元素也是浮动元素时,分两种情况。Ⅰ:同一方向的兄弟元素。Ⅱ:相反方向的兄弟元素

                       Ⅰ:同一方向的兄弟元素

                              当一个浮动元素碰到同一个方向的兄弟元素时,这些元素会从左到右、从上到下,一个接着一个紧挨着排列。

                       Ⅱ:相反方向的兄弟元素

                             当一个浮动元素碰到相反方向的兄弟元素时,这两个元素会移向两边(如果父元素宽度足够的话)。

                 ②兄弟元素不是浮动元素

           (4)对子元素的影响

                    如果一个元素是浮动元素(没有定义height),并且它的子元素也是浮动元素,则这个浮动元素会自适应地包含该子元素。

   5:浮动的负作用

         (1)父元素高度塌陷,从而导致边框不能撑开,背景色无法显示。

         (2)页面布局错乱。

   6:清除浮动

         清除浮动,就是清除元素被定义浮动之后带来的脱离文档流的影响。

         在CSS中,常见的清除浮动的方法有三种。

         (1)clear:both

                  在CSS中,可以使用clear属性来清除浮动,clear属性取值有三个:left,right和both。

                  注意:clear属性不是应用于浮动元素本身,而是应用于浮动元素后面的元素。

         (2)overflow:hidden

                  overflow:hidden应用于浮动元素的父元素,而不是当前的浮动元素。

         (3)::after

                  使用“clear:both”和“overflow:hidden”来清除浮动都有明显的弊端,在实际开发中,是使用“::after伪元素”结合“clear:both”来实现。

   

原文地址:https://www.cnblogs.com/aixing/p/13327818.html