来源:Robert’s talk
原文:http://robertnyman.com/2010/12/02/css3-flexible-box-layout-module-aka-flex-box-introduction-and-demostest-cases/

Web布局一直个是难点,但貌似现在我们有更好的选择了。

背景

首先,我们有表格布局。当不考虑语义并且利用一些适当的嵌套和其他技巧,我们可以用table建立具有一定功能的布局。

然后是现在大多数人都在使用的浮动布局。我们可以使用任何我们想用的元素,但浮动并
不适用于初学者。表面上它看起来很基础,但背后复杂的功能可以使经验丰富的开发者看着自己的屏幕不知所措。另外,浮动布局有一个缺点就是需要通过额外的元
素清除浮动,或者更好一点,可以清除CSS浮动而不添加额外的标签。

这些缺点使得浮动布局不是很容易掌握,因为没有一个默认的方法可以建立起浮动与元素之间的关系,所以我们还需要更多的方法来实现多栏等高布局。

然后有些人开始使用display: table,display: table-cell等,但由于直到IE8 Internet
Explorer浏览器才支持,人们似乎放弃了而只是接受float作为实际解决方案。

介绍弹性盒模型布局模块(aka Flex Box)

有一个隐藏的利器,就是大多数人似乎已经忽视的弹性盒模型布局模块。它提供了:

  • 等高的栏目。
  • 独立的元素顺序。
  • 指定元素之间的关系。
  • 灵活的尺寸和对齐方式。

一个简单的例子

当我们想要显示一个三栏布局,我们会这样做:

<div class="flex-container">
    <div class="col-1">I am
column 1</div>
    <div class="col-2">I am column
2</div>
    <div class="col-3">I am column
3</div>
</div>

.flex-container {
    display: -moz-box;
    display:
-webkit-box;
    display: box;
    -moz-box-orient: horizontal;
   
-webkit-box-orient: horizontal;
    box-orient: horizontal;
}

我们使用display属性把容器元素设为 box,然后我们用box-orient属性,将它设置水平(你也可以使用vertical设为垂直)。

用这个方法,直接子元素(如<div
class=”col-1″>等)将被一个接一个水平放置,它们的宽度由它们的内容决定。但是如果我们想用自适应的方法让它们扩展到整个容器元素的宽度该怎么办呢?那么我们就需要为它们设置box-flex:

.col-1 {
    -moz-box-flex: 1;
    -webkit-box-flex: 1;
   
box-flex: 1;
}
.col-2 {
    -moz-box-flex: 1;
    -webkit-box-flex:
1;
    box-flex: 1;
}
.col-3 {
    -moz-box-flex: 2;
   
-webkit-box-flex: 2;
    box-flex: 2;

}

box-flex属性的值是指父容器中除了子容器以外的剩余空间如何被子容器分割,就像佐伊评论的,数字越大分到的越多。这也意味着每个元素的padding不会额外增加它的宽度(不错吧?)。

设置呈现顺序

我们有两种方法设置呈现顺序,可以通过设置容器元素(即设置display:
box的元素)的box-direction属性,或者我们可以用box-ordinal-group给每一个列/子元素设置一个数字来表示它们的呈现顺
序(有趣的是,这个属性在火狐中会使元素右对齐,而谷歌Chrome和Safari是左对齐):

.flex-container-reverse {
    display: -moz-box;
    display:
-webkit-box;
    display: box;
    -moz-box-orient: horizontal;
   
-webkit-box-orient: horizontal;
    box-orient: horizontal;
   
-moz-box-direction: reverse;
    -webkit-box-direction: reverse;
   
box-direction: reverse;
}

表示反向呈现,或:

.col-1 {
    -moz-box-ordinal-group: 2;
    -webkit-box-ordinal-group:
2;
    box-ordinal-group: 2;
}

.col-2 {
    -moz-box-ordinal-group: 3;
    -webkit-box-ordinal-group:
3;
    box-ordinal-group: 3;
}

.col-3 {
    -moz-box-ordinal-group: 1;
    -webkit-box-ordinal-group:
1;
    box-ordinal-group: 1;
}

表示col-3是第一个,然后是col-1,最后是col-2。

居中对齐和两端对齐

还有一个属性,box-pack,可以它来规定盒子的呈现方式,例如居中,两端对齐等。这个例子使三个元素在它们的父元素内居中(有趣的是,之前设置的padding消失了):

.flex-container-center {
    display: -moz-box;
    display:
-webkit-box;
    -moz-box-orient: horizontal;
    -webkit-box-orient:
horizontal;
    box-orient: horizontal;
    -moz-box-pack: center;
   
-webkit-box-pack: center;
    box-pack: center;
}

我们也可以让这三个元素在父元素内两端对齐:

.flex-container-justify {
    display: -moz-box;
    display:
-webkit-box;
    display: box;
    -moz-box-orient: horizontal;
   
-webkit-box-orient: horizontal;
    box-orient: horizontal;
   
-moz-box-pack: justify;
    -webkit-box-pack: justify;
    box-pack:
justify;
}

然而,两端对齐貌似只在WebKit内核浏览器中有效(谷歌Chrome和Safari)。

弹性盒模型布局demo

我加入了一些CSS3弹性盒模型布局实例和测试用例到我还在不断完善中的CSS3测试套件,你可以用自己的浏览器看看这些例子,也可以修改代码看看会发生什么。

