CSS浮动布局

说浮动布局,就得先知道文档流,文档流有正常文档流脱离文档流

  • 正常文档流:将一个页面从上到下分为一行一行,块元素独占一行,相邻行内元素在每一行中按照从左到右排列直到该行排满。使元素不按正常文档流就是脱离文档流。
    例如:
<body>
    <div class="div00">
        <div class="div01"></div>
        <div class="div02"></div>
        <span></span><span></span>
        <div class="div03"></div>
        <div class="div04"></div>
    </div>
</body>

对应的正常文档流如图,

image.png

改变正常文档流的方法:浮动和定位。

1.使用浮动脱离文档流

例如01:

html:
    <div class="div00">
        <div class="div01">div01块</div>
        <div class="div02">div02块</div>
        <div class="div03">div03块</div>
        <div class="div04">div04块</div>
    </div>
scss (用了sass预处理器):
.div00{
    width: 200px;
    //注意这里目前未设置父元素的高度
    background-color: chartreuse;
    div{
        height: 50px;
    }
    .div01{
        float: left;
        background-color: aqua;
    }
    .div02{
        background-color: bisque;
    }
    .div03{
        background-color: blueviolet;
    }
    .div04{
        background-color: blue;
    }
}

结果:


image.png

分析:对div01设置了左浮动,使div01脱离了文档流,div01是在div02的上面一层,实际的div02还是占据了一整行,div02的文字部分看着像被挤出来了,其实这就是文字环绕的实现(文字是英文时有点问题)。
例如02:
只设置后面两个div左浮动
结果:


image.png

例如03:
全部设置左浮动,会从左到右依次排列。(right的相反)注意这里出现了父元素高度塌陷,height为0


image.png

例如04:
父元素宽度不能容纳浮动的元素时,就会换到下一行。
image.png

2.浮动带来的影响

  • 对设置了浮动的元素自身来讲,无论是什么元素这个元素都会变成block元素
  • 浮动元素的高度大于父元素的高度,或者父元素没有设置高度,那么会出现父元素高度塌陷的问题,如例03
    如何解决呢?
    有clear、overflow:hidden,::after三种,这里推荐第三种伪类的方法
.div00{
    *zoom: 1;
}
.div00::after{
    clear: both;
    content: '';
    display: block;
    height: 0;
    visibility: hidden;
}

效果如图:对比例3,父元素高度塌陷问题解决


image.png
  • 对兄弟元素的影响见例01和例03
  • 父元素是浮动元素,并且他的子元素也是浮动元素,那么父元素会自适应的包含子元素,也是解决父元素高度塌陷的方法之一

此外,浮动可以用来实现两列布局或多列布局
例如:

html:
<body>
    <div class="div00">
        <div class="div01">div01块</div>
        <div class="div02">div02块</div>
    </div>
</body>
scss:
.div00{
    *zoom: 1;
}
.div00::after{
    clear: both;
    content: '';
    display: block;
    height: 0;
    visibility: hidden;
}
.div00{
    width: 100%;
    background-color: white;
    div{
        height: 5000px;
    }
    .div01{
        margin-left: 10%;
        width: 40%;
        float: left;
        background-color: aqua;
    }
    .div02{
        margin-right: 10%;
        width: 40%;
        float: right;
        background-color: bisque;
    }
}

结果:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • display:float 浮动详解 在我刚开始学习CSS的时候,看到浮动这个概念,只知道是让一个盒子向左或向右移...
    闰土在流浪阅读 5,169评论 0 6
  • 引子 CSS的4大核心是"盒子模型, 普通文档流, 浮动, 定位". 刚开始学CSS的浮动时, 很困惑: "块级元...
    patiencing阅读 3,579评论 0 0
  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 10,153评论 5 15
  • 1 标准流布局 1.1 什么是标准流 在没有给标签通过CSS布局的时候,标签在浏览器中有一套默认的布局规则,这个规...
    咔佈阅读 1,118评论 0 0
  • Day 03 CSS布局 Date:2019.5.15 内容纲要: 一、标准流布局 1.什么是标准流   在没有给...
    苦咖啡时间阅读 1,781评论 0 0