今天学习了flex布局,发现它是真心强大,因此必须的记录下。html
如下简单的布局要求是难以或不可能用这样的工具方便且灵活的实现:浏览器
先上一个例子:工具
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> section { height:100px; background: purple; display: flex; align-items: center; justify-content: space-around; } div { color: white; background: orange; flex: 1; margin-right: 10px; } div:last-child { margin-right: 0; } section, div { padding: 10px; } </style> </head> <body> <section> <div>This is a box</div> <div>This is a box</div> <div>This is a box</div> </section> </body>
</html>
贴上结果图(随便拉宽紫色容器内黄色的div块都能自适应宽度哟):布局
再上一张flex模型说明图学习
display: flex
的父元素(在上面的例子中<section>)被称之为 flex 容器(flex container)。下面介绍下flex容器的6个属性:flex
一、flex-direction —— 决定主轴的方向(即flex项的排列方向)。其值有如下四个:ui
row
(默认值):主轴为水平方向,起点在左端。spa
row-reverse
:主轴为水平方向,起点在右端。code
column
:主轴为垂直方向,起点在上沿。htm
column-reverse
:主轴为垂直方向,起点在下沿。
二、flex-wrap —— 默认状况下,项目都排在一条线(又称"轴线")上。flex-wrap
属性定义,若是一条轴线排不下,如何换行。其值有如下三个:
nowrap
(默认):不换行。
wrap
:换行,第一行在上方。
wrap-reverse
:换行,第一行在下方。
三、flex-flow —— flex-flow
属性是flex-direction
属性和flex-wrap
属性的简写形式,默认值为row nowrap
。
四、justify-content —— justify-content
属性定义了项目在主轴上的对齐方式。其值有如下五个:
flex-start
(默认值):左对齐。
flex-end
:右对齐。
center
: 居中。
space-between
:两端对齐,项目之间的间隔都相等。
space-around
:每一个项目两侧的间隔相等。因此,项目之间的间隔比项目与边框的间隔大一倍。
五、align-items —— justify-content
属性定义项目在交叉轴上如何对齐。其值有如下五个:
flex-start
:交叉轴的起点对齐。
flex-end
:交叉轴的终点对齐。
center
:交叉轴的中点对齐。
baseline
: 项目的第一行文字的基线对齐。
stretch
(默认值):若是项目未设置高度或设为auto,将占满整个容器的高度。
六、align-content —— align-content
属性定义了多根轴线的对齐方式。若是项目只有一根轴线,该属性不起做用。其值有如下六个:
flex-start
:与交叉轴的起点对齐。
flex-end
:与交叉轴的终点对齐。
center
:与交叉轴的中点对齐。
space-between
:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around
:每根轴线两侧的间隔都相等。因此,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch
(默认值):轴线占满整个交叉轴。
而后是flex 项(flex item)的6个属性:
order
:order
属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
flex-grow
:flex-grow
属性定义项目的放大比例,默认为0
,即若是存在剩余空间,也不放大。
flex-shrink
:flex-shrink
属性定义了项目的缩小比例,默认为1,即若是空间不足,该项目将缩小。
flex-basis
:flex-basis
属性定义了在分配多余空间以前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto
,即项目的原本大小。
flex
:flex
属性是flex-grow
,flex-shrink
和 flex-basis
的简写,默认值为0 1 auto
。后两个属性可选。
align-self
:align-self
属性容许单个项目有与其余项目不同的对齐方式,可覆盖align-items
属性。默认值为auto
,表示继承父元素的align-items
属性,若是没有父元素,则等同于stretch
。
以上内容参考来自:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Flexbox和http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool。