今天看到蓝色理想上面有一篇文章讲《css3弹性盒模型布局模块介绍》里面讲到用box-flex,突然觉得有点心慌,上次看到响应式网页设计里面 也同样讲到flex box自适应布局,而上次竟然没有引起自己的注意,想深入研究一下,竟然给忘记了,于是就在这种不断的忘记中彻底变成outer。今天借此机会,好好充电 一下,看了adou写的关于box-flex的文章,发现里面存在一些问题,冒昧更正了一下,如有不妥还请大家指正。
box-flex是css3新添加的盒子模型属性,它的出现打破了我们经常使用的浮动布局,实现垂直等高、水平均分、按比例划分。但是它有一定的局 限性,在firefox、chrome这浏览器下需要使用它们的私有属性来定义:firefox(-moz)、chrome(-webkit)。
<divclass="box"><divclass="col_1">111</div><divclass="col_2">222</div><divclass="col_3">333</div></div>
<styletype="text/css">.box{display:box;display:-webkit-box;display:-moz-box;background-color:#fff;width:500px;height:100px;border:1pxsolid#333;margin:0auto;}.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>
注意:父容器必须定义为display:box,其子容器才可以进行划分。box-flex属性的值是指父容器中除了子容器以外的剩余空间如何被子容器分割。这也意味着每个元素的padding不会额外增加它的宽度上面的例子中,col_1,col_2,col_3的flex分别为1,2,2,则,各自分配到的宽度为 (500-24*3)/5、 2*(500-24*3)/5、2*(500-24*3)/5
当子容器中需要有间隔的时候,他们平分的宽度需要减去中间的margin,然后再按比例平分。
.col_2{background-color:#ccf;box-flex:2;-moz-box-flex:2;-webkit-box-flex:2;margin:020px;}
二、box属性
上面讲到的是如何将box-flex如何对父容器的宽度进行划分,现在来说一下父容器里面的box属性包括哪些。box-orient,box-direction,box-align,box-pack,box-lineshorizontal和inline-axis属性其效果表现一致,都可以将容器水平排列,在默认情况下也呈现水平排列的样式。当父容器设置高度时,在firefox下面其子容器的高度无效,但chroma下面则有效。 如果你容器不设置高度,子容器的高度值才生效,在firefox下面他们的高度取其中的最大值。而chrome下面设置高度的子容器为自己的高度,未设置的其高度和最大值的高度一样,其实就是和父容器的高度一致。vertical和block-axis属性效果表现一致,都可将子容器垂直排列。他们是对父容器的高度进行分配。如果子容器设置了宽度,也是谷歌下面有效,火狐无效,其它都与horizontal表现一致。 2、box-direction
box-direction用来确定父容器里面的子容器排列顺序,具有以下属性:
normal | reverse | inherit
normal是默认值,如上面测试结果。
reverse表示反转,其表现方式跟normal相反,呈现为3、2、1
3、box-align
box-align表示父容器里面子容器的垂直对齐方式,属性值为:
start | end | center | baseline | stretch
start、baseline展示效果
end效果
center展示效果
stretch展示效果