flexbox 神器确定是前端必会的。对于各类布局只要学会 flexbox 那都是 so easy 的事情。要用 flexbox,最早就是看看 caniuse 上浏览器对 flexbox 的兼容性。下面是截图:css
图片中 partial support 的左上角的数字
对应下面的意思。具体和访问连接去看,:caniuse 上浏览器对 flexbox 的兼容性.前端
仅支持old flexbox规范和不支持 warpcss3
仅支持 2012 年的语法chrome
不支持 flex-wrap 和 flex-flow 属性浏览器
部分支持(partial support)是由于有大量的 bug。布局
IE11 要加 flex-basis 属性。flex
在 IE10 和 IE11, 若是外层元素有min-height可是没有明确的 height 值,并且外层容器 (也就是父元
素) 的display为flex和flex-derection:column
, 会致使不能正确计算他们子元素的大小。flexbox
当父元素有min-height时,IE11 中子元素不能正确的垂直对齐。spa
IE 10 中, 设置-ms-flex-flow: row wrap
不会换行除非在子元素中设置 display: inline-block
firefox
firefox 的 button 元素不支持 flexbox
IE10:子元素 flex 属性的默认值是 0 0 auto 而不是 1 0 auto
Safari, 子元素的百分比高度(不用 flex)不被识别。chrome 相似的 bug 在chrome 51已经修复。
官方解释:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes
http://codepen.io/justd/pen/yydezN (flexbox 各属性 demo,下面只是 demo 的说明。demo 看不懂的时候能够看下面的说明)
row :子元素按行排列(默认从 main start 开始排)
row-reverse :子元素按行排列并反方向(从 main end 开始排)
column :子元素纵列排(从 cross start 开始排)
column-reverse 从 cross end 开始排
nowrap:不换行
wrap:换行
wrap-reverse:换行
flex-start:flex container 开始的地方
flex-end: flex container 结束的地方
center:靠中间
space-between:向两边
space-around:子元素周围用间隙环绕
stretch:拉伸占满整列
flex-start:顶部对齐
flex-end:底部对齐
center:靠中间
baseline:这个的理解看 vertical-align: baseline;
stretch:横向拉伸,纵向也拉伸
... 其它相似
定义子元素的排列顺序:从小数开始排,默认为 0
定义子元素的放大比例, 相对其它兄弟元素设置的值为基准, 默认为 0
定义子元素的缩小比例, 默认为 1
定义元素在未分配大小前所占的大小,默认 auto
容许单个自元素的对齐方式。可与其它子元素不一样。区别于父元素定义的对所有子元素起做用。默认值为 auto,表示继承父元素的 align-items 属性,若是没有父元素,则等同于 stretch。属性值含义参考父元素
flex-grow, flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto。后两个属性可选。该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,由于浏览器会推算相关值。
基于我的的理解,但愿指正。