目录
零、rem布局案例代码
1.效果图
2.源代码
https://download.csdn.net/download/weixin_46127956/86928074
一、flex布局原理
- 给父盒子(flex_container)加flex属性,控制子盒子(flex_item)的排列方式
- flex盒子内的clear、float、vertical-align无效
二、父元素属性
1.display:flex
将容器指定为flex布局
2.flex-driection(设置主轴排列方向)
属性 | 说明 |
---|---|
row(默认值) | 主轴方向为→,即主轴为水平方向,起点在左端 |
row-reverse | 主轴方向为←,即主轴为水平方向,起点在右端 |
column | 主轴方向为↓,即主轴为垂直方向,起点在上沿 |
column-reverse | 主轴方向为↑,即主轴为垂直方向,起点在下沿 |
效果:
HTML代码:
row效果:
<div class="father row">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
row-reverse效果:
<div class="father row-reverse">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
column效果:
<div class="father column">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
column-reverse效果:
<div class="father column-reverse">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
CSS代码:
.father {
width: 500px;
background-color: pink;
display: flex;
}
.row {
flex-direction: row;
}
.row-reverse {
flex-direction: row-reverse;
}
.column {
flex-direction: column;
}
.column-reverse {
flex-direction: column-reverse;
}
.father span {
width: 50px;
border: 1px solid #000;
}
3.justify-content(设置主轴对齐方式)
属性 | 说明 |
---|---|
flex-start(默认值) | 头部对齐 |
flex-end | 尾部对齐 |
center | 居中对齐 |
space-around | 居中分布 |
space-between | 左右贴片,再居中分布 |
效果:
HTML代码:
flex-start效果:
<div class="father flex-start">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
flex-end效果:
<div class="father flex-end">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
center效果:
<div class="father center">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
space-around效果:
<div class="father space-around">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
space-between效果:
<div class="father space-between">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
CSS代码:
.father {
width: 500px;
background-color: pink;
display: flex;
flex-direction: row;
}
.father span {
width: 50px;
border: 1px solid #000;
}
.flex-start {
justify-content: flex-start;
}
.flex-end {
justify-content: flex-end;
}
.center {
justify-content: center;
}
.space-around {
justify-content: space-around;
}
.space-between {
justify-content: space-between;
}
4.flex-wrap(设置换行)
属性 | 说明 |
---|---|
nowrap(默认值) | 不换行(若父装不下,会缩小”子盒子“的大小) |
wrap | 换行 |
效果:
HTML代码:
nowrap效果:
<div class="father nowrap">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
wrap效果:
<div class="father wrap">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
CSS代码:
.father {
width: 500px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.father span {
width: 200px;
border: 1px solid #000;
}
.nowrap {
flex-wrap: nowrap;
}
.wrap {
flex-wrap: wrap;
}
5.align-items(设置侧轴对齐方向)
属性 | 说明 |
---|---|
stretch(默认值) | 平均拉伸父元素高度 |
flex-start | 头部对齐 |
flex-end | 尾部对齐 |
center | 居中对齐 |
效果:
HTML代码:
stretch效果:
<div class="father stretch">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
flex-start效果:
<div class="father flex-start">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
flex-end效果:
<div class="father flex-end">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
center效果:
<div class="father center">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
CSS代码:
.father {
width: 500px;
height: 80px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.father span {
width: 200px;
border: 1px solid #000;
}
.stretch {
align-items: stretch;
}
.flex-start {
align-items: flex-start;
}
.flex-end {
align-items: flex-end;
}
.center {
align-items: center;
}
6.align-items(设置侧轴对齐方向–多行的情况下)
属性 | 说明 |
---|---|
stretch(默认值) | 平均拉伸父元素高度 |
flex-start | 头部对齐 |
flex-end | 尾部对齐 |
center | 居中对齐 |
space-around | 居中分布 |
space-between | 左右贴片,再居中分布 |
效果:
HTML代码:
stretch效果:
<div class="father stretch">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
flex-start效果:
<div class="father flex-start">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
flex-end效果:
<div class="father flex-end">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
center效果:
<div class="father center">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
space-around效果:
<div class="father space-around">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
space-between效果:
<div class="father space-between">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
CSS代码:
.father {
width: 500px;
height: 80px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
flex-wrap: wrap;
}
.father span {
width: 30%;
border: 1px solid #000;
}
.stretch {
align-content: stretch;
}
.flex-start {
align-content: flex-start;
}
.flex-end {
align-content: flex-end;
}
.center {
align-content: center;
}
.space-around {
align-content: space-around;
}
.space-between {
align-content: space-between;
}
7.flex-flow(deriction和wrap的复合写法)
例如:flex-flow:row wrap
三、子元素属性
1.flex(设置分配份数)
属性 | 说明 |
---|---|
1(整数) | 表示占一个份额 |
30%(百分比) | 表示占30% |
效果:
HTML代码:
整数效果:
<div class="father int">
<span class="int_1">flex:1</span><span class="int_1">flex:1</span><span class="int_2">flex:2</span>
<span class="int_4">flex:4</span><span class="int_1">flex:1</span><span class="int_1">flex:1</span>
</div>
百分比效果:
<div class="father">
<span>1</span><span>2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
CSS代码:
.father {
width: 500px;
height: 80px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
flex-wrap: wrap;
}
.father span {
width: 30%;
border: 1px solid #000;
}
.int_1 {
flex: 1;
}
.int_2 {
flex: 2;
}
.int_4 {
flex: 4;
}
div.percentage span {
flex: 30%;
}
2.align-self(控制子项的侧轴对齐方式)
例如:align-self:flex-end
效果:
HTML代码:
子项flex-end:
<div class="father int">
<span>flex-start</span>
<span class="flex_end">flex-end</span>
<span>flex-start</span>
<span>flex-start</span>
</div>
CSS代码:
.father {
width: 500px;
height: 80px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: flex-start;
}
.father span {
width: 30%;
border: 1px solid #000;
}
.flex_end {
align-self: flex-end;
}
3.order(控制子项顺序,值越小越前,默认为0)
例如:order:-1
效果:
HTML代码:
子项order=-1 :
<div class="father int">
<span>1</span>
<span class="order_-1">2(order: -1)</span>
<span>3</span>
<span>4</span>
</div>
CSS代码:
.father {
width: 500px;
height: 80px;
background-color: pink;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: flex-start;
}
.father span {
width: 30%;
border: 1px solid #000;
}
.order_-1 {
order: -1;
}