前言
你们还在仅仅使用块、行内、表格、定位等传统布局方式进行网页的布局吗?
告诉你们一个新的布局模式,CSS3中新引入的FlexBox布局,布局方式十分灵活,含有优秀和惊奇的新特性,而且在主流浏览器上的兼容也不错,是新布局方式的首选。
下面说一下。
FlexBox简介
FlexBox布局,全称“CSS Flexible Box Layout Module”,即伸缩布局盒,目的在于提供一个更好更有效的布局方式,用来控制项目的对齐和自由分配容器空间。
基础术语
FlexBox和CSS3的其它属性不太一样,它是一个模块,并非一个属性,其中包含多个CSS3 属性。
看一下基础术语概念图:
浏览器支持
可以看到对于浏览器的支持率很好,使用率也达到了90%以上。
浏览器的支持:
- Chrome any
- Firefox any
- Safari any
- Opera 12.1+
- IE 10+
- iOS any
- Android any
历史
FlexBox从2009年7月W3C工作草案,一直到现在,话法规范主要分为以下三个版本规范:
- 旧版本: 2009年版本,使用
display:box
和display:inline-box
- 混合版本: 2011年版本,使用
display:flexbox
和display:inline-flexbox
- 新版本:使用
display:flex
和display:inline-flex
所以为了让各类浏览器可以全部兼容,我们至少要写上面这三种版本的相应语法。
各属性说明
display
用于定义FlexBox容器。
.container {display: flex; /* or inline-flex */
}
flex-direction
用来设置主轴排列方向。
.container {flex-direction: row | row-reverse | column | column-reverse;
}
flex-wrap
用于设置换行,默认nowrap
。
.container{flex-wrap: nowrap | wrap | wrap-reverse;
}
flex-flow
是flex-direction
和flex-wrap
两个属性的合并缩写。
flex-flow: <‘flex-direction’> || <‘flex-wrap’>
justify-content
设置主轴的对齐方式。
.container {justify-content: flex-start | flex-end | center | space-between | space-around;
}
align-items
设置侧轴的对齐方式。
.container {align-items: flex-start | flex-end | center | baseline | stretch;
}
align-content
多行时,侧轴的对齐方式。
.container {align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
order
排序序号。
.item {order: <integer>;
}
flex-grow
设置项目的扩展比例。
.item {flex-grow: <number>; /* default 0 */
}
flex-shrink
设置项目的缩小比例。
.item {flex-shrink: <number>; /* default 1 */
}
flex-basis
定义Flex项目在分配Flex容器剩余空间之前的一个默认尺寸。
.item {flex-basis: <length> | auto; /* default auto */
}
如果设置为0,内容不在考虑周围额外空间。如果设置为auto,额外空间会基于flex-grow值做分布。如下图所示:
flex
flex是flex-grow
,flex-shrink
和flex-basis
三个属性的缩写。第二个和第三个参数(flex-shrink
和flex-basis
)是可选值。其默认值是0 1 auto
。
.item {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
align-self
用来在单独的伸缩项目上覆写默认的对齐方式
.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
概要图
前缀脚本工具
关于编写各个不同兼容版本的前缀代码,可以使用autoprefixer
脚本,这个脚本会解析CSS文件并且添加浏览器前缀到CSS相应规则中。
自动前缀工具 autoprefixer
拓展资源
FlexBox属性工具 Flexbox playground
FlexBox Games FLEXBOX FROGGY
W3C文档 Flexbox in the CSS specifications
博客名称:王乐平博客
博客地址:http://blog.lepingde.com
CSDN博客地址:http://blog.csdn.net/lecepin