首页 > 代码库 > 第29章 CSS伸缩弹性布局(上)
第29章 CSS伸缩弹性布局(上)
第 29章 CSS3弹性伸缩布局[上]
学习要点:
1.布局简介
2.旧版本
本章主要探讨 HTML5中 CSS3提供的用来实现未来响应式弹性伸缩布局方案,这里做
一个初步的了解。
一.布局简介
CSS3提供一种崭新的布局方式:Flexbox布局,即弹性伸缩布局模型(Flexible Box)。
用来提供一个更加有效的方式实现响应式布局。但是用于这个布局方式还处于 W3C的草案
阶段,并且它还分为旧版本、新版本以及混合过渡版本三种不同的编码方式。在发展中,可
能还有各种改动,浏览器的兼容性还存在问题。所以,本节课作为初步了解即可。
兼容
首先,第一步:先创建一段内容,分成三个区域。
//HTML部分
<div>
<p>第一段内容...</p>
<p>第二段内容...</p>
<p>第三段内容...</p>
</div>
//CSS部分
p {
width: 150px;
border: 1px solid gray;
background-color: silver;
margin: 5px;
padding: 5px;
}
div {
display: -moz-box;
display: -webkit-box;
display: box;
}
通过以上设置,在除了 IE浏览器外,布局实现了水平分布。那么下面,我们就重点研
究一下这些属性的含义。
二.旧版本
如果属性和属性值为:display:box,那么就是 2009年 7月份设定的工作草案,属于
旧版本。它面向的是一些早期浏览器的弹性布局方案。
首先,我们要将几个需要布局模块的父元素设置一下容器属性 display。
属性值 说明
box 将容器盒模型作为块级弹性伸缩盒显示(旧版本)
inline-box 将容器盒模型作为内联级弹性伸缩盒显示(旧版本)
我们知道块级它是占用整行的,类似<div>元素;而内联级不占用整行,类似<span>
元素。但是我们设置了整个盒子,他们都不占用,保持一致。
//设置弹性,以火狐为例
div {
display: -moz-box;
}
1.box-orient属性
box-orient主要实现盒子内部元素的流动方向。
//设置垂直流动
div {
-webkit-box-orient: vertical;
}
属性值 说明
horizontal 伸缩项目从左到右水平排列
vertical 伸缩项目从上到下垂直排列
inline-axis 伸缩项目沿着内联轴排列显示
block-axis 伸缩项目沿着块轴排练显示
2.box-direction
box-direction属性主要是设置伸缩容器中的流动顺序。
//设置逆序
div {
-moz-box-direction: reverse;
}
属性值 说明
normal 默认值,正常顺序
reverse 逆序
3.box-pack
box-pack属性用于伸缩项目的分布方式。
//分布方式已结束位置靠齐
div {
-moz-box-pack: end;
}
属性值 说明
start 伸缩项目以起始点靠齐
end 伸缩项目以结束点靠齐
center 伸缩项目以中心点靠齐
justify 伸缩项目平局分布,-webkit-支持,-moz-不支持
4.box-align
box-align属性用来处理伸缩容器的额外空间。
//居中对齐,清理上下额外空间
div {
-moz-box-align: center;
}
属性值 说明
start 伸缩项目以顶部为基准,清理下部额外空间
end 伸缩项目以底部为基准,清理上部额外空间
center 伸缩项目以中部为基准,平均清理上下部额外空间
baseline 伸缩项目以基线为基准,清理额外的空间
stretch 伸缩项目填充整个容器,默认
5.box-flex
box-flex属性可以使用浮点数分配伸缩项目的比例
//设置每个伸缩项目占用的比例
p:nth-child(1) {
-moz-box-flex: 1;
}
p:nth-child(2) {
-moz-box-flex: 2.5;
}
p:nth-child(3) {
-moz-box-flex: 1;
}
6.box-ordinal-group
box-ordinal-group属性可以设置伸缩项目的显示位置。
//将第一个位置的元素,跳转到第三个位置
p:nth-child(1) {
-moz-box-ordinal-group: 3;
}
例子
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>CSS3弹性伸缩布局[上]</title>
<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/style.css">
</head>
<body>
<div>
<p>从技术上来说,IP(Internet Procotol,互联网协议)是一种地址协议,是互联网信息传输的规范和标准,也是互联网赖以存在的基础。现在的互联网大多是建立在IPv4这个版本的地址协议基础上,这个协议所“产生”的IP地址约有45亿个,由国际组织统一分配。简单来说,IP地址就相当于互联网设备的网络身份证,有了它,电脑、智能手机、云电视等设备才能正常上网。据测算,到2020年全球将有约500亿台联网设备,超过IPv4可供地址的10倍。</p>
<p>对此,已经有不少科技企业开始大量囤积IP地址,但IP地址即将耗尽情况的出现还是会让那些有意在线扩展业务的美国企业面临大量损失。事实上,亚洲地区其实早在2011年就已经耗尽了IP地址,欧洲也在一年后遭遇了类似的情况,而北美地区则预计会在今夏迎来相同的状况。</p>
<p>简单来说,IP地址之于互联网就相当于电话号码之于电话一样,这些由数字组成的IP地址不同于以结尾的这些顶级域名,因为它们仅仅是数据在互联网中传输的背后平台。</p>
</div>
</body>
</html>
@charset "utf-8";
p {
width: 150px;
border: 1px solid gray;
background-color: silver;
margin: 5px;
padding: 5px;
}
div {
width: 100%;
display: -moz-box;
display: -webkit-box;
display: box;
/*-moz-box-orient: vertical;*/
/*-moz-box-orient: inline-axis;*/
/*-moz-box-orient: block-axis;*/
/*-moz-box-direction: reverse;*/
/*-moz-box-pack: end;*/
/*-moz-box-pack: center;*/
/*-moz-box-pack: justify;*/
/*-webkit-box-pack: justify;*/
/*-moz-box-align: start;*/
/*-moz-box-align: end;*/
/*-moz-box-align: center;*/
/*-moz-box-align: baseline;*/
}
p:nth-child(1) {
-moz-box-flex: 1;
-moz-box-ordinal-group: 2;
}
p:nth-child(2) {
-moz-box-flex: 3;
-moz-box-ordinal-group: 1;
}
p:nth-child(3) {
-moz-box-flex: 1;
-moz-box-ordinal-group: 3;
}
第29章 CSS伸缩弹性布局(上)