box-flex的写法比flex的写法要复杂一些,兼容性的前缀要多带几个,真希望有一天flex布局能够纳入w3c标准啊!

<!DOCTYPE html>
<html>
<head>
<style>
.container{
width:80%;
margin:auto;
min-height:500px;
display: -moz-box;
display: -webkit-box;
display: box;
}
.item-1{
-moz-box-flex: 1;
-webkit-box-flex: 1;
box-flex: 1;
}
.item-2{
-moz-box-flex: 1;
-webkit-box-flex: 1;
box-flex: 1;
}
.item-3{
-moz-box-flex: 1;
-webkit-box-flex: 1;
box-flex: 1;
}
</style>
</head>
<body>
<div class="container">
<div class="item item-1">item 1</div>
<div class="item item-2">item 2</div>
<div class="item item-3">item 3</div>
</div>
</body>
</html>

box-orient, box-direction, box-align, box-pack, box-lines

box-orient
box-orient用来确定子元素的方向。是横着排还是竖着走。可选的值有:

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

其中,inline-axis是默认值。且horizontal与inline-axis的表现似乎一致的,让子元素横排;而vertical与block-axis的表现也是一致的,让元素纵列。

box-direction
box-direction是用来确定子元素的排列顺序,可选值有:

normal | reverse | inherit

box-align
box-align与box-pack都是决定盒子内部剩余空间怎么使用的。在行为效果上就是表现为“对齐”。

其中box-align决定了垂直方向上的空间利用,也就是垂直方向上的对齐表现。为了便于记忆,我们可以拿来和CSS2中的vertical-align隐射记忆,两者都有”align”,都是都是垂直方向的对齐;而剩下的box-pack就是水平方向的了。

box的可选参数有:

start | end | center | baseline | stretch

其中stretch为默认值,为拉伸,也就是父标签高度多高,其孩子元素的高度就多高。

box-pack
box-pack决定了父标签水平遗留空间的使用,其可选值有:

start | end | center | justify

就大部分的行为表现来说分别对应text-align属性的值:left | right | center | justify;但是,之所以box-pack不使用”left”, 而是”start”,是因为box-direction属性,这玩意可以反转原本的排列,原本的“左对齐”反转后结果是“右对齐”了,此时”left”显然就词不达意了,所以使用”start”更具有概括性,就是与父标签的起始位置对齐,从而不会产生语义与行为上的困扰。

box-lines
box-lines是用来决定子元素是可以换行显示呢?还是就算挤出油还是单行显示。两个可选值:

single | multiple

其中single是默认值,表示死活不换行。

==================更新于2016年3月25日=============

box-align 子元素在盒子内垂直方向上的空间分配方式
box-pack 子元素在盒子内水平方向上的空间分配方式
box-direction 盒子的显示顺序
box-flex 子元素在盒子内的自适应尺寸
box-flex-group 自适应子元素组群
box-lines 子元素分列显示,空间溢出显示
box-ordinal-group 子元素在盒子内的显示位置
box-orient 盒子分布的坐标轴

先写几个div,给上不同的颜色

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>box-orient</title>
<style type="text/css">
div { height:50px; }
#box1 { background:#F6F; }
#box2 { background:#3F9; }
#box3 { background:#FC0; } </style>
</head> <body>
<div id="box1">盒子1</div>
<div id="box2">盒子2</div>
<div id="box3">盒子3</div>
</body>
</html>

然后给body加上display:box和box-orient属性

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>box-orient</title>
<style type="text/css">
div { height:50px; }
#box1 { background:#F6F; }
#box2 { background:#3F9; }
#box3 { background:#FC0; }
body{
display : -moz-box;
display : -webkit-box;
display : box;
box-orient: horizontal;
-mozbox-box-orient: horizontal;
-webkit-box-orient:horizontal;
}
</style>
</head> <body>
<div id="box1">盒子1</div>
<div id="box2">盒子2</div>
<div id="box3">盒子3</div>
</body>
</html>

结果如下

