-=---- 写这个东西完全是给自己看的。
初次见到这种东西的话,看看这句话 。 容易理解这是个什么东西。 一种对页面布局的新方案。
布局的传统解决方案,基于盒状模型,依赖 display
属性 + position
属性 + float
属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
给某个元素设置css 属性 display: flex;
flex布局思路按照官网说法是 有两个轴,主轴和交叉轴。他说交叉轴容易想成斜着的。其实不是。我最开始就理解错了。后来知道了。可以理解是先横后纵,或者先纵后横。
以下6个属性设置在容器(被设置了flex的元素)上。
- flex-direction 决定主轴的方向(决定先横还是先纵)
flex-direction: row | row-reverse | column | column-reverse;
- flex-wrap 决定是否换行。默认是不换行(nowrap)。也就是说当父元素改变的时,子元素会不改变轴上面元素的数量情况下自动改变大小,以适应父元素大小。而wrap值,就是换行。
flex-wrap: nowrap | wrap | wrap-reverse;
- flex-flow
flex-flow
属性是flex-direction
属性和flex-wrap
属性的简写形式,默认值为row nowrap
flex-flow: <flex-direction> || <flex-wrap>;
- justify-content
justify-content
属性定义了项目在主轴上的对齐方式。
justify-content: flex-start | flex-end | center | space-between | space-around;
- align-items
align-items
属性定义项目在交叉轴上如何对齐。
align-items: flex-start | flex-end | center | baseline | stretch;
- align-content
align-content
属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
项目上的属性 (子元素)
以下6个属性设置在项目上。
order
order
属性定义项目的排列顺序。数值越小,排列越靠前,默认为0flex-grow
flex-grow
属性定义项目的放大比例,默认为0
,即如果存在剩余空间,也不放大。 值是一个数字
/*如果只给一个项目设定了比例大小 , 那吗,就是在其他项目能正常显示的情况下, 这个项目尽可能的扩大*/
flex-shrink
flex-shrink
属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的
flex-shrink
属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink
属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。
flex-basis
flex flex
属性是flex-grow
,flex-shrink
和flex-basis
的简写,默认值为0 1 auto
。后两个属性可选。
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
该属性有两个快捷值:auto
(1 1 auto
) 和 none (0 0 auto
)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
align-self
align-self
属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
属性。默认值为auto
,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch