示例见:  css3: flexbox (BTW: blog不能包含iframe script真不方便啊~~)

display:box;box-flexcss3新添加的盒子模型属性,它的出现可以解决我们通过N多结构、css实现的布局方式。经典的一个布局应用就是布局的垂直等高、水平均分、按比例划分。
目前box-flex属性还没有得到firefox、Opera、chrome浏览器的完全支持,但可以使用它们的私有属性定义firefox(-moz-)、opera(-o-)、chrome/safari(-webkit-)。

一、box-flex属性

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

html代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. }
  8. .sectionOne{
  9. background:orange;
  10. -moz-box-flex:3;
  11. -webkit-box-flex:3;
  12. box-flex:3;
  13. }
  14. .sectionTwo{
  15. background:purple;
  16. -moz-box-flex:2;
  17. -webkit-box-flex:2;
  18. box-flex:2;
  19. }
  20. .sectionThree{
  21. -moz-box-flex:1;
  22. -webkit-box-flex:1;
  23. box-flex:1;
  24. background:green;
  25. }

展示效果:
/>必须给父容器wrap定义css属性display:box其子容器才可以进行划分(如果定了display:box则该容器则定义为了内联元素,使用margin:0px auto让其居中是无效的,要想使其居中只能通过它的父容器的text-align:center);分别给sectionOne、sectionTwo、sectionThree的box-flex设置了3、2、1,也就是说这三个子容器将父容器wrap的宽度600px分为6份,sectionOne占居父结构宽度的3/6即300px,sectionOne占居父结构宽度的2/6即200px,sectionThree占居父结构宽度的1/6即100px。
以上是按比例数进行划分分配的,如果其中一个子容器或多个子容器设置了固定宽度又会怎样划分那?
如果其中一个子容器或多个子容器设置了固定宽度,其它子容器没有设置,其计算方式是这样的:子容器如果设置了固定宽度值,该子容器则直接应用设置的宽度值,其它没有设置的则再父容器的宽度基础上减去子容器设置的固定宽度,在剩下的宽度基础上按一定比例进行划分分配。请看下面代码:
HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. }
  8. .sectionOne{
  9. background:orange;
  10. -moz-box-flex:3;
  11. -webkit-box-flex:3;
  12. box-flex:3;
  13. }
  14. .sectionTwo{
  15. background:purple;
  16. -moz-box-flex:1;
  17. -webkit-box-flex:1;
  18. box-flex:1;
  19. }
  20. .sectionThree{
  21. width:200px;//设置固定宽度
  22. background:green;
  23. }

展示效果:

说明:

sectionThree设置了固定宽度为200px,父容器的宽度600px减去改子容器的200px还剩下400px,这400px宽度值则按box-flex设置的值进行划分,sectionOne占居3/4即300px,sectionTwo占居1/4即100px。

在以上代码的基础上给sectionTwo子容器添加margin:0px 50px使子容器之间产生一定的间隔其宽度又如何进行分配划分的那?接着看

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. }
  8. .sectionOne{
  9. background:orange;
  10. -moz-box-flex:3;
  11. -webkit-box-flex:3;
  12. box-flex:3;
  13. }
  14. .sectionTwo{
  15. background:purple;
  16. -moz-box-flex:1;
  17. -webkit-box-flex:1;
  18. box-flex:1;
  19. margin:0px 50px;//添加margin属性
  20. }
  21. .sectionThree{
  22. width:200px;
  23. background:green;
  24. }

展示效果:

说明:

父容器的宽度600px减去设置了子容器的200px基础上再减去100px(2×50)剩下300px,这300px宽度值则按box-flex设置的值进行划分,sectionOne占居3/4即225px,sectionTwo占居1/4即75px。

二、box属性

上面”css3弹性盒子模型之box-flex”将box-flex如何对父容器的宽度进行划分分配讲解完毕,下面在看一下父容器里面的box属性包括哪些box属性,具体属性如下代码所示:

  1. box-orient | box-direction | box-align | box-pack | box-lines

1、box-orient
box-orient(orient译为排列更准确)用来确定父容器里子容器的排列方式,是水平还是垂直。可选属性如下所示:

  1. horizontal | vertical | inline-axis | block-axis | inherit