比什么display:inline-block强多了。

再给body加上box-direction属性,可以使色块反向

body{
display : -moz-box;
display : -webkit-box;
display : box;
box-orient: horizontal;
-mozbox-box-orient: horizontal;
-webkit-box-orient:horizontal;
-moz-box-direction : reverse;
-webkit-box-direction : reverse;
box-direction : reverse;
}

box-direction的属性值要么是normal要么就是reverse,inherit什么的不重要。

ordinal的意思是序数词,顺序数的意思,而box-ordinal-group的意思就是指子元素在box中的顺序位置

我们可以这样来设置box-ordinal-group

#box1 {
-moz-box-ordinal-group :;
-webkit-box-ordinal-group :;
box-ordinal-group :;
}
#box2 {
-moz-box-ordinal-group :;
-webkit-box-ordinal-group :;
box-ordinal-group :;
}
#box3 {
-moz-box-ordinal-group :;
-webkit-box-ordinal-group :;
box-ordinal-group :;
}
#box4 {
-moz-box-ordinal-group :;
-webkit-box-ordinal-group :;
box-ordinal-group :;
}

再来讲box-flex这个属性

box-flex属性能够灵活地控制子元素在盒子中的显示空间(宽度和高度),即子元素在盒子中所占的面积。

这个属性很重要,它解决了传统设计中习惯使用百分比定义弹性布局的弊端。

box-flex的值是一个number,可以是整数或者小数。

当盒子中包含多个定义了box-flex属性的子元素时,浏览器会把这些子元素的box-flex属性值相加,然后根据它们各自的值占总值的比例来分配盒子剩余的空间。

先讲下大概的思路

在使用box-flex之前,我们要把父容器的display设置成box

#father { display: box; }

关于display:box的兼容性写法请参看flexbox兼容性写法,这里不具体说明。

然后就可以给father的boys们分房子了

#first_boy { box-flex:; }
#second_boy { box-flex:; }
#three_boy { box-flex:; }

大概的结果会是这个样子

这样的分法是比较均衡的,还有一些不均衡的分法,比如三儿子先指定要多大的空间,大儿子和二儿子再分剩下来的空间。

#first_boy { box-flex:; }
#second_boy { box-flex:; }
#three_boy { width: 300px; }

有了这样的思路,我们可以写一个比较完整的CSS Demo

#box {
margin:auto;
text-align:left;
width:1000px;
overflow:hidden;
}
#box {
display : -moz-box;
display : -webkit-box;
display : box;
box-orient: horizontal;
-mozbox-box-orient: horizontal;
-webkit-box-orient:horizontal;
}
#box1 {width:200px;}
#box2, #box3 {
border:solid 1px #CCC;
margin:2px;
}
#box2 {
-moz-box-flex:;
-webkit-box-flex:;
box-flex:;
}
#box3 {
-moz-box-flex:;
-webkit-box-flex:;
box-flex:;
}

当弹性与非弹性元素混合排版时,有可能会出现所有子元素的尺寸大于或小于盒子的尺寸,从而出现盒子空间不足或者富余的情况,这时就需要一种方法来管理盒子的空间。

如果子元素的总尺寸小于盒子的尺寸,则可以使用box-alignbox-pack属性进行管理。

box-pack属性可以在水平方向上对盒子的富余空间进行管理。

---start:所有子元素都显示在盒子的左侧,富余空间在右侧。

---end:与start相反。

---justify:富余的空间在子元素之间平均分配。

---center:富余的空间在盒子的两侧平均分配。

box-align属性可以在垂直方向上对盒子的富余空间进行管理。

---start:所有子元素沿盒子的上边缘排列,都显示在盒子的上部,富余的空间显示在盒子底部。

---end:与start相反。

---center:富余的空间在盒子的上下两侧平均分配,上面下面各一半。

---baseline:所有盒子沿着它们的基线排列,富余的空间可前可后显示。

---stretch:每个子元素的高度被调整到适合盒子的高度显示。stretch是延伸的意思。

