一、Flex布局是什么?

Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

.box{display: flex;}

行内元素也可以使用Flex布局。

.box{display: inline-flex; }

Webkit内核的浏览器,必须加上-webkit前缀。

.box{display: -webkit-flex; /* Safari */display: flex; }

注意,设为Flex布局以后,子元素的floatclearvertical-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-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 */ }

它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间。

4.5 flex属性

flex属性是flex-growflex-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-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

转载于:https://www.cnblogs.com/cqlb/p/9406803.html

微信小程序css篇----flex模型相关推荐

  1. 微信小程序css篇----定位(position)

    昨天2017的微信公开课pro如期进行了,小程序将于2017年1月9日对个人开放,公司项目的demo版做了个大概,过程中花的时间最多的还是页面布局,所以后面将花一段时间将css的属性在小程序里过一篇, ...

  2. 微信小程序css篇----字体(Font)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 一.字体:font.属性在一个声明中设置所有字体属性. 可设置的属性是(按顺序): "fo ...

  3. 微信小程序css篇----背景(Background)与颜色(Color)

    一.背景:background.设置对象的背景特性.一个元素可以设置多重背景图像,每组之间用逗号隔开,如果存在重叠关系,前面的背景图像会覆盖在后面背景图上. 1.background-color:指定 ...

  4. 微信小程序css篇----1.边框(Border)

    一.边框:border 设置对象边框的特性. 1.语法:border:length style color 2.style:none ,hidden,dotted,dashed,solid,doubl ...

  5. 微信小程序第二篇实战

    title: 微信小程序第二篇实战 date: 2018-03-08 02:33:00 tags: WeChat category: WeChat description: 微信小程序第二篇实战 效果 ...

  6. 微信小程序实战篇-商品详情页(二)

    今天要讲解商品详情页中sku的弹出选着框,这个涉及css动画样式,css动画是新的知识点,我们之前并没有接触过,请大家做好笔记,我们要做的效果是酱紫的~ 这个布局难点是需要绘制一个阴影背景.弹出的动画 ...

  7. 微信小程序实战篇:商品属性联动选择(案例)

    本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示: 商品属性联动.gif 代码示例 1.commodity.xml <!-- <v ...

  8. 前端微信小程序实战篇

    电商底部导航栏的制作 我想大家对电商一定不陌生,一般电商的底部导航栏有以下几个首页.分类.购物车.个人中心. app.json是用来配置page路径以及导航栏属性的,那我们要做首页.分类.购物车.个人 ...

  9. 《微信小程序-基础篇》初识微信小程序

    大家好,好久不见了,前段时间各种原因分享不稳定,后面一段时间内参与了主站的原力计划,请麻烦各位支持一下,万分感谢- 本系列将从零开始介绍微信小程序的开发,介绍完基础以后会实际同步开发一个微信小程序的项 ...

最新文章

  1. 史上世界上最惨烈的几次股灾!
  2. 使用自动化插件release来管理maven项目的版本发布
  3. 前端进阶(三) webpack处理vue以及vue-cli脚手架环境
  4. oracle中database,Oracle Database 一些基本的视图和表
  5. CodeSmith连接mysql
  6. 为什么一般不将'在制品转出科目'设为初级成本要素
  7. 利用Azure DevOps建设ExcelBDD的持续集成
  8. c++怎么保留小数位数
  9. 4 读写文件_块存储、文件存储、对象存储的区别
  10. VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
  11. mysql scope runtime_maven scope provided和runtime的例子
  12. java 获取oracle表结构_Java导出oracle表结构实例详解
  13. 【Hbase】eclipse下远程调试Hbase
  14. 一支口红用了5年_用了7年微信才知道!原来微信隐藏5大实用功能,比app更好用...
  15. 快速从小白到大牛的Python学习路线
  16. Ubuntu 16.04配置VNC进行远程桌面连接
  17. 自动驾驶 8-1: 平方误差准则和最小二乘法 (上) Squared Error Criterion and the Method of Least Squares (Part 1)
  18. 2阶魔方矩阵matlab,matlab魔方矩阵
  19. 移动硬盘无法在Mac上装载如何修复?
  20. ex10_11修改Loan类

热门文章

  1. 读书笔记-简单叙述对象关系
  2. Linux突然断电造成系统文件损坏而无法启动
  3. SQL水平测试题目(一)
  4. 拆解百度自动驾驶最新动作:Apollo企业版和Apollo 3.5里的生意经和新风向 | CES 2019...
  5. Java多线程_复习(更新中!!)
  6. LINUX系统一一CentOS6.5之固化Ip
  7. 利用opencv作透明重叠人群密度热度图
  8. HAProxy安装和配置大全
  9. JAVA面向对象-----接口与类、接口之间的关系
  10. corosync+pacemaker来实现http服务的高可用性