一、flex布局是什么?
- flex-direction 属性
- flex-wrap 属性
- justify-content 属性
- align-items 属性
- align-content 属性
- align-self 属性
- order 属性
Flex 布局是 Flexible Box 的缩写,意味着“弹性布局”,用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为 Flex 布局。
-- CSS部分
.demo {
display:flex;
}
-- HTML部分
<div class="demo"></div>
行内元素也能设置 Flex 布局。
-- CSS部分
.demo {
display:inline-flex;
}
-- HTML部分
<span class="demo"></span>
容器的设置
flex-direction 属性决定主轴方向。
主要有4个值:
row: 从左到右(默认)
column: 从上到下
row-reverse: 从右到左
column-reverse: 从下到上
-- CSS部分
.demo {
display: flex;
flex-direction:row;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
// 为了更好的观赏加上了margin-left值为20
.demo .son:nth-child(n + 2) {
margin-left: 20px;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
flex-direction:column;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
.demo .son:nth-child(n + 2) {
margin-top: 20px;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
flex-direction:row-reverse;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
.demo .son:nth-child(n + 2) {
margin-left: 20px;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
flex-direction:column-reverse;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
.demo .son:nth-child(n + 2) {
margin-bottom: 20px;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
flex-wrap属性决定着是否换行
主要有3个值:
wrap:换行。
nowrap:不换行。
wrap-reverse:换行,第一行在下面。
-- CSS部分
.demo {
display: flex;
flex-direction: row;
/* 一旦子元素宽度超过父元素盒子就立马会换行 */
flex-wrap: wrap;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
flex-direction: row;
/* 一旦子元素宽度超过父元素盒子就立马会换行 */
flex-wrap: nowrap;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
flex-direction: row;
/* 一旦子元素宽度超过父元素盒子就立马会换行 */
flex-wrap: wrap-reverse;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
justify-content属性用来设置主轴位置
主要有5个值:
flex-start(默认)主轴的从左到右
flex-end 主轴的从右到左
center 主轴的中心
space-around 平均分布,两边有空隙
space-between 平均分布,两边没有空隙
-- CSS部分
.demo {
display: flex;
justify-content:flex-start;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:flex-end;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:center;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-around;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
align-items 属性用来设置侧轴的位置
主要有4个值:
flex-start:向侧轴的起点对齐
flex-end:向侧轴的终点对齐
center:向侧轴的中心点对齐
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-items:flex-start;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-items:flex-end;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-items:stretch;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
/* height: 100px; */
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-items:center;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
align-content:属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
主要6种属性:
flex-start:与交叉轴的起点对齐。
flex-end:与交叉轴的终点对齐。
center:与交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:flex-start;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:flex-end;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:center;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:space-around;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content:space-between;
align-content:stretch;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
/* height: 100px; */
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son"></div>
<div class="son"></div>
<div class="son"></div>
</div>
空间分布:flex:number
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
flex: 1;
height: 100px;
text-align: center;
background: skyblue;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
flex: 1;
height: 100px;
text-align: center;
background: skyblue;
}
.demo .son:nth-child(2) {
flex: 2;
background: red;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>
align-self 属性用来设置在子元素身上的随意改变位置。
主要有3个值:
flex-start:侧轴的向顶部对齐
flex-end:侧轴的向底部对齐
center:侧轴向中心对齐
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
text-align: center;
background: skyblue;
}
.demo .son:nth-child(2) {
align-self: center;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
text-align: center;
background: skyblue;
}
.demo .son:nth-child(2) {
align-self: flex-start;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
text-align: center;
background: skyblue;
}
.demo .son:nth-child(2) {
align-self: flex-end;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>
order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
-- CSS部分
.demo {
display: flex;
justify-content: space-between;
width: 400px;
height: 400px;
background: pink;
}
.demo .son {
width: 100px;
height: 100px;
text-align: center;
background: skyblue;
}
.demo .son:nth-child(1) {
order: 1;
}
.demo .son:nth-child(2) {
order: 3;
}
.demo .son:nth-child(3) {
order: 2;
}
-- HTML部分
<div class="demo">
<div class="son">1</div>
<div class="son">2</div>
<div class="son">3</div>
</div>