[css知识体系]flexbox模型
背景
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);
}
相关属性
浏览器支持
参考资料
本文主要引用翻译自:A Complete Guide to Flexbox
[css知识体系]flexbox模型的更多相关文章
- WEBBASE篇: 第五篇, CSS知识3
CSS知识3 框模型: 一,外边距(上文) 二, 内边距 1,什么是内边距? 内边距就是内容与元素边缘之间的距离: 注: 内边距会扩大元素边框内所占的区域的 语法: padding: 四个方向的 ...
- 前端开发:css基础知识之盒模型以及浮动布局。
前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西? 为什么这个浮动没有效果? 这个问题楼主已经回答了n遍.今天则是把 ...
- 林大妈的CSS知识清单(二)可见格式化模型(内含margin塌陷与浮动闭合的解决方案)
盒模型.浮动和定位是CSS中最重要的三个概念.它们共同决定了一个元素在页面中以怎样的形式进行排布与显示. 一.盒模型 1. 定义 盒模型是CSS的核心概念.一个页面中,所有的元素(不管他最终显示是圆形 ...
- android知识体系
1.Android架构分为4层*应用程序层 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等.所有的应用程序都是 ...
- Web前端知识体系精简
Web前端技术由html.css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言.而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知 ...
- 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...
- css知识总结
---# 学习目标:> 1. 学会使用CSS选择器> 2. 熟记CSS样式和外观属性> 3. 熟练掌握CSS各种选择器> 4. 熟练掌握CSS各种选择器> 5. 熟练掌握 ...
- 【转】Java开发必须要知道的知识体系
Java Java是一门超高人气编程语言,拥有跨平台.面向对象.泛型编程等特性.在TIOBE编程语言排行榜中,连续夺得第一宝座,而且国内各大知名互联网公司,后端开发首选语言:非Java莫属.今天只是梳 ...
- Web前端知识体系
看到一篇不错的文章,拿来收藏和分享. 原文:http://mp.weixin.qq.com/s/UFTfdE7LYhHquWEzwZKLCQ Web前端技术由html.css和 javascript三 ...
随机推荐
- fastjson 1.1.1填坑
java封装Echart数据模型 xAxis yAxis 属性 转json赋值失败..换名即可 解决办法:升级1.2.2后即可
- springboot 操作redis
redis五大类型用法 Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Reso ...
- Python"sorted()"和".sort()"的区别
sorted(A-LIST)会返回一个新的object,不改变**A-LIST*本身. A-LIST.sort()会直接改变A-List,不产生新的object.
- java获取当前月第一天和最后一天
获取当前月第一天: /** * 获取当前月第一天 * @param month * @return */ public static String getFirstDayOfMonth(int mon ...
- SQL Server 创建表
SQL Server 创建表 我们在上一节中完成了数据库的创建,在本节,我们要往这个新的数据库中加入点数据,要想将数据添加到数据库,我们就必须在数据库中添加一个表,接下来来看看具体的操作. 我们的数据 ...
- Oracle中表连接的运行原理
Oracle优化器会自动选择以下三种方式的一种运行表连接,但在数据环境上配合强化选择合适的方式或强制使用某种方式是SQL优化的需要: NESTED LOOP 对于被连接的数据子集较小的情况, ...
- Apache Flink 进阶(六):Flink 作业执行深度解析
本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink Contributor.网易云音乐实时计算平台研发工程师岳猛分享.主要分享内容为 Flink Job 执行作业的 ...
- LUOGU P4783 【模板】矩阵求逆(高斯消元)
传送门 解题思路 用高斯消元对矩阵求逆,设\(A*B=C\),\(C\)为单位矩阵,则\(B\)为\(A\)的逆矩阵.做法是把\(B\)先设成单位矩阵,然后对\(A\)做高斯消元的过程,对\(B\)进 ...
- 韩老师CCNA学习笔记
1.MSCONFIG服务里面可以选择隐藏Windows服务,就能看出程序安装的服务.即使显示已停止,仍可能在运行 2.命令行输入netstat -anbo ,显示当前连接和端口,数字显示,以及程序的路 ...
- 116、TensorFlow变量的版本
import tensorflow as tf v = tf.get_variable("v", shape=(), initializer=tf.zeros_initialize ...