flex弹性盒布局

弹性盒布局是一个用于页面布局的全新CSS3模块功能。弹性盒布局的定义中,它可以自动调整子元素的宽和高,来很好的填充任何显示设备中的可用显示空间,收缩内容防止内容溢出。
和块级元素基于垂直方向布局以及行内元素基于水平方向布局不同,弹性盒布局的算法是方向无关的。
最基本的用法如下:

div {
  border:1px solid black;
}
#box1 {
  display:flex;
  width:120px;
  height:120px;
}
<!--flex用法-->
<div id="box1"></div>

只需要将父元素的display属性设置为flex,其所有子元素都会变成弹性伸缩项目。
下面我们分别介绍flex的父元素的属性。


flex-direction

该属性决定子元素排列的方向
其可以设置的属性值如下:
row | row-reverse | column | column-reverse
分别对应:
row(默认值):主轴在水平方向,起点在左端
row-reverse:主轴在水平方向,起点在右端
column:主轴在垂直方向,起点在上沿
column-reverse:主轴在垂直方向,起点在下沿

实例如下:

<!--flex-direction用法-->
<div id="box2">
  <div id="box2-1">1</div>
  <div id="box2-2">2</div>
  <div id="box2-3">3</div>
</div>
<div id="box3">
  <div id="box3-1">1</div>
  <div id="box3-2">2</div>
  <div id="box3-3">3</div>
</div>
<div id="box4">
  <div id="box4-1">1</div>
  <div id="box4-2">2</div>
  <div id="box4-3">3</div>
</div>
<div id="box5">
  <div id="box5-1">1</div>
  <div id="box5-2">2</div>
  <div id="box5-3">3</div>
</div>
#box2 {
  display:flex;
  flex-direction:row;/*主轴为水平方向,起点在左端1,2,3*/  
}
#box2 div {
  width:40px;
  height:40px;
  border:1px solid black;
}
#box3 {
  display:flex;
  flex-direction:row-reverse;/*主轴为水平方向,起点在右端3,2,1*/  
}
#box3 div {
  width:40px;
  height:40px;
  border:1px solid black;
}
#box4 {
  display:flex;
  flex-direction:column;/*主轴为垂直方向,起点在上端1,2,3*/  
}
#box4 div {
  width:40px;
  height:40px;
  border:1px solid black;
}
#box5 {
  display:flex;
  flex-direction:column-reverse;/*主轴为垂直方向,起点在下端3,2,1*/  
}
#box5 div {
  width:40px;
  height:40px;
  border:1px solid black;
}

效果如下:
这里写图片描述


flex-wrap

该属性决定如果一行放不下后,该如何换行

其可以设置的属性值如下:
nowrap | wrap | wrap-reverse
分别对应:
nowrap(默认):不换行
wrap:换行,第一行在上方
wrap-reverse:换行,第一行在下方

实例如下:

<!--flex-wrap用法-->
<div id="clear"></div>
<div id="box6">
  <div id="box6-1">1</div>
  <div id="box6-2">2</div>
  <div id="box6-3">3</div>
  <div id="box6-4">4</div>
  <div id="box6-5">5</div>
  <div id="box6-6">6</div>
</div>
<div id="clear"></div>
<div id="box7">
  <div id="box7-1">1</div>
  <div id="box7-2">2</div>
  <div id="box7-3">3</div>
  <div id="box7-4">4</div>
  <div id="box7-5">5</div>
  <div id="box7-6">6</div>
</div>
<div id="clear"></div>
<div id="box8">
  <div id="box8-1">1</div>
  <div id="box8-2">2</div>
  <div id="box8-3">3</div>
  <div id="box8-4">4</div>
  <div id="box8-5">5</div>
  <div id="box8-6">6</div>
</div>
#box6 {
  display:flex; 
  flex-wrap:nowrap;/*不换行,即使超出范围*/
}
#box6 div {
  width:300px;
  height:40px;
  border:1px solid black;
}
#box7 {
  display:flex; 
  flex-wrap:wrap;/*换行,第一行是上方*/
}
#box7 div {
  width:300px;
  height:40px;
  border:1px solid black;
}
#box8 {
  display:flex; 
  flex-wrap:wrap-reverse;/*换行,第一行在下方*/
}
#box8 div {
  width:300px;
  height:40px;
  border:1px solid black;
}

效果如下:
这里写图片描述


justify-content

该属性定义了子元素在主轴上的对齐方式,非常关键。

取值范围:
flex-start | flex-end | center | space-between | space-around

分别对应:
flex-start(默认值):左对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

实例如下:

<!--justify-content用法-->
<div id="clear"></div>
<div id="box9">
  <div id="box9-1"></div>
  <div id="box9-2"></div>
  <div id="box9-3"></div>
</div>
<div id="box10">
  <div id="box10-1"></div>
  <div id="box10-2"></div>
  <div id="box10-3"></div>
