Flex 是Flexible Box的缩写,用来为盒状模型提供最大的灵活性。
- 任何一个容器都可以指定为 Flex 布局;
- 行内元素也可以使用 Flex 布局;
注意:
设为 Flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
本文章主要示例align-item 和 align-comtent 属性 和 项目属性
基本概念
采用 Flex 布局的元素,成为 Flex 容器(flex container),简称”容器“。它的所有子元素自动成为容器成员,成为 Flex 项目(flex item),简称”项目“。
如上图
- flex-direction决定了主轴(main axis)的方向,下面会说到这个容器属性;
- 容器默认存在两根轴 :水平的主轴 (main axis)和垂直的交叉轴 (cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束的位置叫做main end;
- 交叉轴开的围追叫做cross start,结束的位置叫做 cross end。
- 项目默认沿着主轴排列。单个项目占据的主轴空间叫做 main size,占据的交叉轴叫做 cross size。
把元素设置成弹性布局
display: flex;
// 把元素的css属性dispaly,设置成flex。
display: flex;
容器属性,6个
- flex-direction,属性决定主轴的方向(即项目的排列方向)
-
flex-direction,有四个取值row(默认值)、row-reverse、column、column-reverse row(默认值):主轴为水平方向,起点在左端。row-reverse:主轴为水平方向,起点在右端。column:主轴为垂直方向,起点在上沿。column-reverse:主轴为垂直方向,起点在下沿。-
- 主轴方向默认是水平方向,
从左到右,如下图
- 主轴方向默认是水平方向,
-
1. 2.flex-direction: row-reverse;主轴方向由水平方向,
从右到左,如下图
- flex-direction属性,示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flex-direction属性决定主轴的方向(即项目的排列方向)</title>
<style>
.container {
width: 600px;
height: 300px;
margin: 0 auto;
background: pink;
display: flex;
/* 默认是 row */
flex-direction: row;
/* 当排列水平反转 从右到左 */
/* flex-direction: row-reverse; */
}
.childitem {
width: 100px;
height: 100px;
background: honeydew;
border: 1px solid snow;
}
</style>
</head>
<body>
<div class="container">
<div class="childitem">
1
</div>
<div class="childitem">
2
</div>
<div class="childitem">
3
</div>
<div class="childitem">
4
</div>
<div class="childitem">
5
</div>
</div>
</body>
</html>
- flex-wrap 默认 nowrap 不换行
- 这里的示例图用的还是上方的代码。
- 代码如下,这里只改了
.container里的属性
.container {
width: 600px;
height: 300px;
margin: 0 auto;
background: pink;
display: flex;
/* 不换行 */
/* flex-wrap: nowrap; */
/* 换行 */
flex-wrap: wrap;
} */
-
- flex-wrap: nowrap;默认不换行,如图,可以看到子元素缩小了。
-
- flex-wrap: wrap;换行,如图,可以看到子元素又变回原来设置的大小。
- `下面直接示例,align-item 和 align-comtent 属性`
3. flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为 row nowrap 4. justify-content 属性定义了项目在主轴上的对齐方式。 5. align-items 属性定义项目在交叉轴上对齐方式
- 这里展示的是多行,这样容易看到和align-content的区别,重点就是多行
- 使用
align-items时效果如下 - 代码如下
.container {
width: 600px;
height: 300px;
margin: 0 auto;
background: pink;
display: flex;
flex-wrap: wrap;
align-items: center;
}
- align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
- 当align-content 设置成center
- 使用
align-content时效果如下 - 代码如下
.container {
width: 600px;
height: 300px;
margin: 0 auto;
background: pink;
display: flex;
flex-wrap: wrap;
align-content: center;
}
项目的属性,6个(理解)
-
order属性定义项目的排列顺序,数值越小,排列越靠前,默认为0。
-
flex-grow 属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
(理解:当容器项目少的时候 单个项目不设置其他属性要铺满 不合理) -
flex-shrink属性定义了项目的缩小比例,默认为1,即若果空间不足,该项目将缩小.
(理解:因为flex-wrap默认是不换行,所以当容器项目多的时候单个项目要随着缩小) -
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余的空间。 它的默认值为auto,即项目的本来大小。
-
flex 属性是flex-frow、flex-shrink 和flex-basis 的简写,默认值为 0 1 auto;
-
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值auto,表示继承父元素的 align-items属性,如果没有 父元素,则等同于strectch。
flex,语法推荐阮老师的flex语法教程