horizontal、inline-axis说明:
给box设置horizontal或inline-axis属性其效果似乎表现一致,都可将子容器水平排列,具体两者有什么实质差别暂时还没有搞清楚。如果父容器选择horizontal或inline-axis属性对子容器进行水平排列,其是对父容器的宽度进行分配划分。此时如果父容器定义了高度值,其子容器的高度值设置则无效状态,所有子容器的高度等于父容器的高度值;如果父容器不设置高度值,其子容器的高度值才有效并且取最大高度值的子容器的高度。

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. -moz-box-orient:horizontal;
  8. -webkit-box-orient:horizontal;
  9. box-orient:horizontal;//水平排列
  10. }
  11. .sectionOne{
  12. background:orange;
  13. -moz-box-flex:1;
  14. -webkit-box-flex:1;
  15. box-flex:1;
  16. }
  17. .sectionTwo{
  18. background:purple;
  19. -moz-box-flex:2;
  20. -webkit-box-flex:2;
  21. box-flex:2;
  22. }
  23. .sectionThree{
  24. width:100px;
  25. background:green;
  26. }

展示效果:

vertical、block-axis说明:

给box设置vertical或block-axis属性(此属性是默认值)其效果似乎表现一致,都可将子容器垂直排列,具体两者有什么实质差别暂时还没有搞清楚。如果父容器选择vertical或block-axis属性对子容器进行垂直排列,其是对父容器的高度进行分配划分。此时如果父容器定义了宽度值,其子容器的宽度值设置则无效状态;如果父容器不设置宽度值,其子容器的宽度值才有效并且取最大宽度值的子容器的宽度。

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. -moz-box-orient:vertical;
  8. -webkit-box-orient:vertical;
  9. box-orient:vertical;//垂直排列
  10. }
  11. .sectionOne{
  12. background:orange;
  13. -moz-box-flex:1;
  14. -webkit-box-flex:1;
  15. box-flex:1;
  16. }
  17. .sectionTwo{
  18. background:purple;
  19. -moz-box-flex:2;
  20. -webkit-box-flex:2;
  21. box-flex:2;
  22. }
  23. .sectionThree{
  24. height:100px;
  25. background:green;
  26. }

展示效果:

inherit说明:

inherit属性则是让子容器继承父容器的相关属性。

2、box-direction

box-direction用来确定父容器里的子容器排列顺序,具体属性如下代码所示:

  1. normal | reverse | inherit

normal是默认值
按照HTML文档里结构的先后顺序依次展示。如下代码,如果box-direction设置为normal,则结构依次展示sectionOne、sectionTwo、sectionThree.

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. -moz-box-direction:normal;//设置mormal默认值
  8. -webkit-box-direction:normal;//设置mormal默认值
  9. box-direction:normal;//设置mormal默认值
  10. }
  11. .sectionOne{
  12. background:orange;
  13. -moz-box-flex:1;
  14. -webkit-box-flex:1;
  15. box-flex:1;
  16. }
  17. .sectionTwo{
  18. background:purple;
  19. -moz-box-flex:2;
  20. -webkit-box-flex:2;
  21. box-flex:2;
  22. }
  23. .sectionThree{
  24. width:100px;
  25. background:green;
  26. }

展示效果:

reverse表示反转:

如上面所示设置nomal其结构的排列顺序为sectionOne、sectionTwo、sectionThree;如果设置reverse反转,其结构的排列顺序为sectionThree、sectionTwo、sectionOne.

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:200px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. -moz-box-direction:reverse;//设置为反转
  8. -webkit-box-direction:reverse;//设置为反转
  9. box-direction:reverse;//设置为反转
  10. }
  11. .sectionOne{
  12. background:orange;
  13. -moz-box-flex:1;
  14. -webkit-box-flex:1;
  15. box-flex:1;
  16. }
  17. .sectionTwo{
  18. background:purple;
  19. -moz-box-flex:2;
  20. -webkit-box-flex:2;
  21. box-flex:2;
  22. }
  23. .sectionThree{
  24. width:100px;
  25. background:green;
  26. }

展示效果:

3、box-align

box-align表示父容器里面子容器的垂直对齐方式,可选参数如下所示:

  1. start | end | center | baseline | stretch

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:108px;
  4. display:-moz-box;
  5. display:-webkit-box;
  6. display:box;
  7. -moz-box-align:stretch;
  8. -webkit-box-align:stretch;
  9. -o-box-align:stretch;
  10. box-align:stretch;
  11. }
  12. .wrap section{
  13. height:80px;
  14. }
  15. .wrap .sectionOne{
  16. background:orange;
  17. -moz-box-flex:1;
  18. -webkit-box-flex:1;
  19. box-flex:1;
  20. }
  21. .wrap .sectionTwo{
  22. background:purple;
  23. -moz-box-flex:2;
  24. -webkit-box-flex:2;
  25. box-flex:2;
  26. height:108px;
  27. }
  28. .wrap .sectionThree{
  29. width:100px;
  30. background:green;
  31. }

