本文介绍浮动与flex布局。
目录
[1. 标准流](#1. 标准流)
[2. 浮动](#2. 浮动)
[2.1 基本使用](#2.1 基本使用)
[2.2 清除浮动](#2.2 清除浮动)
[2.2.1 额外标签法](#2.2.1 额外标签法)
[2.2.2 单伪元素法](#2.2.2 单伪元素法)
[2.2.3 双伪元素法(推荐)](#2.2.3 双伪元素法(推荐))
[2.2.4 overflow(最简单)](#2.2.4 overflow(最简单))
[3. flex布局](#3. flex布局)
[3.1 组成](#3.1 组成)
[3.2 主轴与侧轴对齐方式](#3.2 主轴与侧轴对齐方式)
[3.2.1 主轴](#3.2.1 主轴)
[3.2.2 侧轴](#3.2.2 侧轴)
[3.3 修改主轴方向](#3.3 修改主轴方向)
[3.4 弹性伸缩比](#3.4 弹性伸缩比)
[3.5 弹性换行与行对齐](#3.5 弹性换行与行对齐)
[3.5.1 弹性盒子换行](#3.5.1 弹性盒子换行)
[3.5.2 行对齐方式](#3.5.2 行对齐方式)
1. 标准流
也叫文档流,指的是标签在页面中默认的排布规则
例如:块元素独占一行,行内元素可以一行显示多个
2. 浮动
让块级元素水平排列
2.1 基本使用
属性名:float
属性值:left 左对齐;right 右对齐

两个标签都加上 左浮动:都靠左

第二个改为右浮动:一左一右
特点
顶对齐,具备行内块的显示模式
脱标
给标签加上浮动,本身属于让其脱离标准流的控制
如果一个有浮动,另一个没有浮动,效果如下:

就会出现上面的叠加效果,因为浮动后的,不是标准流了,所以浏览器不会认为它在占用空间,下面没有加浮动的标签顺其自然的上移和one标签重叠。
所以最好两个都要浮动。
2.2 清除浮动
浮动元素会脱标,如果浮动的父级没有高度,子级无法撑开父级高度(可能导致页面布局错乱)
解决方法:清除浮动(清除浮动带来的影响)
先看正常的:

现在注释掉top的高度

因为 top.div 里的两个盒子是浮动的,属于脱标,浏览器会认为其不存在,所以出现上面的情况。
2.2.1 额外标签法
在父元素内容的最后添加一个块级元素,设置CSS属性:clear:both

2.2.2 单伪元素法
在父元素内容的最后添加一个块级元素
可以直接使用如下代码:
.clearfix::after {
content: "";
clear: both;
display: block;
}

2.2.3 双伪元素法(推荐)
/* 双伪元素 */
/* before 解决外边距塌陷问题 */
.clearfix::before,
.clearfix::after {
content: "";
display: block;
}
.clearfix::after {
clear: both;
}
</style>
</head>
<body>
<div class="top clearfix">
<div class="left"></div>
<div class="right"></div>
</div>
<div class="bottom"></div>
</body>

2.2.4 overflow(最简单)
父元素添加CSS属性 overflow:hidden

3. flex布局
flex布局也叫弹性布局,是浏览器提倡的布局类型,非常适合结构化布局,提供了强大的空间分布和对齐能力。
flex布局不会产生浮动布局中的脱标现象,更简单更灵活。
3.1 组成
设置方式:给父元素添加 display:flex,子元素可以自动挤压或拉伸
组成部分:
弹性容器、弹性盒子(是容器的子级)、主轴(默认水平)、侧轴/交叉轴(默认垂直)

沿着主轴方向排列,自动挤压。
3.2 主轴与侧轴对齐方式
3.2.1 主轴
justify-content

常用后四个

flex-end

center

space-between
空白间距均匀分配在弹性盒子之间

space-around
空白间距均匀分布在弹性盒子两侧,两个弹性盒子之间的距离是两侧的2倍

space-evenly
各个间距都相等
3.2.2 侧轴
align-items 当前弹性容器内所有弹性盒子的侧轴对齐方式
align-self 单独控制某个弹性盒子的侧轴对齐方式

前两个常用
align-items:

stretch
弹性盒子没有侧轴尺寸时才有效

center

flex-start

flex-end
align-self:
只举例一个,剩下都可以尝试

center
3.3 修改主轴方向
主轴默认水平方向,侧轴默认垂直方向
flex-direction

主轴方向变了,侧轴自动也会变化
只测试column

3.4 弹性伸缩比
控制弹性盒子的主轴方向的尺寸
属性名:flex
属性值:整数数字,表示占用父级剩余尺寸的份数

如果修改了主轴方向呢?
控制盒子的高

3.5 弹性换行与行对齐
3.5.1 弹性盒子换行
弹性盒子自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示
flex-wrap
属性值:
wrap 换行
nowrap 不换行(默认)

3.5.2 行对齐方式
行与行之间的对齐方式(默认垂直方向)
align-content
属性值:(和主轴对齐方式一样)

演示效果:

flex-start

flex-end

center

space-between

space-around

space-evenly
注意:
align-content对单行的没有效果
也就是如果不换行(没有wrap)就没有效果,都在一行
本文介绍浮动与flex布局,重点掌握flex布局。
