背景

flexbox 模型的产生主要是为给布局、对齐和容器内的空间分配提供一个更有效的方法,即使尺寸未知或是动态改变的(flex,收缩,弹性 就是为此命名)。

flex布局使得容器能够改变子元素的宽高来更好的填充可用空间,它既可以扩大子元素填充可用空间也可以收缩以防止溢出。

最重要的是,相对于传统的规则布局(block是垂直排列,inline是横向排列),flexbox布局方向是可以改变的。

基础与术语

flexbox并非单独属性而是一个完整模型,它包含一系列属性。一些属性设置在容器(flex container)上而另一些是设置在子元素上(flex items)。

规则布局是基于block和inline flow directions,flex 布局则基于"flex-flow directions"。请看下面图解。

简单来说,items的布局方向沿着主轴和侧轴。

flex container的属性:

display

display定义一个flex container是行内元素还是块级元素,取值是:

  • flex
  • inline-flex

注意:这只是指定容器是inline还是block,对于子元素并没有影响。

flex-direction

  • row (默认值): 与文本方向相同,比如一般是ltr
  • row-reverse: 与文本方向相反
  • column: 和row一样,不过是从顶部到底部
  • column-reverse: 和row一样不过是从底部到顶部

flex-wrap

  • nowrap(默认值): 单行,与文本方向一致
  • wrap: 多行,与文本方向一致
  • wrap-reverse: 多行,与文本方向相反

flex-flow

这个属性是flex-direction和flex-wrap的集合体,用法如下

flex-flow: <‘flex-direction’> || <‘flex-wrap’>

justify-content

这个属性是针对主轴来讲的,用来定义空间分配

  • flex-start(默认值): 子元素朝向起始线填充
  • flex-end: 子元素朝向终止线填充
  • center: 子元素沿主轴线居中
  • space-between:子元素均匀分布,第一个子元素在起始线,最后一个元素在终止线
  • space-around: 子元素均匀分布在主轴上

align-items

这个属性是针对侧轴来说。

  • flex-start: 子元素对齐侧轴上沿
  • flex-end:子元素对齐侧轴下沿
  • center: 子元素沿侧轴居中
  • baseline: 子元素沿基线对齐
  • stretch(默认值):拉伸填充父容器

flex-items的属性

order

默认来说,子元素按本来代码顺序布局,但我们可以利用order属性改变这个顺序。

用法: .item { order: <integer>; }

flex-grow

这个属性接受一个无单位的值定义了子元素的所占比例。

用法: .item { flex-grow: <number>; /* default 0 */ }

flex-shrink

定义了子元素的收缩比例。

用法:.item { flex-shrink: <number>; /* default 1 */ }

flex-basis

指定子元素的初始尺寸,在未经过任何flex计算时候。

用法: .item { flex-basis: <length> | auto; /* default auto */ }

可能不太好理解可以参考这个问答:What exactly flex-basis property sets?

flex

这个是flex-grow,flex-shrink,flex-basis集合体的简写,语法如下:

.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }

推荐这样使用而不要分别设置。

align-self

这个属性是对特定某个item设置侧轴对齐方式以用来覆盖容器的align-items属性。

实例解析

待编辑

flexbox前缀

由于这个属性较新,需要考虑兼容性的问题,这里给出sass的@mixin帮助使用

@mixin flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
} @mixin flex($values) {
-webkit-box-flex: $values;
-moz-box-flex: $values;
-webkit-flex: $values;
-ms-flex: $values;
flex: $values;
} @mixin order($val) {
-webkit-box-ordinal-group: $val;
-moz-box-ordinal-group: $val;
-ms-flex-order: $val;
-webkit-order: $val;
order: $val;
} .wrapper {
@include flexbox();
} .item {
@include flex(1 200px);
@include order(2);
}

相关属性

Grid

浏览器支持

参考资料

本文主要引用翻译自:A Complete Guide to Flexbox

