flex 布局
flex 模型
- main axis;
- main start;
- main end;
- cross axis;
- cross start;
- cross end;
- flex container;
- flex items;
- main size;
- cross size;
flex-flow 属性
基础
作用
- 设置 flex main-axis 方向和换行方向;
element {
flex-flow: column;
}
element {
flex-flow: column-reverse wrap;
}
成分属性
- flex-wrap 属性;
- flex-direction 属性;
简写机制
- flex-wrap;
- flex-direction;
- flex-wrap + flex-direction;
flex-direction 属性
- 设置 flex items main-axis 方向;
#col-rev {
/* 默认值,从 block-start 到 block-end */
flex-direction: row;
/* 从 block-end 到 block-start */
flex-direction: row-reverse;
/* 从 inline-start 到 inline-end */
flex-direction: column;
/* 从 inline-end 到 inline-start */
flex-direction: column-reverse;
}
flex-wrap 属性
- 设置 flex item 换行;
.content {
display: flex;
/* 默认值,不换行 */
flex-wrap: nowrap;
/* 自动换行,从 main-start 到 main-end */
flex-wrap: wrap;
/* 自动换行,从 main-end 到 main-start */
flex-wrap: wrap-reverse;
}
flex 属性
基础
作用
- 设置 flex item 拉伸参数;
#flex-container > .flex-item {
flex: auto;
}
成分属性
- flex-grow 属性
- flex-shrink 属性
- flex-basis 属性
简写机制
- auto;
- flex-grow;
- flex-basis;
- flex-grow + flex-shrink;
- flex-grow + flex-basis;
- flex-grow + flex-shrink + flex-basis;
常见属性值
- flex:1 = flex:1 1 0%;
- flex:2 = flex:2 1 0%;
- flex:auto = flex:1 1 auto;
flex-grow 属性
作用
- 设置 flex item 拉伸参数;
- 默认为 1;
.box1 {
flex-grow: 2;
}
机制
- 在 cross/main-axis 方向拉伸;
- 若多个 flex item cross/main-axis 方向大小依次为 a_1,a_2,。。.a_n
- flex-grow 依次为 b_1,b_2,。。.b_n 时;
- 当存在剩余空间,且假设其大小为 x;
- 对应 flex item 大小增加溢出空间 x 的
flex-shrink 属性
作用
- 设置 flex item 拉伸参数;
- 默认为 1;
.box1 {
flex-shrink: 2;
}
机制
- 在 cross/main-axis 方向收缩;
- 若多个 flex item cross/main-axis 方向大小依次为 a_1,a_2,。。.a_n
- flex-grow 依次为 b_1,b_2,。。.b_n 时;
- 当 flex item 溢出容器,且假设其溢出空间大小为 x;
- 对应 flex item 大小缩小溢出空间 x 的
flex-basic 属性
- 设置 flex item 在 cross/main-axis 方向的基础尺寸;
.box1 {
/* 根据容器尺寸设置大小,若无尺寸,视为 content */
flex-basis: auto;
/* 根据容器内容设置大小 */
flex-basis: content;
/* length 类型 */
flex-basis: 3px;
/* percentage 类型 */
flex-basis: 3%;
}
order 属性
作用
- 更改 flex/grid item 顺序;
语法格式
main > article {
flex: 1;
/* length 类型 */
order: 2;
}
排序机制
- order 数值越小越靠前;
垂直/水平对齐
方向
- align:cross axis 方向;
- justify:main axis 方向;
align/justify-items 属性
作用
- 设置 flex/grid 所有 item 的网格对齐样式;
- item 在 flex/gird 网格中的 cross/main axis 位置;
- justify-items 在 flex 无效;
- flex 为一维结构;
- flex 在 main axis 无网格概念;
.flex {
/* 默认值,替换元素为 start,其余为 stretch */
align-items: normal;
/* cross/cross/main-size 拉伸, margin box edges 和 outline edges 对齐 */
align-items: stretch;
/* 垂直居中 */
align-items: center;
/* 标签与其容器的 cross/cross/main-start edge 对齐 */
align-items: start;
/* 标签与其容器的 cross/cross/main-end edge 对齐 */
align-items: end;
/* 单独作用于 flex 标签 */
align-items: flex-start;
align-items: flex-end;
}
align/justify-self 属性
- 设置单个 flex/grid item 对齐样式;
- 属性值同 align-item 属性;
.flex-items {
align-self: stretch;
}
align/justify-content 属性
作用
- 设置 flex/grid 的 item 内部内容的对齐样式;
- item 内容在 item 盒子模型的对齐位置;
#container {
display: flex;
/* 默认值,stretch; */
justify-content: normal;
/* cross/cross/main-size 拉伸, margin box edges 和 outline edges 对齐 */
justify-content: stretch;
/* 垂直居中 */
justify-content: center;
/* 标签与其容器的 cross/cross/main-start edge 对齐 */
justify-content: start;
/* 标签与其容器的 cross/cross/main-end edge 对齐 */
justify-content: end;
/* 单独作用于 flex 标签 */
justify-content: flex-start;
justify-content: flex-end;
/* 标签与其容器的 left edge 对齐 */
justify-content: left;
/* 标签与其容器的 right edge 对齐 */
justify-content: right;
/* 沿 cross/main-axis 水平分布,item 之间间距相等 */
/* 两端 item 与容器两端对齐 */
justify-content: space-between;
/* 两端 item 与容器两端间距为 item 之间间距的一半 */
justify-content: space-around;
/* 两端 item 与容器两端间距和 item 之间间距相同 */
justify-content: space-evenly;
}