start
在box-align表示居顶对齐,如下图所示

end

在box-align表示居底对齐,如下图所示

center

在box-align表示居中对齐,如下图所示

stretch

在box-align表示拉伸,拉伸到与父容器等高

3、box-pack

box-pack表示父容器里面子容器的水平对齐方式,可选参数如下所示:

  1. start | end | center | justify

HTML代码:

  1. <article>
  2. <section>01</section>
  3. <section>02</section>
  4. <section>03</section>
  5. </article>

CSS代码:

  1. .wrap{
  2. width:600px;
  3. height:108px;
  4. border:1px solid red;
  5. display:-moz-box;
  6. display:-webkit-box;
  7. display:box;
  8. -moz-box-pack:end;
  9. -webkit-box-pack:end;
  10. -o-box-pack:end;
  11. box-pack:end;
  12. }
  13. .wrap section{
  14. width:100px;
  15. }
  16. .wrap .sectionOne{
  17. background:orange;
  18. }
  19. .wrap .sectionTwo{
  20. background:purple;
  21. }
  22. .wrap .sectionThree{
  23. background:green;
  24. }

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

end

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

center

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

justify

在box-pack表示水平等分父容器宽度(唯一遗憾的是,firefox与opera暂时不支持,只有safari、chrome支持)

转: css3: display:box详解的更多相关文章

  1. CSS3盒模型display:box详解

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box ...

  2. [转]CSS3盒模型display:box详解

    时间:2014-02-25来源:网络作者:未知编辑:RGB display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布 ...

  3. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  4. CSS3 transform 属性详解(skew, rotate, translate, scale)

    写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了很多文章还是不能理解skew的原理.于是,我觉得有 ...

  5. 第94天:CSS3 盒模型详解

    CSS3盒模型详解 盒模型设定为border-box时 width = border + padding + content 盒模型设定为content-box时 width = content所谓定 ...

  6. CSS3属性transform详解【转载】

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  7. CSS3 中border-image详解

    CSS3 border-image详解.应用及jQuery插件 一.border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊 ...

  8. 第93天:CSS3 中边框详解

    CSS3 边框详解 其中边框圆角.边框阴影属性,应用十分广泛,兼容性也相对较好,具有符合渐进增强原则的特征,我们需要重点掌握. 一.边框圆角  border-radius    每个角可以设置两个值 ...

  9. css3系列之详解perspective

    perspective 简单来说,就是设置这个属性后,那么,就可以模拟出像我们人看电脑上的显示的元素一样.比如说, perspective:800px   意思就是,我在离屏幕800px 的地方观看这 ...

随机推荐

  1. js文件中调用另一个js文件:

    document.write("<script language='javascript' src='/UEditor/uparse.js'></script") ...

  2. Codility 1: equilibrium

    提交了格灵深瞳的简历后,收到需要先进行一个简单的技术测试的通知,临时抱佛脚,先刷刷上面几道题: 题目要求 A zero-indexed array A consisting of N integers ...

  3. 算法——A*——HDOJ:1813

    Escape from Tetris Time Limit: 12000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. Mysql 死锁问题

    Innodb锁系统(4) Insert/Delete 锁处理及死锁示例分析 http://mysqllover.com/?p=431 关于innodb死锁 http://afei2.sinaapp.c ...

  5. AXIS2远程调用WebService示例(Eclipse+AXIS)

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html 我们将Web Service发布在Tomcat或者其他应 ...

  6. Linux系统环境变量的四个配置文件的关系

    Linux系统环境变量配置有四个文件分别是: /etc/environment,/etc/profile,/etc/bash.bashrc,~/.bashrc 各配置文件意义 /etc/environ ...

  7. 0622 python 基础05

    使用双重for循环,打印 0~100 # -*- coding: utf-8 -*- # D:\python\test.py def printOneToHundred():     for i in ...

  8. 【Howie玩docker】-命令行只显示-bash-4.1#

    灵雀云上面用docker建了个centOS的实例,首个免费,正好当云主机来玩. 但是,打开有个问题,命令行不显示当前用户和路径. 只显示: -bash-4.1# 简单,配置文件不全而已. 下面对其重新 ...

  9. Linux下安装memcached

    Linux下安装memcached 1.运行memcached需要本文开头介绍的libevent库 $ sudo yum install libevent libevent-deve 2.下载安装me ...

  10. 动态规划以及在leetcode中的应用

    之前只是知道动态规划是通过组合子问题来解决原问题的,但是如何分析,如何应用一直都是一头雾水.最近在leetcode中发现有好几道题都可以用动态规划方法进行解决,就此做下笔录. 动态规划:应用于子问题重 ...