[css知识体系]flexbox模型的更多相关文章

  1. WEBBASE篇: 第五篇, CSS知识3

    CSS知识3 框模型: 一,外边距(上文) 二, 内边距    1,什么是内边距? 内边距就是内容与元素边缘之间的距离: 注: 内边距会扩大元素边框内所占的区域的 语法: padding: 四个方向的 ...

  2. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  3. 林大妈的CSS知识清单(二)可见格式化模型(内含margin塌陷与浮动闭合的解决方案)

    盒模型.浮动和定位是CSS中最重要的三个概念.它们共同决定了一个元素在页面中以怎样的形式进行排布与显示. 一.盒模型 1. 定义 盒模型是CSS的核心概念.一个页面中,所有的元素(不管他最终显示是圆形 ...

  4. android知识体系

    1.Android架构分为4层*应用程序层 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等.所有的应用程序都是 ...

  5. Web前端知识体系精简

    Web前端技术由html.css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言.而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知 ...

  6. 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

    前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...

  7. css知识总结

    ---# 学习目标:> 1. 学会使用CSS选择器> 2. 熟记CSS样式和外观属性> 3. 熟练掌握CSS各种选择器> 4. 熟练掌握CSS各种选择器> 5. 熟练掌握 ...

  8. 【转】Java开发必须要知道的知识体系

    Java Java是一门超高人气编程语言,拥有跨平台.面向对象.泛型编程等特性.在TIOBE编程语言排行榜中,连续夺得第一宝座,而且国内各大知名互联网公司,后端开发首选语言:非Java莫属.今天只是梳 ...

  9. Web前端知识体系

    看到一篇不错的文章,拿来收藏和分享. 原文:http://mp.weixin.qq.com/s/UFTfdE7LYhHquWEzwZKLCQ Web前端技术由html.css和 javascript三 ...

随机推荐

  1. SQL回顾1

    1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID,Cname,T ...

  2. postgresql绿色版安装及Navicat创建数据库,导入导出sql

    转载:https://www.cnblogs.com/winkey4986/p/5360551.html 1.设置安装路径为:D:\soft\pgsql,数据存储路径为:D:\soft\pgsql\d ...

  3. 牛客网NOIP赛前集训营-提高组(第七场)B-随机生成树

    题目描述 牛牛在纸上画了\(N\)个点(从\(1\)到\(N\)编号),每个点的颜色用一个整数描述. 牛牛决定用这\(N\)个点随机生成一棵树,生成的规则如下: \(1\)号点是根节点 对于\(2\) ...

  4. python爬虫 1.自己定义类实现scrapy框架的基本功能

    1.定义调度器,引擎,下载器,爬虫器,管道器 # 调度器,下载器,爬虫器,引擎,管道类 class Scheduler(): """调度器类""&qu ...

  5. python3 内置函数enumerate

    一.简介: 该函数在字面上是枚举.列举的意思,用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列, 同时列出数据和数据下标,一般用在 for 循环当中,可同时得到数据对象的值及对应的 ...

  6. 每天一个linux命令:less(14)

    less less命令的作用与more十分相似,都可以用来浏览文字档案的内容,less 在查看之前不会加载整个文件 .用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页. ...

  7. PCB六层板学习(一)

    一.原理图的网表导出及版本转换 安装Cadence后,打开RK3288的原理图. 首先点击rk3288-mid.dsn >> 然后有一个Create netlist的图标(当然咋Tools ...

  8. Codeforces Round #578 (Div. 2) E. Compress Words (双哈希)

    题目:https://codeforc.es/contest/1200/problem/E 题意:给你n个单词,你需要把他合成成一个句子,相邻的两个单词,相邻部分相同的话可以把其中一个的删掉 思路:因 ...

  9. 纯CSS 常见3D实例

    一.正方体 我认为正方体可以算是3D图像的基础吧,首先正方体是由六个相同的面所组成,其次就需要我们依次构造.(据体构造在代码中)成平图如下: 代码如下: <!DOCTYPE html> & ...

  10. git add 添加错文件的撤销方法

    git add 添加 多余文件 这样的错误是由于,有的时候 可能 git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 撤销操作 ...