Flex布局模式/* 块元素可以设置为Flex容器 */
.container {
display: flex;
}
/*内联元素也可以设置为Flex*/
span {
display: inline-flex;
}
/* WebKit内核浏览器,如Safari, 需要加前缀*/
div {
display: -webkit-flex; /*Safari*/
display: lfex;
}float, clear, vertical-align属性全部失去意义, 没有效果了table<table>标签来实现positonposition属性具有革命性floatfloat技术的初衷并不是为了布局, 而是用来处理文本与图片的排版问题float再配合<div>,<span>,几乎可以完全任何页面布局clearflexfloat属性,没了浮动当然也不再需要clearvertical-align属性也失效gridTips: 布局演变史: 表格(table) ==> 定位(position) ==> 浮动(float) ==> 弹性(flex) ==> 网格(grid, 发展中...)
display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。flex布局的元素, 称为flex容器, 简称容器flex项目,简称项目<style>
/*flex容器*/
.contaier {
display: flex;
}
/*flex项目*/
.item {
...
}
</style>
...
<div class="container">
<span class="item">item1</span>
<span class="item">item2</span>
<span class="item">item3</span>
</div>main start: 起始位置main end: 结束位置main size: 单个项目占据的主轴空间cross start: 起始位置cross end: 结束位置cross size: 单个项目占据的交叉轴空间容器属性汇总:
序号 | 属性 | 描述 |
|---|---|---|
1 | flex-direction | 主轴方向(即项目排列方向) |
2 | flex-wrap | 当多个项目在一行排列不下时,如何换行 |
3 | flex-flow | flex-direction,flex-wrap的简写,默认:row nowrap |
4 | justify-content | 项目在主轴上对齐方式 |
5 | align-items | 项目在交叉轴上的对齐方式 |
6 | align-content | 项目在多根轴线上的对齐方式,只有一根轴线无效 |
序号 | 属性值 | 描述 |
|---|---|---|
1 | row 默认值 | 主轴为水平方向,起点在左边 |
2 | row-reverse | 主轴为水平方向, 起点在右边(反转) |
3 | column | 主轴为垂直方向, 起点在上边 |
4 | column-reverse | 主轴为垂直方向, 起点在下边 |
.container {
display: flex;
flex-direction: row | row-reverse | column | column-reverse;
}序号 | 属性值 | 描述 |
|---|---|---|
1 | nowrap 默认值 | 不换行 |
2 | wrap | 自动换行, 第一行排列不下, 自动转到下一行 |
3 | wrap-reverse | 自动反向换行, 第一行显示在下方, 与wrap相反 |
.container {
display: flex;
flex-wrap: nowrap | wrap | wrap-reverse;
}nowrap: (默认值)不换行wrap: 自动换行wrap-reverse: 自动反向换行flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
.container {
display: flex;
flex-flow: [flex-direction] || [flex-wrap];
/*默认*/
flex-flow: row nowrap;
}.container {
display: flex;
justify-content: flex-start | flex-end | center | space-between | space-around;
}序号 | 属性值 | 描述 |
|---|---|---|
1 | flex-start 默认值 | 左对齐 |
2 | flex-end | 右对齐 |
3 | center | 居中对齐 |
4 | space-between | 两端对齐: 项目之间间隔相等 |
5 | space-around | 项目两侧间隔相等,即项目之间间隔是项目到两端的二倍 |
.container {
display: flex;
align-items: flex-start | flex-end | center | baseline | stretch;
}序号 | 属性值 | 描述 |
|---|---|---|
1 | flex-start | 与交叉轴起点对齐, 即: 顶对齐 / 上对齐 |
2 | flex-end | 与交叉轴终点对齐, 即: 底对齐 / 下对齐 |
3 | center | 与交叉轴中间线对齐, 即: 居中对齐 |
4 | baseline | 与项目中第一行文本的基线对齐, 即文本的下边线 |
5 | stretch 默认值 | 自动伸展到容器的高度(项目未设置高度或将高度设置为auto有效) |
align-items和align-content有相同的功能,不过不同点是它是用来让每一个单行的容器居中而不是让整个容器居中align-content属性只适用于多行的flex容器,并且当交叉轴上有多余空间使flex容器内的flex线对齐align-items属性适用于所有的flex容器,它是用来设置每个flex元素在交叉轴上的默认对齐方式align-items最重要的区别.container {
display: flex;
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}序号 | 属性值 | 描述 |
|---|---|---|
1 | flex-start | 与交叉轴起点对齐 |
2 | flex-end | 与交叉轴终点对齐 |
3 | center | 与交叉轴中间点对齐 |
4 | space-between | 与交叉轴两端对齐, 轴线之间间隔相等 |
5 | sapce-around | 每根轴线间隔相等,轴线间隔比轴线到边框大一倍 |
6 | stretch 默认值 | 轴线占满整个交叉轴 |
.container {
/*弹性布局*/
display: flex;
/*以下弹性盒子容器全部属性以及默认值,即弹性盒子的默认状态*/
/*1. 主轴方向: 行(水平)*/
flex-direction: row;
/*2. 多个项目换行方式: 不换行*/
flex-wrap: nowrap;
/*3. 多个项目在主轴上的排列与换行方式的简写*/
flex-flow: row nowrap;
/*4. 多个项目在主轴上的对齐方式: 左对齐*/
justify-content: flex-start;
/*5. 多个项目在交叉轴上的对齐方式: 自动伸展到容器高度*/
align-items: stretch;
/*6. 多个项目分为多行时, 在交叉轴上排列方式: 充满整个交叉轴*/
align-content: stretch;
}flex-direction: 项目在主轴上的排列方向flex-wrap: 项目在主轴上的换行方式flex-flow: 以上属性的缩写,默认: row nowrapjustity-content: 项目在主轴上的对齐方式align-items: 适用于项目单行排列方式align-content: 适合于项目多行排列方式巧合的是, 在Flex项目也有6个可用的属性,他们分别是:
序号 | 属性 | 描述 |
|---|---|---|
1 | order | 定义项目排列顺序,索引越小超靠前,默认为0 |
2 | flex-grow | 定义项目的放大比例,默认为0表示不放大, 即就算存在剩余空间也不放大 |
3 | flex-shrink | 定义了项目的缩小比例,默认为1,即如何空间不足,则自动缩小项目来填充 |
4 | flex-basis | 定义了项目占据的主轴空间,默认值为auto, 即项目原始大小 |
5 | flex | 是flex-grow,flex-shrink,flex-basis简写,默认值: 0 1 auto, 后二个属性可选 |
6 | align-self | 个性化定定制某单个项目的对齐方式,可覆盖容器align-items属性,默认auto |
.item {
order: integer;
}.item {
flex-grow: number; /* default: 0 */
}flex-grow: 1: 每个项目等分, 都占全部的空间的N分之一(N: 项目数量)flex-grow: 2如果某个项目为2, 其它项目为1, 则它占据空间比其它项目多一倍.item {
flex-shrink: number; /*defautl: 1*/
}flex-shrink: 1: 所有项目都为1, 空间不足时, 自动等比例缩小填充主轴剩余空间flex-shrink: 如果有一个项目为0, 其它项目为1, 则空间不足时, 它并不随其它项目缩小flex-shrink: -1 无效auto, 即项目原来占据的空间大小.item {
flex-basis: length | auto; /* default auto */
}你可以设置与height或者width属性一样的绝对值,例如500px,则该项目占据固定的空间大小
.item {
flex-basis: 500px;
}flex-grow,flex-shrink和flex-basis属性的简写0 1 auto, 除第一个外, 其它二个可选.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}flex: auto: 等价于flex: 1 1 autoflex: none: 等价于flex: 0 0 autoflex-items属性auto,表示继承父元素的align-items,如果没有父元素,则等价于stretch.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}