来源: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. js复制对象 和 节点类型和NodeList

    1. myList.cloneNode(true); 在参数为true的情况下,执行深复制,也就是复制节点及其整个子节点树,包括属性 2. myList.cloneNode(false); 在参数为f ...

  2. iOS开发之MD5封装及应用

    一.MD5的封装 #define CC_MD5_DIGEST_LENGTH 16 - (NSString *)toMD5 { const char* input = [self UTF8String] ...

  3. 单片机(MCU)使用常用名字解释

    总线:指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信. 地址总线(AB):地址总线是单向的,用于传送地址信息.地址总线的宽度为16位,因此基外部存储器直接寻址64K,16位地址总 ...

  4. 用continue语句的时候,要千万小心内存泄漏,当然还有return和break也是

    疑惑了大半年的内存泄漏,居然是因为这个原因- 有空学学QT的指针使用,可以使得代码更简洁.更不容易内存泄漏-

  5. 微信授权登陆接入第三方App(步骤总结)Android

    微信授权登陆接入第三方App(步骤总结)Android Android App实现第三方微信登录

  6. 通过jstack定位在线运行java系统故障_案例1

    问题描述: 在一个在线运行的java web系统中,会定时运行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务只打印了开始进入FTP处理 ...

  7. 方案:手动升级WordPress系统

    对于WordPress系统及时进行更新维护是十分必须的操作,更新维护不仅可以更新系统服务功能,还能够完善安全系统.      如果你是虚拟主机的用户,可以使用FTP账户进行自动更新服务,但是如果你是V ...

  8. 关于Tcp三次握手的思考

    一.为什么不能使两次握手,两次握手就应该可以保证线路的畅通? 1) 只能建立一个方向的连接,称为半连接 记住TCP是全双工的. A向B发出请求,同时收到B的确认,这时只有A.B知道A到B的连接成功了. ...

  9. The 4th tip of DB Query Analyzer

    The 4th tip of DB QueryAnalyzer Ma Genfeng (Guangdong Unitoll Services incorporated, Guangzhou 51030 ...

  10. linux下部署svn服务器

    系统Linux debian 2.6.32-5-686 先安装svn工具:apt-get install subversion,耐心等待安装完成.安装完成后svn客户端.服务器都有了. 接者建立svn ...