CSS3弹性布局

2009年,W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局,使用该模型可以轻松地创建自适应窗口的流动布局,或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案,其中混合过渡版本主要针对IE10进行兼容。目前,CSS3弹性布局多应用于移动端网页布局。

1、旧版本弹性盒

弹性盒是CSS3新增的布局模型,实际上它一直都存在。最开始它作为Mozilla XUL的一个功能,被用来制作程序界面,如Firefox的工具栏。

1.1、启动弹性盒

在旧版本中启动弹性盒模型,只需设置容器的display属性值为box(或inline-box),用法如下所示:

    display: box;
    display: inline-box;

弹性盒模型由两部分构成:

  • 父容器。
  • 子容器。

父容器通过display:box;或者display: inline-box;启动弹性盒布局功能。

子容器通过box-flex属性定义布局宽度,定义如何对父容器的宽度进行分配。

父容器通过如下属性定义包含容器的显示属性,简单说明如下:

  • box-orient:定义父容器里子容器的排列方式是水平还是垂直。
  • box-direction:定义父容器里子容器的排列顺序。
  • box-align:定义子容器的垂直对齐方式。
  • box-pack:定义子容器的水平对齐方式。

注意:使用旧版本弹性盒模型,需要用到各浏览器的私有属性,Webkit引擎支持-webkit-前缀的私有属性,Mozilla Gecko引擎支持-moz-前缀的私有属性,Presto引擎(包括Opera浏览器等)支持标准属性,IE暂不支持旧版本弹性盒模型。

1.2、设置宽度

在默认情况下,盒子没有弹性,它将尽可能宽地使其内容可见且没有溢出,其大小由width、height、min-height、min-width、max-width或者max-height的属性值决定。

使用box-flex属性可以把默认布局变为盒布局。如果box-flex的属性值为1,则元素变得富有弹性,其大小将按下面的方式计算。

  • 声明的大小(width、height、min-width、min-height、max-width、max-height)。
  • 父容器的大小和所有余下的可利用的内部空间。

如果盒子没有声明大小,那么其大小将完全取决于父容器的大小,即盒子的大小等于父容器的大小乘以其box-flex在所有盒子box-flex总和中的百分比,用公式表示:

    盒子的大小 = 父容器的大小 × 盒子的box-flex÷所有盒子的box-flex值的和

【示例】定义左侧边栏的宽度为240px,右侧边栏的宽度为200px,中间内容板块的宽度将由box-flex属性确定。详细代码如下所示:

    <style type="text/css">
    #container {
        /*定义弹性盒布局样式*/
        display: -moz-box;
        display: -webkit-box;
        display: box;
    }
    #left-sidebar {
        width: 240px;
        padding: 20px;
        background-color: orange;
    }
    #contents {
        /*定义中间列宽度为自适应显示*/
        -moz-box-flex: 1;
        -webkit-box-flex: 1;
        flex: 1;
        padding: 20px;
        background-color: yellow;
    }
    #right-sidebar {
        width: 200px;
        padding: 20px;
        background-color: limegreen;
    }
    #left-sidebar, #contents, #right-sidebar {
        /*定义盒样式*/
        -moz-box-sizing: border-box;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
    }
    style>
    <div id="container">
        <div id="left-sidebar">
            <h2>宋词精选h2>
            <ul>
                <li><a href="">卜算子·咏梅a>li>
                <li><a href=""> 声声慢·寻寻觅觅a>li>
                <li><a href=""> 雨霖铃·寒蝉凄切a>li>
                <li><a href="">卜算子·咏梅a>li>
                <li><a href="">更多a>li>
            ul>
        div>
        <div id="contents">
            <h1>水调歌头·明月几时有h1>
            <h2>苏轼h2>
            <p>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。p>
            <p>明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞
弄清影,何似在人间?p>
            <p>转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿
人长久,千里共婵娟。p>
        div>
        <div id="right-sidebar">
            <h2>词人列表h2>
            <ul>
                <li><a href="">陆游a>li>
                <li><a href="">李清照a>li>
                <li><a href="">苏轼a>li>
                <li><a href="">柳永a>li>
            ul>
        div>
    div>

当调整窗口宽度时,中间列的宽度会自适应显示,使整个页面总是满窗口显示。
CSS3弹性布局_第1张图片

1.3、设置顺序

使用box-ordinal-group属性可以改变子元素的显示顺序,语法格式如下:

    box-ordinal-group:

用整数值定义弹性盒对象的子元素显示顺序,默认值为1。浏览器在显示时,将根据该值从小到大显示这些元素。

【示例】以上节示例为基础,在左栏、中栏、右栏中分别加入一个box-ordinal-group属性,并指定显示的序号,这里将中栏设置为1,右栏设置为2,左栏设置为3,则可以发现三栏显示顺序发生了变化:

    #left-sidebar {
        -moz-box-ordinal-group: 3;
        -webkit-box-ordinal-group: 3;
        box-ordinal-group: 3;
    }
    #contents {
        -moz-box-ordinal-group: 1;
        -webkit-box-ordinal-group: 1;
        box-ordinal-group: 1;
    }
    #right-sidebar {
        -moz-box-ordinal-group: 2;
        -webkit-box-ordinal-group: 2;
        box-ordinal-group: 2;
    }

CSS3弹性布局_第2张图片

1.4、设置方向

使用box-orient属性可以定义元素的排列方向,语法格式如下:

    box-orient:horizontal | vertical | inline-axis | block-axis

取值简单说明如下:

  • horizontal:设置弹性盒对象的子元素从左到右水平排列。
  • vertical:设置弹性盒对象的子元素从上到下纵向排列。
  • inline-axis:设置弹性盒对象的子元素沿行轴排列。
  • block-axis:设置弹性盒对象的子元素沿块轴排列。

【示例】针对上面示例,在

标签样式中加入box-orient属性,并设定属性值为vertical,即定义内容以垂直方向排列,则代表左侧边栏、中间内容、右侧边栏的3个div元素的排列方向将从水平方向改变为垂直方向:

    #container {
        /*定义弹性盒布局样式*/
        display: -moz-box;
        display: -webkit-box;
        display: box;
        /*定义从上到下排列显示*/
        -moz-box-orient: vertical;
        -webkit-box-orient: vertical;
        box-orient: vertical;
    }

CSS3弹性布局_第3张图片
使用box-direction属性可以让各个子元素反向排序,语法格式如下:

    box-direction:normal | reverse

取值简单说明如下:

  • normal:设置弹性盒对象的子元素按正常顺序排列。
  • reverse:反转弹性盒对象的子元素的排列顺序。

1.5、设置对齐方式

使用box-pack属性可以设置子元素水平方向的对齐方式,语法格式如下:

    box-pack:start | center | end | justify

取值简单说明如下:

  • start:设置弹性盒对象的子元素从开始位置对齐,为默认值。
  • center:设置弹性盒对象的子元素居中对齐。
  • end:设置弹性盒对象的子元素从结束位置对齐。
  • justify:设置弹性盒对象的子元素两端对齐。

使用box-align属性可以设置子元素垂直方向的对齐方式,语法格式如下:

    box-align:start | end | center | baseline | stretch

取值简单说明如下:

  • start:设置弹性盒对象的子元素从开始位置对齐。
  • center:设置弹性盒对象的子元素居中对齐。
  • end:设置弹性盒对象的子元素从结束位置对齐。
  • baseline:设置弹性盒对象的子元素基线对齐。
  • stretch:设置弹性盒对象的子元素自适应父元素尺寸。

【示例】有一个

你可能感兴趣的:(#,CSS,Web,css3,前端,css)