背景

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. java ArrayList的基本使用

    package java06; /* 数组的长度是不可以发生改变的 Arraylist 集合的长度可以发生改变 对于ArrayList来说,有一个尖括号<E>代表泛型 泛型:就是装在结合中 ...

  2. css 当文字过多时以....省略

    <!-- 公告 --> <p class="rst-promotion">公告: {{shopInfo.rst.promotion_info}}</p ...

  3. C/C++ cJSON 使用实例

    本文为转载 原文地址:http://blog.sina.com.cn/s/blog_4c0cb1c00102xg7j.html 使用说明:将cJSON.c.cJSON.h两个文件,拷贝到工程项目文件中 ...

  4. 人生苦短_我用Python_OS对目录/文件操作_005

    # coding=utf-8 import os # 操作文件和目录 ", os.getcwd()) # 获取当前文件的目录 ", os.path.realpath(__file_ ...

  5. Linux的cat命令详解

    The cat command reads one or more files and copies them to standard output 也就是说,cat命令读取文件,并显示在 stand ...

  6. gensim Load embeddings

    gensim package from gensim.models.keyedvectors import KeyedVectors twitter_embedding_path = 'twitter ...

  7. 启动kafka集群,关闭kafka集群脚本

    启动kafka集群,关闭kafka集群脚本 在$KAFKA_HOME/bin下新建如下脚本文件 start-kafka.sh #!/bin/bash BROKERS="mini41 mini ...

  8. 从头开始开发一个vue幻灯片组件

    首先新建项目vue init webpack projectName 安装依赖包npm i这些就不说了 接下来就是构建我们的swiper组件 因为我写的代码不规范, 通不过eslint的检测, 会频繁 ...

  9. tarjan复习笔记

    tarjan复习笔记 (关于tarjan读法,优雅一点读塔洋,接地气一点读塔尖) 0. 连通分量 有向图: 强连通分量(SCC)是个啥 就是一张图里面两个点能互相达到,那么这两个点在同一个强连通分量里 ...

  10. The SDK directory '/home/wangju/gitProject/Automation/D:\Android_SDK' does not exist.

    执行gradle clean命令报错 gradle clean FAILURE: Build failed with an exception. * What went wrong: A proble ...