css3弹性盒子模型之box-flex(修正版一)

http://www.rainleaves.com/html/1095.html

css3弹性盒子模型之box-flex(修正版一)

今天看到蓝色理想上面有一篇文章讲《css3弹性盒模型布局模块介绍》里面讲到用box-flex,忽然以为有点心慌,上次看到响应式网页设计里面也一样讲到flex box自适应布局,而上次居然没有引发本身的注意,想深刻研究一下,居然给忘记了,因而就在这种不断的忘记中完全变成outer。今天借此机会,好好充电一下,看了adou写的关于box-flex的文章,发现里面存在一些问题,冒昧更正了一下,若有不妥还请你们指正。css

box-flex是css3新添加的盒子模型属性,它的出现打破了咱们常用的浮动布局,实现垂直等高、水平均分、按比例划分。可是它有必定的局限性,在firefox、chrome这浏览器下须要使用它们的私有属性来定义:firefox(-moz)、chrome(-webkit)。html

 

1、box-flex属性

box-flex主要让子容器针对父容器的宽度按必定规则进行划分。css3

<div class="box">
	<div class="col_1">111</div>
	<div class="col_2">222</div>
	<div class="col_3">333</div>
</div>
<style type="text/css">
.box {
	display:box;
	display:-webkit-box;
	display:-moz-box;
	background-color:#fff;
	width:500px;
	height:100px;
	border:1px solid #333;
	margin:0 auto;
}
.col_1 {
	box-flex:1;
	-moz-box-flex:1;
	-webkit-box-flex:1;
	background-color:#ffc;
}
.col_2 {
	background-color:#ccf;
	box-flex:2;
	-moz-box-flex:2;
	-webkit-box-flex:2;
}
.col_3 {
	background-color:#fcf;
	box-flex:2;
	-moz-box-flex:2;
	-webkit-box-flex:2;
}
</style>

box-flex
注意:web

父容器必须定义为display:box,其子容器才能够进行划分(若是定了display:box则该容器为内联元素,使用margin:0 auto让其居中在firefox下无效,须要经过父容器的text-align:center;来控制。但在chrome下是能够的)chrome

上面所讲到的例子中,三个子块分别设置了一、二、2,也就是把这个父容器分红5份,分别占据了父结构宽度的1/5(100px)、2/5(200px)、2/5(200px)。浏览器

以上是按比例数来进行划分的,若是其中一个或多个子容器设置了固定宽度,其它子容器没有设置,那么设置宽度的按宽度来算,剩下的部分再按上面的方法来计算。布局

.col_3 {
	background-color:#fcf;
	width:50px;/*设置宽度为50px*/
}

弹性盒子模型当子容器中须要有间隔的时候,他们平分的宽度须要减去中间的margin,而后再按比例平分。测试

.col_2 {
	background-color:#ccf;
	box-flex:2;
	-moz-box-flex:2;
	-webkit-box-flex:2;
	margin:0 20px;
}
弹性盒子模型之box-flex

2、box属性

上面讲到的是如何将box-flex如何对父容器的宽度进行划分,如今来讲一下父容器里面的box属性包括哪些。
box-orient, box-direction, box-align, box-pack, box-lines
一、box-orient
box-orient用来肯定父容器里子容器的排列方式是水平仍是垂直,可选属性以下:
horizontal | vertical | inline-axis | block-axis | inherit
horizontal和inline-axis属性其效果表现一致,均可以将容器水平排列,在默认状况下也呈现水平排列的样式。当父容器设置高度时,在firefox下面其子容器的高度无效,但chroma下面则有效。
.col_1 {
	height:50px;
}
.col_2 {
	height:80px;
}
谷歌浏览器显示效果若是你容器不设置高度,子容器的高度值才生效,在firefox下面他们的高度取其中的最大值。而chrome下面设置高度的子容器为本身的高度,未设置的其高度和最大值的高度同样,其实就是和父容器的高度一致。
.box {
	/*未设置高度*/
}
.col_1 {
	height:50px;
}
.col_2 {
	height:80px;
}
.col_3 {
	/*未设置高度*/
}

firefox测试结果chrome测试结果vertical和block-axis属性效果表现一致,均可将子容器垂直排列。他们是对父容器的高度进行分配。若是子容器设置了宽度,也是谷歌下面有效,火狐无效,其它都与horizontal表现一致。flex

谷歌浏览器测试结果火狐浏览器测试结果二、box-directionspa

box-direction用来肯定父容器里面的子容器排列顺序,具备如下属性:

normal | reverse | inherit

normal是默认值,如上面测试结果。

reverse表示反转,其表现方式跟normal相反,呈现为三、二、1

reverse显示效果三、box-align

box-align表示父容器里面子容器的垂直对齐方式,属性值为:

start | end | center | baseline | stretch

start、baseline展现效果

end展现效果

box-flex属性end展现效果center展现效果

centerstretch展现效果,(谷歌下面如start)

火狐下stretch展现

相关文章
相关标签/搜索