兼容型

概述

从2009年提出的最初草案开始,Flexbox布局经历了多次的迭代和几个语法版本的变更。详细可以参考官方说明 CSS Flexible Box布局模块

浏览器对最新flexbox规范的支持情况为:

  • Chrome 29+
  • Firefox 28+
  • Internet Explorer 11
  • Opera 17+
  • Safari 6.1+ (prefixed with -webkit-)
  • Android 4.4+
  • iOS 7.1+ (prefixed with -webkit-)

更多关于 flexbox 兼容型可以从 Can I Use 中查看 http://caniuse.com/#feat=flexbox

参考文章

关于新旧浏览器兼容型写法,可以参考以下文章

兼容性写法例子

主轴方向

从左向右排列

1
2
3

从右向左排列

1
2
3

从上向下排列

1
2
3

从下向上排列

1
2
3

示例代码

flex-direction.md

<style>

.flex-container {
  display: -webkit-box;  /* 老版本语法: Safari 3.1-6,  iOS 6-, Android browser, older WebKit browsers.  */
  display: -moz-box;    /* 老版本语法: Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;  /* 混合版本语法: IE 10 */
  display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
  display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */
}

.direction-row {
  -webkit-flex-direction: row; /* Safari */
  flex-direction: row;
}

多列和多行布局(没有找到更好的兼容型写法,有 box-lines 属性,但支持性不是很好)

如果想要实现多行和多列布局,我们可以采取 float 布局来实现。也可以通过判断 flex-wrap 支持性来动态设置 css 样式

  /**
   * 判断样式在浏览器中是否支持
   * @param styleProp
   * @returns {boolean}
   */
  function styleSupport(styleProp) {
    const prefix = ['webkit', 'moz', 'ms'];
    const $el = document.createElement('div');
    const styleText = $el.style;
    if (styleText[styleProp] !== undefined) {
      return true;
    }

    for (let i = 0; i < 3; i++) {
      const _styleProp = prefix[i] + styleProp[0].toUpperCase() + styleProp.substring(1);
      if (styleText[_styleProp] !== undefined) {
        return true;
      }
    }
    return false;
  }

  styleSupport('flexWrap');

主轴方向对齐方式

左对齐 flex-start

1
2
3
4

右对齐 flex-end

1
2
3
4

居中 center

1
2
3
4

两端对齐 space-between

1
2
3
4

平均分布 space-around

1
2
3
4

示例代码

justify-content.md

<style>
.flex-container {
  display: -webkit-box;  /* 老版本语法: Safari 3.1-6,  iOS 6-, Android browser, older WebKit browsers.  */
  display: -moz-box;    /* 老版本语法: Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;  /* 混合版本语法: IE 10 */
  display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
  display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */
}

.flex-start{
  /*老版本语法*/
  -webkit-box-pack: start;
  -moz-box-pack: start;
  /*混合版本语法*/
  -ms-flex-pack: start;

侧轴排列方式

侧轴的起点对齐 flex-start

1
2
3
4

侧轴的终点对齐 flex-end

1
2
3
4

侧轴的中点对齐 center

1
2
3
4

按照子元素第一行文字的基线对齐 baseline

1
2
3
41333333

填满容器 stretch

1
2
3
4

示例代码

align-items.md

<style>
.flex-container {
  display: -webkit-box;  /* 老版本语法: Safari 3.1-6,  iOS 6-, Android browser, older WebKit browsers.  */
  display: -moz-box;    /* 老版本语法: Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;  /* 混合版本语法: IE 10 */
  display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
  display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */
}

.align-items-start {
  /*老版本语法*/
  -webkit-box-align: start;
  -moz-box-align: start;
  /*混合版本语法*/
  -ms-flex-align: start;

多行侧轴方向对齐方式

与侧轴的起点对齐 flex-start

1
2
3
4

与侧轴的终点对齐 flex-end

1
2
3
4

与侧轴的中点对齐 center

1
2
3
4

与侧轴两端对齐 space-between

1
2
3
4

每行平均分布 space-around

1
2
3
4

各行占满整个侧轴线 stretch

1
2
3
4

示例代码

align-content.md

<style>
.flex-container {
  display: -webkit-box;  /* 老版本语法: Safari 3.1-6,  iOS 6-, Android browser, older WebKit browsers.  */
  display: -moz-box;    /* 老版本语法: Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;  /* 混合版本语法: IE 10 */
  display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
  display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */
}

.align-content-start {
  /*混合版本语法*/
  -ms-flex-line-pack: start;
  /*新版本语法*/
  -webkit-align-content: flex-start; /* Safari */
  align-content: flex-start;
Copyright © 2016 all right reserved,powered by Gitbook最后修改时间: 2016-05-11 05:11:42