实例讲解CSS3中的box-flex弹性盒属性布局

与此形成鲜明对比的是另一位巨星——葡萄牙队的c罗。上赛季他虽说有42个进球,但经统计,他的效率不到10%。在这个习惯统计学的社会,c罗的42球从深层分析充满了水分。此外,他的球场道德也属于低劣派,假摔贯穿全场,无处不在,江湖人送外号 "跳水运动员 ",桃色风波更是五花八门,而两者后果呢?看看吧:梅西凭借着08—09赛季带领巴萨取得西甲、国王杯、欧洲冠军联赛三冠王,取得433分,获得金球奖,而c罗只有他的一半不到!

box-flex是css3新添加的盒子模型属性,它的出现打破了我们经常使用的浮动布局,实现垂直等高、水平均分、按比例划分。但是它有一定的局限性,在firefox、chrome这浏览器下需要使用它们的私有属性来定义:firefox(-moz)、chrome(-webkit)。

一、box-flex属性
box-flex主要让子容器针对父容器的宽度按一定规则进行划分。

CSS Code复制内容到剪贴板
  1. <divclass="box">
  2. <divclass="col_1">111</div>
  3. <divclass="col_2">222</div>
  4. <divclass="col_3">333</div>
  5. </div>
  6. <styletype="text/css">
  7. .box{
  8. display:box;
  9. display:-webkit-box;
  10. display:-moz-box;
  11. background-color:#fff;
  12. width:500px;
  13. height:100px;
  14. border:1pxsolid#333;
  15. margin:0auto;
  16. }
  17. .col_1{
  18. box-flex:1;
  19. -moz-box-flex:1;
  20. -webkit-box-flex:1;
  21. background-color:#ffc;
  22. }
  23. .col_2{
  24. background-color:#ccf;
  25. box-flex:2;
  26. -moz-box-flex:2;
  27. -webkit-box-flex:2;
  28. }
  29. .col_3{
  30. background-color:#fcf;
  31. box-flex:2;
  32. -moz-box-flex:2;
  33. -webkit-box-flex:2;
  34. }
  35. </style>

注意:
父容器必须定义为display:box,其子容器才可以进行划分(如果定了display:box则该容器为内联元素,使用margin:0 auto让其居中在firefox下无效,需要通过父容器的text-align:center;来控制。但在chrome下是可以的)
上面所讲到的例子中,三个子块分别设置了1、2、2,也就是把这个父容器分成5份,分别占据了父结构宽度的1/5(100px)、2/5(200px)、2/5(200px)。
以上是按比例数来进行划分的,如果其中一个或多个子容器设置了固定宽度,其它子容器没有设置,那么设置宽度的按宽度来算,剩下的部分再按上面的方法来计算。

CSS Code复制内容到剪贴板
  1. .col_3{
  2. background-color:#fcf;
  3. width:50px;/*设置宽度为50px*/
  4. }

当子容器中需要有间隔的时候,他们平分的宽度需要减去中间的margin,然后再按比例平分。

CSS Code复制内容到剪贴板
  1. .col_2{
  2. background-color:#ccf;
  3. box-flex:2;
  4. -moz-box-flex:2;
  5. -webkit-box-flex:2;
  6. margin:020px;
  7. }

二、box属性
上面讲到的是如何将box-flex如何对父容器的宽度进行划分,现在来说一下父容器里面的box属性包括哪些。
box-orient, box-direction, box-align, box-pack, box-lines
1、box-orient
box-orient用来确定父容器里子容器的排列方式是水平还是垂直,可选属性如下:
horizontal | vertical | inline-axis | block-axis | inherit
horizontal和inline-axis属性其效果表现一致,都可以将容器水平排列,在默认情况下也呈现水平排列的样式。当父容器设置高度时,在firefox下面其子容器的高度无效,但chroma下面则有效。

CSS Code复制内容到剪贴板
  1. .col_1{
  2. height:50px;
  3. }
  4. .col_2{
  5. height:80px;
  6. }

如果你容器不设置高度,子容器的高度值才生效,在firefox下面他们的高度取其中的最大值。而chrome下面设置高度的子容器为自己的高度,未设置的其高度和最大值的高度一样,其实就是和父容器的高度一致。

CSS Code复制内容到剪贴板
  1. .box{
  2. /*未设置高度*/
  3. }
  4. .col_1{
  5. height:50px;
  6. }
  7. .col_2{
  8. height:80px;
  9. }
  10. .col_3{
  11. /*未设置高度*/
  12. }

vertical和block-axis属性效果表现一致,都可将子容器垂直排列。他们是对父容器的高度进行分配。如果子容器设置了宽度,也是谷歌下面有效,火狐无效,其它都与horizontal表现一致。

2、box-direction
box-direction用来确定父容器里面的子容器排列顺序,具有以下属性:
normal | reverse | inherit
normal是默认值,如上面测试结果。
reverse表示反转,其表现方式跟normal相反,呈现为3、2、1

3、box-align
box-align表示父容器里面子容器的垂直对齐方式,属性值为:
start | end | center | baseline | stretch
start、baseline展示效果

end展示效果

center展示效果

stretch展示效果,(谷歌下面如start)

4、box-pack
box-pack表示父容器里面子容器的水平对齐方式,可选参数如下所示:
start | end | center | justify
css代码

CSS Code复制内容到剪贴板
  1. .box{
  2. display:box;
  3. display:-webkit-box;
  4. display:-moz-box;
  5. background-color:#fff;
  6. width:500px;
  7. border:1pxsolid#333;
  8. margin:0auto;
  9. height:100px;
  10. -webkit-box-pack:start;
  11. -moz-box-pack:start;
  12. box-pack:start;
  13. }
  14. .col_1,.col_2,.col_3{
  15. width:100px;
  16. }

start:在box-pack表示水平居左对齐,如下所示:

end:在box-pack表示水平居右对齐,如下图所示

center:在box-pack表示水平居中对齐,如下图所示

justify:在box-pack表示两边对齐试

本文实例讲解CSS3中的box-flex弹性盒属性布局到此结束。远去的飞鸟,永恒的牵挂是故林;漂泊的船儿,始终的惦记是港湾;奔波的旅人,无论是匆匆夜归还是离家远去,心中千丝万缕、时时惦念的地方,还是家。小编再次感谢大家对我们的支持!

标签: box flex