通过阅读和学习书籍《CSS3实战》总结
《CSS3实战》/成林著.—北京机械工业出版社2011.5
弹性盒模型(Flexible Box Moudle),该模型用于决定元素在盒子中的分布方式以及处理盒子的可用空间。这与XUL(Firefox浏览器的用户交互语言)相似,其他语言也使用相同的盒模型。如XAML,GladeXML等。通过弹性盒模型,可以轻松地创建自适应浏览器窗口的流动布局或自适应字体大小的弹性布局。
兼容性::弹性盒模型规范是W3C标准化组织于2009年发布的,目前还没有主流浏览器对其进行支持,不过采用Webkit和Mozilla渲染引擎的浏览器都自定义了一套私有属性,用来支持弹性盒模型。
采用Webkit渲染引擎的浏览器主要包括Safari和Chrome浏览器,该引擎支持以-webkit为前缀的私有属性。
Mozilla渲染引擎的浏览器主要包括Firefox浏览器,该引擎支持以-moz为前缀的私有属性。
相关属性:
box-align:定义子元素在盒子垂直方向上的空间分配方式
box-direction:定义盒子的显示顺序
box-flex:定义子元素在盒子内的自适应尺寸
box-flex-group:定义自适应子元素群组
box-lines:定义子元素分列显示
box-ordinal-group:定义子元素在盒子内的显示位置
box-orient:定义盒子分部的坐标轴
box-pack:定义子元素在盒子内水平方向的空间分配方式
该属性可用于定义盒子元素内部的流动布局方向.在使用弹性盒子模型时,需要先把父容器的display属性设置为box或者inline-box。
语法:
box-orient:horizontal | vertail | inline-axis | block-axis | inherit
取值简单说明:
horizontal
:盒子元素从左到右在一条水平线上显示它的子元素。
vertail
:盒子元素从上到下在一条垂直线上显示它的子元素。
inline-axis
:盒子元素沿着内联轴显示它的子元素。
block-axis
:盒子元素沿着块轴显示它的子元素。
实战体验:设计多栏布局
<div id="box">
<div id="box0">
"images/web_01.gif" />div>
<div id="sub-box">
<div id="box1">
"images/web_02.gif" />div>
<div id="box2">
"images/web_03.gif" />div>
<div id="box3">
"images/web_04.gif" />div>
div>
div>
<style type="text/css">
body{/*文档样式*/
margin:0;padding:0px;/*清除页边距*/
text-align:center;/*文档居中对齐*/
background:#170843;
}
#box{
margin:auto;/*文档居中对齐*/
text-align:center;
width:975px;
}
/*定制各个栏目的宽度*/
#box1{width:185px;}
#box2{width:601px;}
#box3{width:189px;}
/*定制子包含框的盒子显示,其包含的元素水平流动*/
#sub-box{
display:-moz-box;
display:-webkit-box;
display:box;
box-orient:horizontal;
-moz-box-orient:horizontal;
-webkit-box-orient:horizontal;
}
style>
演示效果:
box-direction属性可以改变盒子元素中内部元素的流动顺序,该属性基本语法:
box-direction:normal | reverse | inherit
取值简单说明:
normal
:正常显示顺序,即如果盒子元素的box-origent属性值为horizontal,则其包含的子元素按照从左到右的顺序显示,即每个子元素的左边总是靠近前一个子元素的右边;如果盒子元素的box-origent属性值设置为vertical,则其包含的子元素按照从上到下的顺序显示。
reverse
:反向显示,盒子所包含的子元素的显示顺序将于normal相反。
inherit
:继承上级元素的显示顺序。
实战体验:反向布局网页(以上面的案例为基础):
CSS3代码:
<style>
body{
margin:0;padding:0px;
text-align:center;
background:#170843;
}
#box{
margin:auto;
text-align:center;
width:975px;
}
#box1{width:185px;}
#box2{width:601px;}
#box3{width:189px;}
#sub-box{
display:-moz-box;
display:-webkit-box;
display:box;
box-orient:horizontal;
-moz-box-orient:horizontal;
-webkit-box-orient:horizontal;
box-direction:reverse;
-moz-box-direction:reverse;
-webkit-box-direction:reverse;
}
style>
演示效果:
box-direction属性可以改变盒子内部元素的流动顺序,而box-ordinal-group属性能够设置每个子元素在盒子中的具体显示位置,语法如下:
box-ordinal-group:<integer>
取值说明:
属性值是一个自然数,从1 开始,用来设置子元素的位置符号。子元素的分布将根据这个属性值从小到大进行排列。在默认情况下,子元素将根据元素的位置进行排列。
注意:如果没有指定box-ordinal-group属性值的子元素,则其序号默认都为1,并且序号相同的元素将按照他们在文档中的加载的顺序进行排列。
实战体验:垂直网页布局
HTML代码:
<div id="box">
<div id="box1">
"images/web1_01.gif" />div>
<div id="box2">
"images/web1_02.gif" />div>
<div id="box3">
"images/web1_03.gif" />div>
<div id="box4">
"images/web1_04.gif" />div>
div>
CSS3代码:
<style type="text/css">
body {
margin:0;
padding:0;
text-align:center;
background:#d9bfe8;
}
#box {
margin:auto;
text-align:left;
width:988px;
}
/*定义盒形显示及盒内元素垂直显示*/
#box {
display : -moz-box;
display : -webkit-box;
display : box;
box-orient:vertical;
-moz-box-orient:vertical;
-webkit-box-orient:vertical;
}
/*根据网页内容的现实需要,借助弹性盒模型调整各个板块的显示顺序*/
#box1 {/*设置第一个元素显示在第二个位置*/
-moz-box-ordinal-group : 2;/*兼容Mozilla Gecko引擎*/
-webkit-box-ordinal-group : 2;/*兼容Webkit引擎*/
box-ordinal-group : 2;/*标准用法*/
}
#box2 {/*设置第二个元素显示在第三个位置*/
-moz-box-ordinal-group : 3;/*兼容Mozilla Gecko引擎*/
-webkit-box-ordinal-group : 3;/*兼容Webkit引擎*/
box-ordinal-group : 3;/*标准用法*/
}
#box3 {/*设置第三个元素显示在第一个位置*/
-moz-box-ordinal-group : 1;/*兼容Mozilla Gecko引擎*/
-webkit-box-ordinal-group : 1;/*兼容Webkit引擎*/
box-ordinal-group : 1;/*标准用法*/
}
#box4 {/*设置第四个元素显示在第四个位置*/
-moz-box-ordinal-group : 4;/*兼容Mozilla Gecko引擎*/
-webkit-box-ordinal-group : 4;/*兼容Webkit引擎*/
box-ordinal-group : 4;/*标准用法*/
}
style>
演示效果: