一个伸缩项目就是一个伸缩容器的子元素,伸缩容器内的文本也被当作伸缩项目。伸缩项目中的内容和普通的文本流一样。
伸缩项目都有一个主轴长度( Main Size )和一个侧轴长度( Cross Size )。主轴长度是伸缩项目在主轴上的尺寸,侧轴长度是伸缩项目在侧轴上的尺寸。一个伸缩项目的宽和高取决于伸缩容器的轴,可能就是它的主轴长度和侧轴长度。
默认情况下,伸缩项目是按照文档流出现的先后顺序进行排列的。然后, order 属性可以来指定申诉项目在伸缩容器的出现的顺序:
order: <integer>;
扩展空间由 flex-grow 指定,子属性 flex-grow 的值是数字,如果容器中所有子元素的 flex-grow 是 1 ,那么每个子元素将占据相同的空间。
flex-grow: <number>;
flex-grow: 2; /** 用在第 1 个 */
flex-grow: 2; /** 用在第 1 个 */
收缩空间由 flex-shrink 定义。与 flex-grow 类似。
flex-shrink: <number>;
伸缩比率由 flex-basis 设置伸缩基准值,剩余空间按比率伸缩。
flex-basis: <length> | auto;
auto 为默认值,负值不合法。
flex 是 flex-grow 、 flex-shrink 、 flex-basis 3 个属性的复合属性,该属性适用于伸缩项目。其中第 2 个和第 3 个参数( flex-shrink 、 flex-basis )是可选参数。默认值为 "0 1 auto"。具体如下:
flex : none | [<'flex-grow'> <flex-shrink'> ? |
| <'flex-basis'>
]
对齐方式由 align-self 定义,语法如下
align-self: auto | flex-start | flex-end | center | baseline | stretch;
margin : auto 在伸缩盒中具有强大的功能,一个 "auto" 的 margin 会和合并剩余的空间,把伸缩项目挤到其他位置。
旧版本中的属性 box-orient 和 box-direction 分别控制着子元素的排列方式和排列顺序,排列方式可以是从左向右( horizontal )或从上到下( vertical ),排列顺序可以是正序( normal )或反序( reverse ),结合两个属性,就能达到新版本中 flex-direction 属性的效果,例如水平排列加反序,相当于新属性的 row-reverse 。
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.page-wrap {
display: -webkit-box; /* 2009版 - iOS 6-, Safari 3.1-6*/
display: -moz-box; /* 2009版 - Firefox 19- (存在缺陷)*/
display: -ms-flexbox;
/* 2011版 - IE 10*/
display: -webkit-flex; /* 最新版 - Chrome*/
display: flex; /* 最新版 - Opera 12.1, Firefox 20+*/
}
.main-content {
-webkit-box-ordinal-group: 2; /* 2009版 - iOS 6-, Safari 3.1-6*/
-moz-box-ordinal-group: 2; /* 2009版 - Firefox 19-*/
-ms-flex-order: 2;
/* 2011版 - IE 10*/
-webkit-order: 2; /*
最新版 -
Chrome */
order: 2; /* 最新版 - Opera 12.1, Firefox 20+*/
width: 60%;
/* 不会自动伸缩,其他列将占据空间*/
-moz-box-flex: 1; /*
如果没有该声明,主内容(60%)会伸展到和最宽的段落,就像是段落设置了 white-space:nowrap */
background: white;
}
.main-nav {
-webkit-box-ordinal-group: 1; /*
2009版 - iOS 6-, Safari 3.1-6 */
-moz-box-ordinal-group: 1; /*
2009版 - Firefox 19- */
-ms-flex-order: 1; /* 2011版 - IE 10 */
-webkit-order: 1; /* 最新版 - Chrome*/
order: 1;
/* 最新版 - Opera 12.1, Firefox 20+*/
-webkit-box-flex: 1; /* 2009版 - iOS 6-, Safari 3.1-6*/
-moz-box-flex: 1; /* 2009版 - Firefox 19-*/
width: 20%;
/* 2009版语法, 否则将崩溃*/
-webkit-flex: 1; /*
Chrome
*/
-ms-flex: 1; /* IE 10*/
flex: 1;
/* 最新版 - Opera 12.1, Firefox 20+*/
background: #ccc;
}
.main-sidebar {
-webkit-box-ordinal-group: 3;
/* 2009版 - iOS 6-, Safari 3.1-6*/
-moz-box-ordinal-group: 3;
/* 2009版 - Firefox 19- */
-ms-flex-order: 3; /* 2011版 - IE 10*/
-webkit-order: 3; /* 最新版 - Chrome*/
order: 3;
/* 最新版, Spec - Opera 12.1, Firefox 20+*/
-webkit-box-flex: 1;
/* 2009版 - iOS 6-, Safari 3.1-6 */
-moz-box-flex: 1; /* Firefox 19-*/
width: 20%; /* 2009版,否则将崩溃
*/
-ms-flex: 1; /* 2011版 - IE 10*/
-webkit-flex: 1; /* 最新版 - Chrome*/
flex: 1; /*
最新版 - Opera 12.1, Firefox 20+ */
background: #ccc;
}
.main-content,
.main-sidebar,
.main-nav {
padding: 1em;
}
body {
padding: 2em;
background: #79a693;
}
\* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
h1,
h2 {
font: bold 2em Sans-Serif;
margin: 0 0 1em 0;
}
h2 {
font-size: 1.5em;
}
p {
margin: 0 0 1em 0;
}
</style>
</head>
<body>
<div class="page-wrap">
<section class="main-content">
<h1>主要内容</h1>
<p><strong>强调内容</strong></p>
<p>段落文本</p>
<p>描述文本</p>
</section>
<nav class="main-nav">
<h2>导航</h2>
<ul>
<li><a href="#">主页</a></li>
<li><a href="#">咨询</a></li>
<li><a href="#">产品</a></li>
<li><a href="#">关于</a></li>
</ul>
</nav>
<aside class="main-sidebar">
<h2>侧栏</h2>
<p>侧栏内容</p>
</aside>
</div>
</body>
</html>