copy from [runoob](https://www.runoob.com/w3cnote/flex-grammar.html)
[TOC]
## Flex 布局语法教程
## 一、Flex布局是什么?
Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为Flex布局。
~~~
.box{
display: flex;
}
~~~
行内元素也可以使用Flex布局。
~~~
.box{
display: inline-flex;
}
~~~
Webkit内核的浏览器,必须加上-webkit前缀。
~~~
.box{
display: -webkit-flex; /* Safari */
display: flex;
}
~~~
注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。
## 二、基本概念
采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
## 三、容器的属性
以下6个属性设置在容器上。
> * flex-direction
> * flex-wrap
> * flex-flow
> * justify-content
> * align-items
> * align-content
### 3.1 flex-direction 决定主轴的方向
flex-direction属性决定主轴的方向(即项目的排列方向)。
~~~
.box {
flex-direction: row | row-reverse | column | column-reverse;
}
~~~

它可能有4个值。
> * row(默认值):主轴为水平方向,起点在左端。
> * row-reverse:主轴为水平方向,起点在右端。
> * column:主轴为垂直方向,起点在上沿。
> * column-reverse:主轴为垂直方向,起点在下沿。
### 3.2 flex-wrap 如果一条轴线排不下,如何换行
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

~~~
.box{
flex-wrap: nowrap | wrap | wrap-reverse;
}
~~~
它可能取三个值。
(1)nowrap(默认):不换行。

(2)wrap:换行,第一行在上方。

(3)wrap-reverse:换行,第一行在下方。

### 3.3 flex-flow 属性是flex-direction属性和flex-wrap属性的简写形式
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
~~~
.box {
flex-flow: <flex-direction> <flex-wrap>;
}
~~~
### 3.4 justify-content 在主轴上的对齐方式
justify-content属性定义了项目在主轴上的对齐方式。
~~~
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
~~~

它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。
> * flex-start(默认值):左对齐
> * flex-end:右对齐
> * center: 居中
> * space-between:两端对齐,项目之间的间隔都相等。
> * space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
### 3.5 align-items 在交叉轴上如何对齐
align-items属性定义项目在交叉轴上如何对齐。
~~~
.box {
align-items: flex-start | flex-end | center | baseline | stretch;
}
~~~

它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。
> * flex-start:交叉轴的起点对齐。
> * flex-end:交叉轴的终点对齐。
> * center:交叉轴的中点对齐。
> * baseline: 项目的第一行文字的基线对齐。
> * stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
### 3.6 align-content 多根轴线的对齐方式
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
~~~
.box {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
~~~

该属性可能取6个值。
> * flex-start:与交叉轴的起点对齐。
> * flex-end:与交叉轴的终点对齐。
> * center:与交叉轴的中点对齐。
> * space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
> * space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
> * stretch(默认值):轴线占满整个交叉轴。
## 四、项目的属性
以下6个属性设置在项目上。
> * order
> * flex-grow
> * flex-shrink
> * flex-basis
> * flex
> * align-self
### 4.1 order 项目的排列顺序
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
~~~
.item {
order: <integer>;
}
~~~

### 4.2 flex-grow 项目的放大比例
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
~~~
.item {
flex-grow: <number>; /* default 0 */
}
~~~

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
### 4.3 flex-shrink 项目的缩小比例
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
~~~
.item {
flex-shrink: <number>; /* default 1 */
}
~~~

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效。
### 4.4 flex-basis 定义了在分配多余空间之前 项目占据的主轴空间
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
~~~
.item {
flex-basis: <length> | auto; /* default auto */
}
~~~
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
### 4.5 flex flex属性是flex-grow, flex-shrink 和 flex-basis的简写
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
~~~
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
~~~
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
### 4.6 align-self 覆盖align-items属性
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
~~~
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
~~~

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。
> 来源:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
- 内容说明
- git的使用
- 常用复制
- mysql
- uniapp
- 学习记录
- 序言 导航栏目
- 1, css flex布局学习
- vscode插件开发
- Yaf框架使用
- 代码编辑器使用
- 企业运营
- vue组件项目使用markdown作为文档
- 使用gulp
- 待学习内容
- 常用业务逻辑
- 定时任务
- 多语言
- 微信支付
- 视频处理
- excel导出导入
- php
- 架构
- 配置
- sysconfig
- 微擎二次开发
- 人人商城后台开发
- 后台管理-菜单权限
- 一些建的表
- 常用
- form
- 常用函数
- 人人商城开发
- FoxUI
- 插件二次开发
- 资金
- 注册推荐人
- 基本
- 后台开发
- thinkcmf-curd
- apis
- thinkcmf
- fastadmin
- swoole
- thinkphp使用swoole
- composer
- 开发composer包
- 错误记录
- laraval框架
- php跨域问题
- nginx
- apache
- EasySwoole的使用
- 学习笔记1
- thinkphp6
- 文件上传
- mysql
- 存储过程
- 日志查询 binlog
- 数据库优化
- php调试
- 开源项目二次开发笔记
- 禾匠
- 订单
- 测试接口
- 知识体系
- php遇到的错误
- php8新特性
- 快速开发-基础包-文档
- vue-open-pc基础架构
- 序言
- 页面创建
- axios接口调用
- vue-open-mobile基础结构
- 序言
- 微擎-应用市场
- mulo-admin-tp
- zoo-admin
- 基础增删改查
- 列表页
- curd
- Popup弹出层
- 项目架构
- 微服务
- nginx
- 常用命令
- 配置说明
- 配置负载均衡
- 代理内网数据库
- 限流
- 变量
- nginx语法
- 项目管理
- 测试体系
- 压力测试
- Jenkins
- 开发环境构建
- 服务器
- linux系统
- linux常用命令
- 日志系统
- 自动化部署
- 宝塔webhook
- 项目部署
- 大数据
- hadoop
- HBase 亿级数据的分布式非关系型数据库
- MaxCompute 阿里云云计算数据库
- Hive 数据库for hadoop
- redis
- linux
- 部署环境常用
- 个人开源npm包-文档
- mulo-test
- mulo-cli包 构建工具
- 命令说明
- mulo-tools 常用js工具整合
- Url
- 辅助函数
- jsx
- FileSystem
- mulo-codes包 我的常用代码 演示包
- mulo-validate 验证类函数
- vscode-codes包 vscode代码片段
- phpdefault
- js
- php-thinkcmf
- mulo-ui
- 代码高亮实现
- 文档功能实现
- css包规则
- mulo
- mulo-admin
- 列表页组件
- 列表页组件-筛选
- vue插件
- npm包学习和使用
- Markdown-it解释器
- cp-cli文件,文件夹复制
- remark markdown的插件
- transliteration 文字转换为拼音
- 常用包
- lerna 代码git库耦合度
- lodash
- web全栈
- vite
- web应用性能优化
- vue3
- vue3组件开发
- 构建工具
- rollupjs
- 前端常见问题
- 创建跨域代理服务
- 背景精灵图制作
- js导出导入excel
- gulp构建工具
- 使用gulp打包scss
- gulp-autoprefixer根据浏览器处理前缀
- gulp-cssmin压缩css
- gulp+browser-sync前端自动化
- 使用记录
- webpack的使用
- 2019年11月4日实战记录
- 2019年11月4知识点
- 浏览器自动刷新 webpack-dev-server
- 被坑日记
- 使用eleme的md加载器
- 加载资源
- 自定义loader
- 使用记录
- 开发library
- 使用jsx
- 动态打包
- vue
- cli3
- 常用复制
- 常用插件的使用
- jquery
- vux状态管理
- [组件库]mint-ui饿了么
- [上拉加载]模块
- bootstrap框架引入
- sass样式
- axios数据交互
- swiper幻灯片插件
- storejs本地存储插件
- vuet状态管理(vux的简化版)
- nuxt服务端渲染
- 基础使用
- vue与后台交互数据
- 创建项目
- 使用常见问题
- 前后端分离权限认证方案
- 使用记录-遇到的问题
- 组件开发
- vue知识map
- 常用组件库
- dev tool
- 常用组件库整理
- angular
- 学习记录-2017
- css样式
- bootstrap笔记
- css3使用
- 使用记录
- 动画
- css单位
- 实例代码
- 悬浮窗
- 被坑日记
- 贝塞尔曲线
- javascript
- javascript高级使用
- javascript写法收集
- 代码记录
- jquery的使用
- 发送验证码倒计时
- js实现addclass removeclass
- 基础
- ES6的新特性
- javascript遇到的坑
- nodejs
- 优秀开源项目
- [框架]express
- 基础
- test
- 进程管理
- knexjs 查询构建
- mogodb
- npm
- 开发npm包
- 开发全局包-命令行工具
- 开发细节记录
- 使用记录
- npm包的依赖说明
- 命令说明
- typescript
- 入门
- typescript基础
- 声明文件呢 types .d.ts
- uni-app
- 使用记录
- 采坑日记
- web技术点
- html meta标签的常用定义
- 强制跳转到https
- 开发library
- babel编译器
- websocket
- socket.io
- CDN
- 正则使用记录
- 创建技术文档
- sveltejs框架
- 测试
- 测试说明
- e2e UI测试
- 参考
- ava
- vue测试
- pc应用electron.js
- 开发资源
- Flutter
- python
- bui
- eslint
- 云开发
- uniCloud
- app开发
- apicloud-app开发
- 常用复制
- uni-app
- 游戏开发
- phaser 2d游戏框架
- 1 基本学习 ,创建游戏,场景,加载资源
- 2 摄像机,舞台,世界,缩放控制
- 3 显示对象,图片 图形 按钮 精灵
- 4 其他
- 5 文字
- 6 组
- 7 动画
- 8,atlas的制作和使用,
- 我的composer包
- mulo-app 应用常用类库
- 更多知识随手记一下
- 教育法
- 物联网
- 51单片机
- arduino单片机
- 被坑日记