浏览器支持

  • Firefox 3.0+
  • Google Chrome 5.0+
  • Safari 3.2+
  • iOS 3.2+ (Mobile Safari)
  • Android 2.2+

这已经是相当好的浏览器支持,但不幸的是,目前仍然没有发现Internet Explorer 9测试版或Opera
11测试版将要支持弹性盒模型布局的痕迹,但我希望它们可以跟上,因为我们真的需要一个替代方案来在web上创建布局。

相关阅读

· Mozilla hacks: The CSS 3 Flexible Box Model· Future of CSS: The Flexible Box Model

CSS3弹性盒模型布局模块介绍的更多相关文章

  1. CSS3弹性盒模型布局模块

    原文:http://robertnyman.com/2010/12/02/css3-flexible-box-layout-module-aka-flex-box-introduction-and-d ...

  2. CSS3弹性盒模型flexbox布局基础版

    原文链接:http://caibaojian.com/using-flexbox.html 最近看了社区上的一些关于flexbox的很多文章,感觉都没有我这篇文章实在,最重要的兼容性问题好多人都没有提 ...

  3. CSS3弹性盒模型,Flex布局教程

    布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. CSS3中引入flex的弹性盒模型 ...

  4. css3基础教程:CSS3弹性盒模型

    今天给大家分享一篇关于CSS3基础教程 文章,主要是讲CSS3弹性盒模型.弹性布局的主要思想是让容器有能力来改变项目的宽度和高度,以填满可用空间(主要是为了容纳所有类型的显示设备和屏幕尺寸)的能力. ...

  5. css3弹性盒模型flex快速入门与上手(align-content与align-items)

    接着上文css3弹性盒模型flex快速入门与上手1继续,上文还剩下两个父容器的属性align-items和align-content. 一.align-content:多行的副轴对齐方式 含义 多行的 ...

  6. 彻底搞懂flex弹性盒模型布局

    为什么要用flex 基于css3简单方便,更优雅的实现,浏览器兼容性好,传统的css实现一个div居中布局要写一堆代码,而现在几行代码就搞定了,没有理由不用flex. 兼容性: Base Browse ...

  7. css和css3弹性盒模型实现元素宽度(高度)自适应

    一.css实现左侧宽度固定右侧宽度自适应 1.定位 <!DOCTYPE html> <html lang="en"> <head> <me ...

  8. 87.CSS Flex 弹性盒模型布局教程(共用的css在48篇文章gird)

    CSS Flex 弹性盒模型布局教程 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. flex布局就是给任何一个容器添加 dis ...

  9. CSS3弹性盒模型flexbox布局

    属性介绍 display: flex | inline-flex; (适用于父类容器元素上) 定义一个flex容器,内联或者根据指定的值,来作用于下面的子类容器.· box:将对象作为弹性伸缩盒显示. ...

随机推荐

  1. iphone手机端图片错位修正的js代码

    <script type="text/javascript"> $(function(){ // 获取终端的相关信息 var Terminal = { // 辨别移动终 ...

  2. ext4 grid edit 添加删除行

    extjs--grid动态添加一行和删除一行: (1)选择rowEditing时,添加一行后的编辑方式为----startEdit(record,columnHeader) (2)选择cellEdit ...

  3. 利用Azure Redis Cache构建百万量级缓存读写

    Redis是一个非常流行的基于内存的,低延迟,高吞吐量的key/value数据存储,被广泛用于数据库缓存,session的管理,热数据高速访问,甚至作为数据库方式提高应用程序可扩展性,吞吐量,和实施处 ...

  4. Xshell4连接Linux后 win快捷键锁屏

    今天在使用Xshell连接CentOS后 使用Vim编辑器编辑完后 习惯性的按了Ctrl+S 然后按什么都不起作用 只能重新连接 通过查资料得知 Ctrl + S 是Linux 锁屏的快捷键 要解除锁 ...

  5. 数据库语句union的总结

    select * from ( (select * from user limit 0,3) union (select * from user limit 10,30) ) tmp where ui ...

  6. 浅谈 qmake 之 shadow build(将源码路径和构建路径分开,一套源码要分别用msvc2008、msvc2008、mingw分别编译又不互相干扰)

    shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...

  7. 《Programming WPF》翻译 第5章 8.我们进行到哪里了?

    原文:<Programming WPF>翻译 第5章 8.我们进行到哪里了? 样式支持你定义一个策略来设置可视化元素的依赖属性.属性的设置可以被命名以及手动或者编程方式地通过名称应用,或者 ...

  8. MySQL脚本

    一. move.sql use items set @endTime=(select DATE_SUB(now(),INTERVAL 3 MONTH)); REPLACE INTO new_items ...

  9. poj 3321

    题目链接 题意:一开始1-n都有苹果,Q查询以x为根下存在多少. 树状数组+DFS+队列转换 这题纠结了2天,一开始一点思路都没有,看大神都是吧树状数组转换成队列来做 看了好久都不知道怎么转换的, 解 ...

  10. bootargs中的环境变量说明和一些常用的uboot命令

    bootargs中的环境变量说明和一些常用的uboot命令 一些常见的uboot命令:Help [command]在屏幕上打印命令的说明Boom [addr]启动在内存储器的内核Tftpboot通过t ...