</div>
<div id="box11">
  <div id="box11-1"></div>
  <div id="box11-2"></div>
  <div id="box11-3"></div>
</div>
<div id="box12">
  <div id="box12-1"></div>
  <div id="box12-2"></div>
  <div id="box12-3"></div>
</div>
<div id="box13">
  <div id="box13-1"></div>
  <div id="box13-2"></div>
  <div id="box13-3"></div>
</div>
#box9 {
  display:flex; 
  justify-content:flex-start;/*左对齐*/
  background-color:blue;
}
#box9 div {
  background-color:red;
  margin:20px;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box10 {
  display:flex; 
  justify-content:flex-end;/*右对齐*/
  background-color:blue;
}
#box10 div {
  background-color:red;
  margin:20px;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box11 {
  display:flex; 
  justify-content:center;/*居中*/
  background-color:blue;
}
#box11 div {
  background-color:red;
  margin:20px;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box12 {
  display:flex; 
  justify-content:space-between;/*两端对齐,项目之间的间隔都相等*/
  background-color:blue;
}
#box12 div {
  background-color:red;
  margin:20px;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box13 {
  display:flex; 
  justify-content:space-around;/*每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍*/
  background-color:blue;
}
#box13 div {
  background-color:red;
  margin:20px;
  width:40px;
  height:40px;
  border:1px solid black;
}

效果如下:
这里写图片描述


align-items

该属性定义子元素在垂直方向如何对齐

取值范围:
flex-start | flex-end | center | baseline | stretch

分别对应:
flex-start:垂直方向的起点对齐。
flex-end:垂直方向的终点对齐。
center:垂直方向的中点对齐。
baseline: 第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

实例如下:

<!--align-items用法-->
<div id="clear"></div>
<div id="box14">
  <div class="items1" id="box14-1"></div>
  <div class="items2" id="box14-2"></div>
  <div class="items3" id="box14-3"></div>
</div>
<div id="clear"></div>
<div id="box15">
  <div class="items1" id="box15-1"></div>
  <div class="items2" id="box15-2"></div>
  <div class="items3" id="box15-3"></div>
</div>
<div id="clear"></div>
<div id="box16">
  <div class="items1" id="box16-1"></div>
  <div class="items2" id="box16-2"></div>
  <div class="items3" id="box16-3"></div>
</div>
<div id="clear"></div>
<div id="box17">
  <div class="items1" id="box17-1">1</div>
  <div class="items2" id="box17-2">2</div>
  <div class="items3" id="box17-3">3</div>
</div>
<div id="clear"></div>
<div id="box18">
  <div class="items1" id="box18-1"></div>
  <div class="items2" id="box18-2"></div>
  <div class="items3" id="box18-3"></div>
</div>
.items1 {
  background-color:red;
  width:40px;
  height:40px;
  border:1px solid black;
}
.items2 {
  background-color:red;
  width:40px;
  height:140px;
  border:1px solid black;
}
.items3 {
  background-color:red;
  width:40px;
  height:80px;
  border:1px solid black;
}
#box14 {
  display:flex; 
  align-items:flex-start;/*垂直方向的起点对齐*/
  background-color:blue;
}
#box15 {
  display:flex; 
  align-items:flex-end;/*垂直方向的终点对齐*/
  background-color:blue;
}
#box16 {
  display:flex; 
  align-items:center;/*垂直方向的中点对齐*/
  background-color:blue;
}
#box17 {
  display:flex; 
  align-items:baseline;/*第一行文字的基线对齐*/
  background-color:blue;
}
#box18 {
  display:flex; 
  align-items:stretch;/*如果子元素未设置高度或设为auto,将占满整个容器的高度*/
  background-color:blue;
}

效果如下:

这里写图片描述

下面我们来介绍flex的子元素的属性。


order

该属性定义子元素的排列属性,数值越小,排列越靠前,默认为0.

实例如下:

<!--order用法-->
<div id="clear">order用法</div>
<div id="box19">
  <div id="box19-1">-3</div>
  <div id="box19-2">5</div>
  <div id="box19-3">0(默认)</div>
</div>
#box19 {
  display:flex; 
  background-color:blue;
}
#box19 div {
  background-color:red;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box19-1 {
  order:-3;
}
#box19-2 {
  order:5;
}

效果如下:
这里写图片描述


flex

该属性定义子元素的比例
实例如下:

<!--flex用法-->
<div id="clear">flex用法</div>
<div id="box20">
  <div id="box20-1"></div>
  <div id="box20-2"></div>
  <div id="box20-3"></div>
</div>
#box20 {
  display:flex; 
  background-color:blue;
}
#box20 div {
  background-color:red;
  width:40px;
  height:40px;
  border:1px solid black;
}
#box20-1 {
  flex:1;
}
#box20-2 {
  flex:2;
}
#box20-3 {
  flex:1;
}

效果如下:
这里写图片描述

这里的flex还可以和固定宽度配合使用得到更加复杂的布局。
整个flex布局demo地址:demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值