举个栗子

body {
margin:;
padding:;
display : -moz-box;
display : -webkit-box;
display : box; -moz-box-orient : horizontal;
-webkit-box-orient : horizontal;
box-orient : horizontal; -moz-box-pack : center;
-webkit-box-pack : center;
box-pack : center; -moz-box-align : center;
-webkit-box-align : center;
box-align : center; background: #04082b url(images/map1.jpg) no-repeat top center;
}

这也是一个很好的居中方法。

box-pack和box-align会导致盒子内的元素很容易跑出盒子的包围圈,这种现象被称为空间溢出。

我们可以用overflow来处理溢出,当然,flexbox也提供了专门的属性来进行空间溢出管理,那就是:box-lines

它有两个属性值:

single:所有子元素都单行或者单列显示。

multiple:所有子元素都多行或者多列显示。

文章来源:

张鑫旭的博客

http://www.zhangxinxu.com/wordpress/2010/12/css-box-flex%E5%B1%9E%E6%80%A7%EF%BC%8C%E7%84%B6%E5%90%8E%E5%BC%B9%E6%80%A7%E7%9B%92%E5%AD%90%E6%A8%A1%E5%9E%8B%E7%AE%80%E4%BB%8B/

Flex布局之box-flex的更多相关文章

  1. css总结2:Flex 布局教程:Flex 语法(转)

    Flex 布局教程:语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些 ...

  2. Flex 布局教程:语法篇

    作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...

  3. 【转】Flex 布局语法教程

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...

  4. flex布局

    一,啥是flex? 1.Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.任何一个容器都可以指定为Flex布局. .box{ displa ...

  5. Flex 布局

    Flex 布局     网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非 ...

  6. Flex布局窥探(一)

    一.Flex布局是神马? Flex是Flexible Box的缩写,意为‘弹性布局’,用来为盒模型提供最大的灵活性. 任何容器都能被指定为Flex布局: .box{ display: flex; } ...

  7. Flex 布局教程:语法篇[转]

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...

  8. Flex布局语法与实践

    一.参考文献 阮一峰 Flex布局的语法 阮一峰 Flex布局的实践 二.Flex语法 (一)Flex是什么 Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状 ...

  9. Flex布局总结

    2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能.lex布局将成为未来布局 ...

  10. Flex 布局教程:语法篇(转)

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...

随机推荐

  1. Unicode和UTF-8

    作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  2. 路由器DMZ功能

    环境描述 172.17* 校园网 实验室路由器接入校园网,通过nat分化出网段 192.168.. 实验过程 主机A(windows)接入路由器(192.168.1.110),主机B(Ubuntu)接 ...

  3. 2018软工实践—Alpha冲刺(5)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助测试的进行 测试项目运行的服务器环境 ...

  4. Java中static关键字的作用和用法详细介绍

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  5. [图算法] 1003. Emergency (25)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  6. Swift-switch使用注意点

    1.swift后面的()可以省略 2.case后面的额break可以省略 3.如果想产生case穿透使用fallthrough 4.case后面可以判断多个条件","分割 5.sw ...

  7. css新增UI方案

    一.文本新增样式 opacity 不透明度 h1{ margin: 100px auto; opacity: 0.5; } </style> </head> <body& ...

  8. JS高级 2

    递归:函数自己调用自己 在JavaScript中唯一能产生作用域的东西是 函数!js中只有函数可以创建作用域 词法作用域,也叫做静态作用域 //就是在代码写好的那一刻,变量和函数的作用域就已经确定了, ...

  9. 【Python】Python的time和datetime模块

    time 常用的有time.time()和time.sleep()函数. import time print(time.time()) 1499305554.3239055 上面的浮点数称为UNIX纪 ...

  10. Java虚拟机的内存管理----垃圾收集器

    1.Serial收集器 优点,是简单而高效,单线程避免了线程交互的开销. 缺点,进行垃圾回收时需要Stop the world(暂停所有用户线程). 2.ParNew收集器 它是Serial收集器的多 ...